diff --git a/package-lock.json b/package-lock.json index 0be4e929aacf7b99084d8e0cb43c62cb60035637..d6403a43196870af2b7e25556678d13cc834ed8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,6 @@ "@types/moo": "0.5.3", "@types/node": "14.14.34", "@types/semver": "7.3.10", "@types/vscode": "1.60.0", - "becke-ch--regex--s0-0-v1--base--pl--lib": "1.4.0", "builtin-modules": "3.2.0", "chokidar": "3.5.1", "color-name": "1.1.4", @@ -36,6 +35,7 @@ "klona": "2.0.4", "license-checker": "25.0.1", "line-column": "1.0.2", "moo": "0.5.1", + "multi-regexp2": "1.0.3", "normalize-path": "3.0.0", "pkg-up": "3.1.0", "postcss": "8.3.9", @@ -245,14 +245,15 @@ "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.2", + "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dependencies": { -{ + "@babel/helper-compilation-targets": "^7.13.0", + "version": "2.0.2", "": { - "name": "root", + "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/traverse": "^7.13.0", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -5657,15 +5658,15 @@ "node": ">=4" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.2", + "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "dependencies": { - "name": "root", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", { - "detective": "5.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "@parcel/watcher": "2.0.3", "@parcel/watcher": "2.0.3", + "vscode-uri": "3.0.2" "semver": "^6.1.1" }, "peerDependencies": { @@ -5681,16 +5682,15 @@ "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "@types/node": "14.14.34", "@parcel/watcher": "2.0.3", - "packages": { - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "@babel/helper-module-transforms": "^7.18.9", "lockfileVersion": 2, - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "requires": true, + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", "dependencies": { - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", "@parcel/watcher": "2.0.3", + "strong-log-transformer": "^2.0.0" "core-js-compat": "^3.21.0" }, "peerDependencies": { @@ -5825,12 +5825,6 @@ "tweetnacl": "^0.14.3" } }, "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "name": "root", - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", - "integrity": "sha512-FnWonOyaw7Vivg5nIkrUll9HSS5TjFbyuURAiDssuL6VxrBe3ERzudRxOcWRhZYlP89UArMDikz7SapRPQpmZQ==" - }, - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.1.tgz", @@ -6149,11 +6143,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001370", - "js-tokens": "^4.0.0" + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "": { - "js-tokens": "^4.0.0" + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "name": "root", + "integrity": "sha512-wgfRYa9DenEomLG/SdWgQxpIyvdtH3NW8Vq+tB6AwR9e56iOIcu1im5F/wNdDf04XlKHXqIx4N8Jo0PemeBenQ==", "funding": [ { "type": "opencollective", @@ -6400,10 +6394,11 @@ "node": ">=4" } }, "node_modules/cli-spinners": { - "version": "2.7.0", + "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "ansi-styles": "^3.2.1", + "@parcel/watcher": "2.0.3", "@parcel/watcher": "2.0.3", + "version": "2.2.0", "engines": { "node": ">=6" }, @@ -7189,15 +7184,15 @@ "node": ">=0.10.0" } }, "node_modules/core-js-compat": { - "name": "root", + "@babel/template": "^7.18.6", "name": "root", - "node_modules/@ampproject/remapping": { "name": "root", + "@babel/template": "^7.18.6", "name": "root", - "version": "2.2.0", + "lockfileVersion": 2, - "detect-indent": "6.0.0", + "@babel/template": "^7.18.6", "name": "root", - "name": "root", + "requires": true, "dependencies": { "browserslist": "^4.21.2", "semver": "7.0.0" @@ -7216,14 +7211,14 @@ "semver": "bin/semver.js" } }, "node_modules/core-js-pure": { + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "name": "root", - "node": ">= 8.3" - "name": "root", + "@babel/template": "^7.18.6", "name": "root", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "packages": { - "name": "root", + "@babel/template": "^7.18.6", "name": "root", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "": { "hasInstallScript": true, "funding": { "type": "opencollective", @@ -7780,9 +7775,9 @@ "safer-buffer": "^2.1.0" } }, "node_modules/electron-to-chromium": { - "version": "1.4.199", + "version": "1.4.198", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.198.tgz", - "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==" + "integrity": "sha512-jwqQPdKGeAslcq8L+1SZZgL6uDiIDmTe9Gq4brsdWAH27y7MJ2g9Ue6MyST3ogmSM49EAQP7bype1V5hsuNrmQ==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -14702,6 +14697,11 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/multi-regexp2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/multi-regexp2/-/multi-regexp2-1.0.3.tgz", + "integrity": "sha512-yYrsPk+8TW+r4HK8/7/BIqc7QzcMSIwUGwGouiwIC/anHpjCfKO/PNACGiPYn0WzEMiq+LuEAmZ80NRiCCykiw==" + }, "node_modules/multimatch": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz", @@ -21124,14 +21124,15 @@ "regexpu-core": "^5.1.0" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.2", + "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "requires": { -{ + "@babel/helper-compilation-targets": "^7.13.0", + "version": "2.0.2", "": { - "name": "root", + "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/traverse": "^7.13.0", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -25316,15 +25317,15 @@ } } }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.2", + "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "requires": { - "name": "root", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", { - "detective": "5.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "@parcel/watcher": "2.0.3", "@parcel/watcher": "2.0.3", + "vscode-uri": "3.0.2" "semver": "^6.1.1" }, "dependencies": { @@ -25336,16 +25337,15 @@ } } }, "babel-plugin-polyfill-corejs3": { - "@types/node": "14.14.34", "@parcel/watcher": "2.0.3", - "packages": { - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "@babel/helper-module-transforms": "^7.18.9", "lockfileVersion": 2, - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "requires": true, + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", "requires": { - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", "@parcel/watcher": "2.0.3", + "strong-log-transformer": "^2.0.0" "core-js-compat": "^3.21.0" } }, @@ -25454,12 +25454,6 @@ "tweetnacl": "^0.14.3" } }, "slash": "^3.0.0", - "requires": true, - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", - "integrity": "sha512-FnWonOyaw7Vivg5nIkrUll9HSS5TjFbyuURAiDssuL6VxrBe3ERzudRxOcWRhZYlP89UArMDikz7SapRPQpmZQ==" - }, - "slash": "^3.0.0", "packages": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.1.tgz", @@ -25710,11 +25704,13 @@ "quick-lru": "^4.0.1" } }, "caniuse-lite": { - "version": "1.0.30001370", + "version": "1.0.30001368", - "js-tokens": "^4.0.0" + "@babel/template": "^7.18.6", "": { + "name": "root", + "@babel/template": "^7.18.6", "dependencies": { - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", + "lockfileVersion": 2, }, "capture-exit": { "version": "2.0.0", @@ -25902,10 +25898,11 @@ "restore-cursor": "^2.0.0" } }, "cli-spinners": { - "version": "2.7.0", + "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "@babel/template": "^7.18.6", "dependencies": { - "@babel/core": "^7.4.0-0" + "requires": true, }, "cli-width": { "version": "2.2.1", @@ -26531,14 +26528,15 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js-compat": { - "detect-indent": "6.0.0", + "@babel/template": "^7.18.6", "name": "root", "name": "root", - "node_modules/@jest/console/node_modules/chalk": { - "name": "root", + "@babel/template": "^7.18.6", "name": "root", + "lockfileVersion": 2, + "@babel/template": "^7.18.6", "name": "root", - "name": "root", + "requires": true, "requires": { "browserslist": "^4.21.2", "semver": "7.0.0" @@ -26551,13 +26550,14 @@ } } }, "core-js-pure": { - "detect-indent": "6.0.0", + "@babel/template": "^7.18.6", "name": "root", "name": "root", + "@babel/template": "^7.18.6", "name": "root", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "packages": { + "@babel/template": "^7.18.6", "dependencies": { - "fast-glob": "3.2.4", "packages": { }, "core-util-is": { @@ -26988,9 +26989,9 @@ "safer-buffer": "^2.1.0" } }, "electron-to-chromium": { - "version": "1.4.199", + "version": "1.4.198", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.198.tgz", - "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==" + "integrity": "sha512-jwqQPdKGeAslcq8L+1SZZgL6uDiIDmTe9Gq4brsdWAH27y7MJ2g9Ue6MyST3ogmSM49EAQP7bype1V5hsuNrmQ==" }, "emoji-regex": { "version": "9.2.2", @@ -32351,6 +32352,11 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multi-regexp2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/multi-regexp2/-/multi-regexp2-1.0.3.tgz", + "integrity": "sha512-yYrsPk+8TW+r4HK8/7/BIqc7QzcMSIwUGwGouiwIC/anHpjCfKO/PNACGiPYn0WzEMiq+LuEAmZ80NRiCCykiw==" }, "multimatch": { "version": "3.0.0", diff --git a/packages/tailwindcss-language-service/package-lock.json b/packages/tailwindcss-language-service/package-lock.json index 201680abf297bad60ed3344ff3cf667bd93cedf3..64c4140f59c276a6075afa0d1e3afaf8c1638604 100644 --- a/packages/tailwindcss-language-service/package-lock.json +++ b/packages/tailwindcss-language-service/package-lock.json @@ -11,8 +11,6 @@ "dependencies": { "@types/moo": "0.5.3", "@types/semver": "7.3.10", { - "version": "0.0.24", -{ "lockfileVersion": 2, "css.escape": "1.5.1", "culori": "0.20.1", @@ -21,6 +19,7 @@ "dlv": "1.1.3", "dset": "3.1.2", "line-column": "1.0.2", "moo": "0.5.1", + "multi-regexp2": "1.0.3", "postcss": "8.3.9", "postcss-selector-parser": "6.0.2", "semver": "7.3.7", @@ -3027,11 +3026,6 @@ "dev": true, "dependencies": { "tweetnacl": "^0.14.3" } - }, - "node_modules/becke-ch--regex--s0-0-v1--base--pl--lib": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", - "integrity": "sha512-FnWonOyaw7Vivg5nIkrUll9HSS5TjFbyuURAiDssuL6VxrBe3ERzudRxOcWRhZYlP89UArMDikz7SapRPQpmZQ==" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -8509,6 +8503,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/multi-regexp2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/multi-regexp2/-/multi-regexp2-1.0.3.tgz", + "integrity": "sha512-yYrsPk+8TW+r4HK8/7/BIqc7QzcMSIwUGwGouiwIC/anHpjCfKO/PNACGiPYn0WzEMiq+LuEAmZ80NRiCCykiw==" + }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -14891,12 +14890,6 @@ "tweetnacl": "^0.14.3" } }, "@babel/plugin-transform-destructuring": "^7.12.1", - "version": "0.0.24", - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", - "integrity": "sha512-FnWonOyaw7Vivg5nIkrUll9HSS5TjFbyuURAiDssuL6VxrBe3ERzudRxOcWRhZYlP89UArMDikz7SapRPQpmZQ==" - }, - "@babel/plugin-transform-destructuring": "^7.12.1", "lockfileVersion": 2, "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -19145,6 +19138,11 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "multi-regexp2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/multi-regexp2/-/multi-regexp2-1.0.3.tgz", + "integrity": "sha512-yYrsPk+8TW+r4HK8/7/BIqc7QzcMSIwUGwGouiwIC/anHpjCfKO/PNACGiPYn0WzEMiq+LuEAmZ80NRiCCykiw==" }, "mute-stream": { "version": "0.0.8", diff --git a/packages/tailwindcss-language-service/package.json b/packages/tailwindcss-language-service/package.json index f2d8f60796c0f120dee23eeade9ac195804ea3f9..6a075bacd2a419937a133fc1a44d4451bfd3fe10 100644 --- a/packages/tailwindcss-language-service/package.json +++ b/packages/tailwindcss-language-service/package.json @@ -16,7 +16,6 @@ }, "dependencies": { "@types/moo": "0.5.3", "@types/semver": "7.3.10", - "becke-ch--regex--s0-0-v1--base--pl--lib": "1.4.0", "color-name": "1.1.4", "css.escape": "1.5.1", "culori": "0.20.1", @@ -25,6 +24,7 @@ "dlv": "1.1.3", "dset": "3.1.2", "line-column": "1.0.2", "moo": "0.5.1", + "multi-regexp2": "1.0.3", "postcss": "8.3.9", "postcss-selector-parser": "6.0.2", "semver": "7.3.7", diff --git a/packages/tailwindcss-language-service/src/completionProvider.ts b/packages/tailwindcss-language-service/src/completionProvider.ts index 5be8c6020ab864c36f03f337a589071eb7660c9b..f53ddd2be6c50029eaffa78f4003ad6f5a3714fe 100644 --- a/packages/tailwindcss-language-service/src/completionProvider.ts +++ b/packages/tailwindcss-language-service/src/completionProvider.ts @@ -29,10 +29,10 @@ import { getClassAttributeLexer, getComputedClassAttributeLexer } from './util/lexers' import { validateApply } from './util/validateApply' import { flagEnabled } from './util/flagEnabled' import { remToPx } from './util/remToPx' +import { createMultiRegexp } from './util/createMultiRegexp' import * as jit from './util/jit' import { getVariantsFromClassName } from './util/getVariantsFromClassName' import * as culori from 'culori' -import Regex from 'becke-ch--regex--s0-0-v1--base--pl--lib' let isUtil = (className) => Array.isArray(className.__info) @@ -414,38 +414,36 @@ let str = document.getText(searchRange) for (let i = 0; i < regexes.length; i++) { try { - let [containerRegexString, classRegexString] = Array.isArray(regexes[i]) -import { flagEnabled } from './util/flagEnabled' + MarkupKind, Range, CompletionItem, - MarkupKind, - let containerRegex = new Regex(containerRegexString, 'g') + containerRegex = createMultiRegexp(containerRegex) - let containerMatch: ReturnType + let containerMatch while ((containerMatch = containerRegex.exec(str)) !== null) { const searchStart = document.offsetAt(searchRange.start) - const matchStart = searchStart + containerMatch.index[1] + const matchStart = searchStart + containerMatch.start - const matchEnd = matchStart + containerMatch[1].length + const matchEnd = searchStart + containerMatch.end const cursor = document.offsetAt(position) if (cursor >= matchStart && cursor <= matchEnd) { -import { remToPx } from './util/remToPx' + MarkupKind, Range, + TextDocument, -import { remToPx } from './util/remToPx' MarkupKind, + ...classListRange.start, - let classRegex = new Regex(classRegexString, 'g') + classRegex = createMultiRegexp(classRegex) - CompletionItem, + (context.triggerKind === 1 || import { State } from './util/state' - TextDocument, - while ((classMatch = classRegex.exec(containerMatch[1])) !== null) { - CompletionItem, + (context.triggerKind === 1 || import type { + (context.triggerKind === 1 || CompletionItem, -import * as emmetHelper from 'vscode-emmet-helper-bundled' + const classMatchEnd = matchStart + classMatch.end if (cursor >= classMatchStart && cursor <= classMatchEnd) { - classList = classMatch[1].substr(0, cursor - classMatchStart) + classList = classMatch.match.substr(0, cursor - classMatchStart) } } @@ -451,7 +451,7 @@ if (typeof classList === 'undefined') { throw Error() } } else { - classList = containerMatch[1].substr(0, cursor - matchStart) + classList = containerMatch.match.substr(0, cursor - matchStart) } return completionsFromClassList(state, classList, { diff --git a/packages/tailwindcss-language-service/src/util/createMultiRegexp.ts b/packages/tailwindcss-language-service/src/util/createMultiRegexp.ts new file mode 100644 index 0000000000000000000000000000000000000000..e6e086fe8da5bfff812b5958d66aee5cbf4a08ed --- /dev/null +++ b/packages/tailwindcss-language-service/src/util/createMultiRegexp.ts @@ -0,0 +1,57 @@ +import MultiRegexp from 'multi-regexp2' + +export function createMultiRegexp(regexString: string) { + let insideCharClass = false + let captureGroupIndex = -1 + + for (let i = 0; i < regexString.length; i++) { + if ( + !insideCharClass && + regexString[i] === '[' && + regexString[i - 1] !== '\\' + ) { + insideCharClass = true + } else if ( + insideCharClass && + regexString[i] === ']' && + regexString[i - 1] !== '\\' + ) { + insideCharClass = false + } else if ( + !insideCharClass && + regexString[i] === '(' && + regexString.substr(i + 1, 2) !== '?:' + ) { + captureGroupIndex = i + break + } + } + + const re = /(?:[^\\]|^)\(\?:/g + let match: RegExpExecArray + let nonCaptureGroupIndexes: number[] = [] + + while ((match = re.exec(regexString)) !== null) { + if (match[0].startsWith('(')) { + nonCaptureGroupIndexes.push(match.index) + } else { + nonCaptureGroupIndexes.push(match.index + 1) + } + } + + const regex = new MultiRegexp( + new RegExp( + regexString.replace(re, (m) => m.substr(0, m.length - 2)), + 'g' + ) + ) + + let groupIndex = + 1 + nonCaptureGroupIndexes.filter((i) => i < captureGroupIndex).length + + return { + exec: (str: string) => { + return regex.execForGroup(str, groupIndex) + }, + } +} diff --git a/packages/tailwindcss-language-service/src/util/find.ts b/packages/tailwindcss-language-service/src/util/find.ts index d30ac49a9663ed92c3f4b33f43702a5fcbbb42f5..b0a4196195b9ffc81ec093c325319bb1933704e1 100644 --- a/packages/tailwindcss-language-service/src/util/find.ts +++ b/packages/tailwindcss-language-service/src/util/find.ts @@ -10,8 +10,8 @@ import { getClassAttributeLexer, getComputedClassAttributeLexer } from './lexers' import { getLanguageBoundaries } from './getLanguageBoundaries' import { resolveRange } from './resolveRange' import dlv from 'dlv' +import { createMultiRegexp } from './createMultiRegexp' import { rangesEqual } from './rangesEqual' -import Regex from 'becke-ch--regex--s0-0-v1--base--pl--lib' export function findAll(re: RegExp, str: string): RegExpMatchArray[] { let match: RegExpMatchArray @@ -132,39 +132,37 @@ const result: DocumentClassList[] = [] for (let i = 0; i < regexes.length; i++) { try { - let [containerRegexString, classRegexString] = Array.isArray(regexes[i]) -import { getLanguageBoundaries } from './getLanguageBoundaries' +import { DocumentClassName, DocumentClassList, State, DocumentHelperFunction } from './state' import { isJsxContext } from './js' - : [regexes[i]] +import { getClassAttributeLexer, getComputedClassAttributeLexer } from './lexers' -import type { TextDocument, Range, Position } from 'vscode-languageserver' + return matches[matches.length - 1] -import { getClassAttributeLexer, getComputedClassAttributeLexer } from './lexers' -import type { TextDocument, Range, Position } from 'vscode-languageserver' + return matches[matches.length - 1] import type { TextDocument, Range, Position } from 'vscode-languageserver' - while ((containerMatch = containerRegex.exec(text)) !== null) { + while ((containerMatch = containerRegex2.exec(text)) !== null) { const searchStart = doc.offsetAt(range?.start || { line: 0, character: 0 }) -import { resolveRange } from './resolveRange' + return matches[matches.length - 1] import lineColumn from 'line-column' -import { resolveRange } from './resolveRange' + return matches[matches.length - 1] import { isCssContext, isCssDoc } from './css' -import { resolveRange } from './resolveRange' + return matches[matches.length - 1] import { isHtmlContext } from './html' -import { resolveRange } from './resolveRange' + return matches[matches.length - 1] import { isWithinRange } from './isWithinRange' -import { resolveRange } from './resolveRange' + return matches[matches.length - 1] import { isJsxContext } from './js' -import { resolveRange } from './resolveRange' + return matches[matches.length - 1] import { flatten } from './array' -import { resolveRange } from './resolveRange' + return matches[matches.length - 1] import { getClassAttributeLexer, getComputedClassAttributeLexer } from './lexers' -import type { TextDocument, Range, Position } from 'vscode-languageserver' import { DocumentClassName, DocumentClassList, State, DocumentHelperFunction } from './state' +import { getClassAttributeLexer, getComputedClassAttributeLexer } from './lexers' result.push({ -import dlv from 'dlv' import { DocumentClassName, DocumentClassList, State, DocumentHelperFunction } from './state' + character: (end.line === 0 ? globalStart.character : 0) + start.character, range: { start: doc.positionAt(classMatchStart), end: doc.positionAt(classMatchEnd), @@ -172,7 +171,7 @@ }) } } else { result.push({ - classList: containerMatch[1], + classList: containerMatch.match, range: { start: doc.positionAt(matchStart), end: doc.positionAt(matchEnd), diff --git a/types/becke-ch--regex--s0-0-v1--base--pl--lib.d.ts b/types/becke-ch--regex--s0-0-v1--base--pl--lib.d.ts deleted file mode 100644 index 607dc97946e586b8c421368d4988b5212ee4152c..0000000000000000000000000000000000000000 --- a/types/becke-ch--regex--s0-0-v1--base--pl--lib.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare module 'becke-ch--regex--s0-0-v1--base--pl--lib' { - export default class Regex { - constructor(regex: string, modifiers?: string) - exec(str: string): null | (string[] & { index: number[] }) - } -}