From 143f0bbc1268b3ae0595e885d19fc3905872b2ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 06:50:03 +0000 Subject: [PATCH 1/5] fix(deps): update dependency eslint-compat-utils to ^0.2.0 --- package-lock.json | 31 +++++++++++++++---------------- package.json | 2 +- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2aa5dfd5..f7d590cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "eslint-compat-utils": "^0.1.2", + "eslint-compat-utils": "^0.2.0", "lodash": "^4.17.21", "postcss": "^8.4.31", "postcss-safe-parser": "^6.0.0", @@ -10378,9 +10378,12 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", - "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.2.0.tgz", + "integrity": "sha512-xQignOOtXOxDIA1J3rnXEWa0vkQYgex/64+o+vbgArVWzYFDOlsQyD6TDHjvwE+X80sUUCgXnaOhSbz9CnXqZw==", + "dependencies": { + "semver": "^7.5.4" + }, "engines": { "node": ">=12" }, @@ -14767,7 +14770,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -20047,7 +20049,6 @@ "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -25399,8 +25400,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "2.2.2", @@ -33618,10 +33618,12 @@ } }, "eslint-compat-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", - "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", - "requires": {} + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.2.0.tgz", + "integrity": "sha512-xQignOOtXOxDIA1J3rnXEWa0vkQYgex/64+o+vbgArVWzYFDOlsQyD6TDHjvwE+X80sUUCgXnaOhSbz9CnXqZw==", + "requires": { + "semver": "^7.5.4" + } }, "eslint-config-prettier": { "version": "9.0.0", @@ -36895,7 +36897,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -40972,7 +40973,6 @@ "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -45243,8 +45243,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "2.2.2", diff --git a/package.json b/package.json index fa8b7029..b07d2326 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ }, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "eslint-compat-utils": "^0.1.2", + "eslint-compat-utils": "^0.2.0", "lodash": "^4.17.21", "postcss": "^8.4.31", "postcss-safe-parser": "^6.0.0", From f5b4a0364e126c59b2eae0f1f06ae5f937de75de Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Mon, 15 Jan 2024 15:56:12 +0900 Subject: [PATCH 2/5] Create swift-dolls-joke.md --- .changeset/swift-dolls-joke.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/swift-dolls-joke.md diff --git a/.changeset/swift-dolls-joke.md b/.changeset/swift-dolls-joke.md new file mode 100644 index 00000000..4740d716 --- /dev/null +++ b/.changeset/swift-dolls-joke.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-vue-scoped-css": minor +--- + +fix(deps): update dependency eslint-compat-utils to ^0.2.0 From 0d5196b0b81fdfe2100eaed5e5db37b785dfbbd6 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Mon, 15 Jan 2024 23:23:48 +0900 Subject: [PATCH 3/5] fix --- .github/workflows/NodeCI.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/NodeCI.yml b/.github/workflows/NodeCI.yml index 6d0ccb94..9fecb487 100644 --- a/.github/workflows/NodeCI.yml +++ b/.github/workflows/NodeCI.yml @@ -35,6 +35,19 @@ jobs: run: npm run build - name: Test run: npm test + test-with-eslint9: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Use Node.js + uses: actions/setup-node@v4 + - name: Install Target Packages + run: |+ + npm i -D eslint@^9.0.0-0 -f + npx rimraf node_modules + npm install -f + - name: Test + run: npm test test-with-eslint6: runs-on: ubuntu-latest strategy: From 44e700db4c858e5f41b71c574c8d1b79a5bc9835 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Mon, 15 Jan 2024 23:49:45 +0900 Subject: [PATCH 4/5] fix --- package-lock.json | 14 ++--- package.json | 2 +- tests/lib/comment-directives.ts | 22 +++++--- tests/lib/rules-without-vue-eslint-parser.ts | 14 +++-- tests/lib/rules/enforce-style-type.ts | 8 ++- .../rules/no-deprecated-deep-combinator.ts | 8 ++- .../no-deprecated-v-enter-v-leave-class.ts | 8 ++- tests/lib/rules/no-parent-of-v-global.ts | 8 ++- tests/lib/rules/no-parsing-error.ts | 8 ++- tests/lib/rules/no-unused-keyframes.ts | 8 ++- tests/lib/rules/no-unused-selector.ts | 8 ++- tests/lib/rules/require-scoped.ts | 8 ++- .../lib/rules/require-selector-used-inside.ts | 8 ++- tests/lib/rules/require-v-deep-argument.ts | 8 ++- tests/lib/rules/require-v-global-argument.ts | 8 ++- tests/lib/rules/require-v-slotted-argument.ts | 8 ++- tests/lib/rules/v-deep-pseudo-style.ts | 8 ++- tests/lib/rules/v-global-pseudo-style.ts | 8 ++- tests/lib/rules/v-slotted-pseudo-style.ts | 7 ++- tests/lib/styles/test-utils.ts | 56 ++++++++++++------- tests/lib/test-lib/eslint-compat.ts | 8 +++ tests/regressions/reporter.ts | 24 ++++---- tools/new-rule.ts | 13 +++-- tsconfig.json | 2 +- 24 files changed, 169 insertions(+), 105 deletions(-) create mode 100644 tests/lib/test-lib/eslint-compat.ts diff --git a/package-lock.json b/package-lock.json index f7d590cc..32de0efa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "eslint-compat-utils": "^0.2.0", + "eslint-compat-utils": "^0.2.1", "lodash": "^4.17.21", "postcss": "^8.4.31", "postcss-safe-parser": "^6.0.0", @@ -10378,9 +10378,9 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.2.0.tgz", - "integrity": "sha512-xQignOOtXOxDIA1J3rnXEWa0vkQYgex/64+o+vbgArVWzYFDOlsQyD6TDHjvwE+X80sUUCgXnaOhSbz9CnXqZw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.2.1.tgz", + "integrity": "sha512-+0mhJhMeVaiMrgtltweI3sThf8g9VSZKVNSna6gdULUycp9HmcTvcYTw+b7YY+OUHAPXmRiJ9fvsDFnQq9i//A==", "dependencies": { "semver": "^7.5.4" }, @@ -33618,9 +33618,9 @@ } }, "eslint-compat-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.2.0.tgz", - "integrity": "sha512-xQignOOtXOxDIA1J3rnXEWa0vkQYgex/64+o+vbgArVWzYFDOlsQyD6TDHjvwE+X80sUUCgXnaOhSbz9CnXqZw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.2.1.tgz", + "integrity": "sha512-+0mhJhMeVaiMrgtltweI3sThf8g9VSZKVNSna6gdULUycp9HmcTvcYTw+b7YY+OUHAPXmRiJ9fvsDFnQq9i//A==", "requires": { "semver": "^7.5.4" } diff --git a/package.json b/package.json index b07d2326..6eb273af 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ }, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "eslint-compat-utils": "^0.2.0", + "eslint-compat-utils": "^0.2.1", "lodash": "^4.17.21", "postcss": "^8.4.31", "postcss-safe-parser": "^6.0.0", diff --git a/tests/lib/comment-directives.ts b/tests/lib/comment-directives.ts index 5dde412f..f251a655 100644 --- a/tests/lib/comment-directives.ts +++ b/tests/lib/comment-directives.ts @@ -1,9 +1,17 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "./test-lib/eslint-compat"; +import { Linter } from "eslint"; import rule = require("../../lib/rules/no-unused-selector"); +import * as semver from "semver"; + +import * as vueParser from "vue-eslint-parser"; + +const testRulePrefix = semver.gte(Linter.version, "9.0.0-0") + ? "rule-to-test/" + : ""; const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, @@ -59,10 +67,10 @@ tester.run("no-unused-selector-comment-directives", rule as any, { "; @@ -10,17 +12,19 @@ describe("Don't crash even if without vue-eslint-parser.", () => { it(ruleId, () => { const linter = new Linter(); const config = { - parserOptions: { + languageOptions: { ecmaVersion: 2015, - ecmaFeatures: { - jsx: true, + parserOptions: { + ecmaFeatures: { + jsx: true, + }, }, }, + plugins: { "vue-scoped-css": plugin }, rules: { [ruleId]: "error", }, }; - linter.defineRule(ruleId, plugin.rules[key] as any); linter.verifyAndFix(code, config as any, "test.vue"); }); } diff --git a/tests/lib/rules/enforce-style-type.ts b/tests/lib/rules/enforce-style-type.ts index 1152d648..1dbc5d4a 100644 --- a/tests/lib/rules/enforce-style-type.ts +++ b/tests/lib/rules/enforce-style-type.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/enforce-style-type"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/no-deprecated-deep-combinator.ts b/tests/lib/rules/no-deprecated-deep-combinator.ts index fd681d15..82198217 100644 --- a/tests/lib/rules/no-deprecated-deep-combinator.ts +++ b/tests/lib/rules/no-deprecated-deep-combinator.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/no-deprecated-deep-combinator"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/no-deprecated-v-enter-v-leave-class.ts b/tests/lib/rules/no-deprecated-v-enter-v-leave-class.ts index 0aec5ccd..b8f0a601 100644 --- a/tests/lib/rules/no-deprecated-v-enter-v-leave-class.ts +++ b/tests/lib/rules/no-deprecated-v-enter-v-leave-class.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/no-deprecated-v-enter-v-leave-class"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/no-parent-of-v-global.ts b/tests/lib/rules/no-parent-of-v-global.ts index a5cfcb45..55dc63c0 100644 --- a/tests/lib/rules/no-parent-of-v-global.ts +++ b/tests/lib/rules/no-parent-of-v-global.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/no-parent-of-v-global"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/no-parsing-error.ts b/tests/lib/rules/no-parsing-error.ts index 01764f3d..d128be35 100644 --- a/tests/lib/rules/no-parsing-error.ts +++ b/tests/lib/rules/no-parsing-error.ts @@ -1,11 +1,13 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import semver from "semver"; import rule = require("../../../lib/rules/no-parsing-error"); const parserVersion = require("vue-eslint-parser/package.json").version; +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/no-unused-keyframes.ts b/tests/lib/rules/no-unused-keyframes.ts index 806a9fce..3d32f676 100644 --- a/tests/lib/rules/no-unused-keyframes.ts +++ b/tests/lib/rules/no-unused-keyframes.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/no-unused-keyframes"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/no-unused-selector.ts b/tests/lib/rules/no-unused-selector.ts index 4618cd5e..99173b9b 100644 --- a/tests/lib/rules/no-unused-selector.ts +++ b/tests/lib/rules/no-unused-selector.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/no-unused-selector"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/require-scoped.ts b/tests/lib/rules/require-scoped.ts index d452ee1e..ff486677 100644 --- a/tests/lib/rules/require-scoped.ts +++ b/tests/lib/rules/require-scoped.ts @@ -1,12 +1,14 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import semver from "semver"; import rule = require("../../../lib/rules/require-scoped"); const parserVersion = require("vue-eslint-parser/package.json").version; +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/require-selector-used-inside.ts b/tests/lib/rules/require-selector-used-inside.ts index 7cc72b5e..84fef49e 100644 --- a/tests/lib/rules/require-selector-used-inside.ts +++ b/tests/lib/rules/require-selector-used-inside.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/require-selector-used-inside"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/require-v-deep-argument.ts b/tests/lib/rules/require-v-deep-argument.ts index a2f02c0e..c496c218 100644 --- a/tests/lib/rules/require-v-deep-argument.ts +++ b/tests/lib/rules/require-v-deep-argument.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/require-v-deep-argument"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/require-v-global-argument.ts b/tests/lib/rules/require-v-global-argument.ts index 2e0204e5..7124d716 100644 --- a/tests/lib/rules/require-v-global-argument.ts +++ b/tests/lib/rules/require-v-global-argument.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/require-v-global-argument"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/require-v-slotted-argument.ts b/tests/lib/rules/require-v-slotted-argument.ts index c16236fb..c53005ac 100644 --- a/tests/lib/rules/require-v-slotted-argument.ts +++ b/tests/lib/rules/require-v-slotted-argument.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/require-v-slotted-argument"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/v-deep-pseudo-style.ts b/tests/lib/rules/v-deep-pseudo-style.ts index a4312b71..082bbce4 100644 --- a/tests/lib/rules/v-deep-pseudo-style.ts +++ b/tests/lib/rules/v-deep-pseudo-style.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/v-deep-pseudo-style"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/v-global-pseudo-style.ts b/tests/lib/rules/v-global-pseudo-style.ts index 0e2df984..40360e72 100644 --- a/tests/lib/rules/v-global-pseudo-style.ts +++ b/tests/lib/rules/v-global-pseudo-style.ts @@ -1,9 +1,11 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/v-global-pseudo-style"); +import * as vueParser from "vue-eslint-parser"; + const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/rules/v-slotted-pseudo-style.ts b/tests/lib/rules/v-slotted-pseudo-style.ts index 879db2bf..d96a5e87 100644 --- a/tests/lib/rules/v-slotted-pseudo-style.ts +++ b/tests/lib/rules/v-slotted-pseudo-style.ts @@ -1,9 +1,10 @@ -import { RuleTester } from "eslint"; +import { RuleTester } from "../test-lib/eslint-compat"; import rule = require("../../../lib/rules/v-slotted-pseudo-style"); +import * as vueParser from "vue-eslint-parser"; const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { + languageOptions: { + parser: vueParser, ecmaVersion: 2019, sourceType: "module", }, diff --git a/tests/lib/styles/test-utils.ts b/tests/lib/styles/test-utils.ts index 0e8c3bf9..ddd1ff6a 100644 --- a/tests/lib/styles/test-utils.ts +++ b/tests/lib/styles/test-utils.ts @@ -1,4 +1,4 @@ -import eslint from "eslint"; +import { getLinter } from "eslint-compat-utils/linter"; import fs from "fs"; import path from "path"; @@ -6,16 +6,21 @@ import path from "path"; import type { RuleContext } from "../../../lib/types"; import type { StyleContext } from "../../../lib/styles/context"; import { getStyleContexts } from "../../../lib/styles/context"; +import * as vueParser from "vue-eslint-parser"; +// eslint-disable-next-line @typescript-eslint/naming-convention -- Class name +const Linter = getLinter(); const ROOT = path.join(__dirname, "./fixtures/index"); -const ruleId = "test"; - const config = { - parser: "vue-eslint-parser", - parserOptions: { ecmaVersion: 2019, sourceType: "module" }, + files: ["*", "*.vue", "**/*.vue"], + languageOptions: { + parser: vueParser, + ecmaVersion: 2019, + sourceType: "module", + }, rules: { - [ruleId]: "error", + "test/test": "error", }, }; @@ -28,23 +33,34 @@ function executeLint( sourcePath: string, _name: string, ): { style: StyleContext; context: RuleContext } { - const linter = new eslint.Linter(); + const linter = new Linter(); let style: StyleContext | null = null; let context: RuleContext | null = null; let err = null; - linter.defineParser("vue-eslint-parser", require("vue-eslint-parser")); - linter.defineRule(ruleId, { - create(ctx: RuleContext) { - try { - context = ctx; - style = getStyleContexts(ctx)[0]; - } catch (e) { - err = e; - } - return {}; - }, - } as any); - linter.verifyAndFix(source, config as any, sourcePath); + linter.verifyAndFix( + source, + { + ...config, + plugins: { + test: { + rules: { + test: { + create(ctx: RuleContext) { + try { + context = ctx; + style = getStyleContexts(ctx)[0]; + } catch (e) { + err = e; + } + return {}; + }, + }, + }, + }, + }, + } as any, + sourcePath, + ); if (err) { throw err; } diff --git a/tests/lib/test-lib/eslint-compat.ts b/tests/lib/test-lib/eslint-compat.ts new file mode 100644 index 00000000..3e9418c9 --- /dev/null +++ b/tests/lib/test-lib/eslint-compat.ts @@ -0,0 +1,8 @@ +import { getRuleTester } from "eslint-compat-utils/rule-tester"; +import { getLegacyESLint } from "eslint-compat-utils/eslint"; + +// eslint-disable-next-line @typescript-eslint/naming-convention -- Class name +export const RuleTester = getRuleTester(); + +// eslint-disable-next-line @typescript-eslint/naming-convention -- Class name +export const LegacyESLint = getLegacyESLint(); diff --git a/tests/regressions/reporter.ts b/tests/regressions/reporter.ts index d4259019..b4e02711 100644 --- a/tests/regressions/reporter.ts +++ b/tests/regressions/reporter.ts @@ -1,7 +1,11 @@ +import { getLinter } from "eslint-compat-utils/linter"; import assert from "assert"; import plugin from "../../lib/index"; -import eslint from "eslint"; +import type * as eslint from "eslint"; +import * as vueParser from "vue-eslint-parser"; +// eslint-disable-next-line @typescript-eslint/naming-convention -- Class name +const Linter = getLinter(); type LinterMessages = Partial; /** @@ -25,24 +29,18 @@ function assertMessages(actual: LinterMessages[], expected: LinterMessages[]) { describe("reporter test", () => { it("The report must be valid.", () => { - const linter = new eslint.Linter(); + const linter = new Linter(); const config = { - parser: "vue-eslint-parser", - parserOptions: { ecmaVersion: 2015 }, + files: ["*", "*.vue", "**/*.vue"], + languageOptions: { parser: vueParser, ecmaVersion: 2015 }, rules: { "vue-scoped-css/no-unused-selector": "error", "vue-scoped-css/require-selector-used-inside": "error", }, + plugins: { + "vue-scoped-css": plugin, + }, }; - linter.defineParser("vue-eslint-parser", require("vue-eslint-parser")); - linter.defineRule( - "vue-scoped-css/no-unused-selector", - plugin.rules["no-unused-selector"] as any, - ); - linter.defineRule( - "vue-scoped-css/require-selector-used-inside", - plugin.rules["require-selector-used-inside"] as any, - ); const messages = linter.verify( "", diff --git a/tools/new-rule.ts b/tools/new-rule.ts index 5834a898..fe2b5736 100644 --- a/tools/new-rule.ts +++ b/tools/new-rule.ts @@ -89,15 +89,16 @@ export = { ); fs.writeFileSync( testFile, - `import { RuleTester } from "eslint" + `import { RuleTester } from "../test-lib/eslint-compat" import rule = require("../../../lib/rules/${ruleId}") +import * as vueParser from "vue-eslint-parser"; const tester = new RuleTester({ - parser: require.resolve("vue-eslint-parser"), - parserOptions: { - ecmaVersion: 2019, - sourceType: "module", - }, + languageOptions: { + parser: vueParser, + ecmaVersion: 2019, + sourceType: "module", + }, }) tester.run("${ruleId}", rule as any, { diff --git a/tsconfig.json b/tsconfig.json index 4ae4d86b..c4427ee2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "es2015", - "module": "commonjs", + "module": "node16", "allowJs": true, "checkJs": true, "outDir": "./dist", From 0d8784b002c9e7d5285f630f38cbc93911ac857a Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Mon, 15 Jan 2024 23:54:15 +0900 Subject: [PATCH 5/5] fix --- .github/workflows/NodeCI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/NodeCI.yml b/.github/workflows/NodeCI.yml index 9fecb487..d26dce09 100644 --- a/.github/workflows/NodeCI.yml +++ b/.github/workflows/NodeCI.yml @@ -43,7 +43,7 @@ jobs: uses: actions/setup-node@v4 - name: Install Target Packages run: |+ - npm i -D eslint@^9.0.0-0 -f + npm i -D eslint@^9.0.0-0 --legacy-peer-deps npx rimraf node_modules npm install -f - name: Test