From 0128984dcc52d250636590a6f96d6ba1215729c4 Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Tue, 30 Apr 2024 02:07:06 +0800 Subject: [PATCH] Relax ESLint peerDependency constraint to allow v9 (#16414) --- .github/workflows/ci.yml | 25 +++ eslint/babel-eslint-parser/package.json | 6 +- eslint/babel-eslint-plugin/package.json | 6 +- .../babel-eslint-plugin/src/rules/new-cap.cjs | 7 +- .../src/rules/no-invalid-this.cjs | 6 +- .../src/rules/no-undef.cjs | 7 +- .../src/rules/no-unused-expressions.cjs | 7 +- .../src/rules/object-curly-spacing.cjs | 7 +- eslint/babel-eslint-plugin/src/rules/semi.cjs | 6 +- jest.config.js | 3 + yarn.lock | 184 ++++++++++++++++-- 11 files changed, 239 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9f5644bf4a76..a9375e8fa98b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -530,6 +530,31 @@ jobs: - name: Run babel/eslint tests run: node ./node_modules/.bin/jest eslint + eslint8-test: + name: Test @babel/eslint-* with ESLint 8.0.0 + needs: build + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Use Node.js latest + uses: actions/setup-node@v4 + with: + node-version: latest + check-latest: true + cache: "yarn" + - name: Install + run: yarn install + - uses: actions/download-artifact@v3 + with: + name: babel-artifact + - name: Extract artifacts + run: tar -xf babel-artifact.tar; rm babel-artifact.tar + - name: Downgrade ESLint to 8.0.0 + run: yarn up eslint@8.0.0 + - name: Run babel/eslint tests + run: node ./node_modules/.bin/jest eslint + test262-prepare: name: test262 - Prepare for running in parallel runs-on: ubuntu-latest diff --git a/eslint/babel-eslint-parser/package.json b/eslint/babel-eslint-parser/package.json index e0e59e1d82f9..4e1e932f6fcb 100644 --- a/eslint/babel-eslint-parser/package.json +++ b/eslint/babel-eslint-parser/package.json @@ -28,7 +28,7 @@ }, "peerDependencies": { "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" }, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "condition:BABEL_8_BREAKING ? : 5.1.1-v1", @@ -42,7 +42,7 @@ "@types/estree": "^1.0.5", "@typescript-eslint/scope-manager": "^6.19.0", "dedent": "^0.7.0", - "eslint": "^8.22.0" + "eslint": "^9.0.0" }, "conditions": { "BABEL_8_BREAKING": [ @@ -52,7 +52,7 @@ }, "peerDependencies": { "@babel/core": ">=7.11.0", - "eslint": "^8.9.0" + "eslint": "^8.9.0 || ^9.0.0" } }, {} diff --git a/eslint/babel-eslint-plugin/package.json b/eslint/babel-eslint-plugin/package.json index f5c9be5167ed..e1f243de5bea 100644 --- a/eslint/babel-eslint-plugin/package.json +++ b/eslint/babel-eslint-plugin/package.json @@ -34,14 +34,14 @@ "homepage": "https://babel.dev/", "peerDependencies": { "@babel/eslint-parser": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" }, "dependencies": { "eslint-rule-composer": "^0.3.0" }, "devDependencies": { "clone-deep": "^4.0.1", - "eslint": "^8.22.0" + "eslint": "^9.0.0" }, "conditions": { "BABEL_8_BREAKING": [ @@ -51,7 +51,7 @@ }, "peerDependencies": { "@babel/eslint-parser": "^7.11.0", - "eslint": "^8.9.0" + "eslint": "^8.9.0 || ^9.0.0" } }, {} diff --git a/eslint/babel-eslint-plugin/src/rules/new-cap.cjs b/eslint/babel-eslint-plugin/src/rules/new-cap.cjs index 5661f23f1b37..10247b67e390 100644 --- a/eslint/babel-eslint-plugin/src/rules/new-cap.cjs +++ b/eslint/babel-eslint-plugin/src/rules/new-cap.cjs @@ -1,7 +1,12 @@ const ruleComposer = require("eslint-rule-composer"); const eslint = require("eslint"); +const eslintVersion = eslint.ESLint.version; -const rule = new eslint.Linter().getRules().get("new-cap"); +const rule = ( + parseInt(eslintVersion, 10) >= 9 + ? require("eslint/use-at-your-own-risk").builtinRules + : new eslint.Linter().getRules() +).get("new-cap"); /** * Returns whether a node is under a decorator or not. diff --git a/eslint/babel-eslint-plugin/src/rules/no-invalid-this.cjs b/eslint/babel-eslint-plugin/src/rules/no-invalid-this.cjs index e06af0eec73c..aa8af41419aa 100644 --- a/eslint/babel-eslint-plugin/src/rules/no-invalid-this.cjs +++ b/eslint/babel-eslint-plugin/src/rules/no-invalid-this.cjs @@ -2,7 +2,11 @@ const ruleComposer = require("eslint-rule-composer"); const eslint = require("eslint"); const eslintVersion = eslint.ESLint.version; -const noInvalidThisRule = new eslint.Linter().getRules().get("no-invalid-this"); +const noInvalidThisRule = ( + parseInt(eslintVersion, 10) >= 9 + ? require("eslint/use-at-your-own-risk").builtinRules + : new eslint.Linter().getRules() +).get("no-invalid-this"); if (parseInt(eslintVersion, 10) >= 8) { // ESLint 8 supports class properties / private methods natively diff --git a/eslint/babel-eslint-plugin/src/rules/no-undef.cjs b/eslint/babel-eslint-plugin/src/rules/no-undef.cjs index 3fa909198515..fe0466b36269 100644 --- a/eslint/babel-eslint-plugin/src/rules/no-undef.cjs +++ b/eslint/babel-eslint-plugin/src/rules/no-undef.cjs @@ -1,7 +1,12 @@ const ruleComposer = require("eslint-rule-composer"); const eslint = require("eslint"); +const eslintVersion = eslint.ESLint.version; -const rule = new eslint.Linter().getRules().get("no-undef"); +const rule = ( + parseInt(eslintVersion, 10) >= 9 + ? require("eslint/use-at-your-own-risk").builtinRules + : new eslint.Linter().getRules() +).get("no-undef"); /** * Returns whether a node is under a decorator or not. diff --git a/eslint/babel-eslint-plugin/src/rules/no-unused-expressions.cjs b/eslint/babel-eslint-plugin/src/rules/no-unused-expressions.cjs index 59b1f73c0d5d..051419dd1bbd 100644 --- a/eslint/babel-eslint-plugin/src/rules/no-unused-expressions.cjs +++ b/eslint/babel-eslint-plugin/src/rules/no-unused-expressions.cjs @@ -1,7 +1,12 @@ const ruleComposer = require("eslint-rule-composer"); const eslint = require("eslint"); +const eslintVersion = eslint.ESLint.version; -const rule = new eslint.Linter().getRules().get("no-unused-expressions"); +const rule = ( + parseInt(eslintVersion, 10) >= 9 + ? require("eslint/use-at-your-own-risk").builtinRules + : new eslint.Linter().getRules() +).get("no-unused-expressions"); /** * @param {ASTNode} node - any node diff --git a/eslint/babel-eslint-plugin/src/rules/object-curly-spacing.cjs b/eslint/babel-eslint-plugin/src/rules/object-curly-spacing.cjs index c58dabe26047..eb74484ac84b 100644 --- a/eslint/babel-eslint-plugin/src/rules/object-curly-spacing.cjs +++ b/eslint/babel-eslint-plugin/src/rules/object-curly-spacing.cjs @@ -1,7 +1,12 @@ const ruleComposer = require("eslint-rule-composer"); const eslint = require("eslint"); +const eslintVersion = eslint.ESLint.version; -const rule = new eslint.Linter().getRules().get("object-curly-spacing"); +const rule = ( + parseInt(eslintVersion, 10) >= 9 + ? require("eslint/use-at-your-own-risk").builtinRules + : new eslint.Linter().getRules() +).get("object-curly-spacing"); module.exports = ruleComposer.filterReports(rule, problem => { const node = problem.node; diff --git a/eslint/babel-eslint-plugin/src/rules/semi.cjs b/eslint/babel-eslint-plugin/src/rules/semi.cjs index 17f404c56f79..8cbae6c86a25 100644 --- a/eslint/babel-eslint-plugin/src/rules/semi.cjs +++ b/eslint/babel-eslint-plugin/src/rules/semi.cjs @@ -4,7 +4,11 @@ const eslintVersion = eslint.ESLint.version; const OPT_OUT_PATTERN = /^[-[(/+`]/; // One of [(/+-` -const rule = new eslint.Linter().getRules().get("semi"); +const rule = ( + parseInt(eslintVersion, 10) >= 9 + ? require("eslint/use-at-your-own-risk").builtinRules + : new eslint.Linter().getRules() +).get("semi"); function isSemicolon(token) { return token.type === "Punctuator" && token.value === ";"; diff --git a/jest.config.js b/jest.config.js index 6d04a90b1d08..1f8683408d95 100644 --- a/jest.config.js +++ b/jest.config.js @@ -65,6 +65,9 @@ module.exports = { ...(process.version === "v20.6.0" ? ["/babel-preset-env/test/regressions.js"] : []), + ...(!semver.satisfies(nodeVersion, "^18.18.0 || >=20.0") + ? ["/eslint/"] + : []), ], testEnvironment: "node", transformIgnorePatterns: [ diff --git a/yarn.lock b/yarn.lock index a0a323030b1e..4c6f0cdb53e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -423,13 +423,13 @@ __metadata: "@types/estree": "npm:^1.0.5" "@typescript-eslint/scope-manager": "npm:^6.19.0" dedent: "npm:^0.7.0" - eslint: "npm:^8.22.0" + eslint: "npm:^9.0.0" eslint-scope: "condition:BABEL_8_BREAKING ? ^7.1.1 : " eslint-visitor-keys: "condition:BABEL_8_BREAKING ? ^3.3.0 : ^2.1.0" semver: "condition:BABEL_8_BREAKING ? ^7.3.4 : ^6.3.1" peerDependencies: "@babel/core": ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 languageName: unknown linkType: soft @@ -457,11 +457,11 @@ __metadata: resolution: "@babel/eslint-plugin@workspace:eslint/babel-eslint-plugin" dependencies: clone-deep: "npm:^4.0.1" - eslint: "npm:^8.22.0" + eslint: "npm:^9.0.0" eslint-rule-composer: "npm:^0.3.0" peerDependencies: "@babel/eslint-parser": ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 languageName: unknown linkType: soft @@ -4507,6 +4507,23 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^3.0.2": + version: 3.0.2 + resolution: "@eslint/eslintrc@npm:3.0.2" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10/04e3d7de2b16fd59ba8985ecd6922eb488e630f94e4433858567a8a6c99b478bb7b47854b166b830b44905759547d0a03654eb1265952c812d5d1d70e3e4ccf9 + languageName: node + linkType: hard + "@eslint/js@npm:8.57.0, @eslint/js@npm:^8.44.0": version: 8.57.0 resolution: "@eslint/js@npm:8.57.0" @@ -4514,6 +4531,13 @@ __metadata: languageName: node linkType: hard +"@eslint/js@npm:9.0.0": + version: 9.0.0 + resolution: "@eslint/js@npm:9.0.0" + checksum: 10/b14b20af72410ef53e3e77e7d83cc1d6e6554b0092ceb9f969d25d765f4d775b4be32b0cd99bbfd6ce72eb2e4fb6b39b42a159b31909fbe1b3a5e88d75211687 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.11.14": version: 0.11.14 resolution: "@humanwhocodes/config-array@npm:0.11.14" @@ -4525,6 +4549,17 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.12.3": + version: 0.12.3 + resolution: "@humanwhocodes/config-array@npm:0.12.3" + dependencies: + "@humanwhocodes/object-schema": "npm:^2.0.3" + debug: "npm:^4.3.1" + minimatch: "npm:^3.0.5" + checksum: 10/b05f528c110aa1657d95d213e4ad2662f4161e838806af01a4d3f3b6ee3878d9b6f87d1b10704917f5c2f116757cb5c818480c32c4c4c6f84fe775a170b5f758 + languageName: node + linkType: hard + "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -4532,10 +4567,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": - version: 2.0.2 - resolution: "@humanwhocodes/object-schema@npm:2.0.2" - checksum: 10/ef915e3e2f34652f3d383b28a9a99cfea476fa991482370889ab14aac8ecd2b38d47cc21932526c6d949da0daf4a4a6bf629d30f41b0caca25e146819cbfa70e +"@humanwhocodes/object-schema@npm:^2.0.2, @humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10/05bb99ed06c16408a45a833f03a732f59bf6184795d4efadd33238ff8699190a8c871ad1121241bb6501589a9598dc83bf25b99dcbcf41e155cdf36e35e937a3 languageName: node linkType: hard @@ -6214,7 +6249,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:8.10.0, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.2": +"acorn@npm:8.10.0": version: 8.10.0 resolution: "acorn@npm:8.10.0" bin: @@ -6259,6 +6294,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.2": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 10/b688e7e3c64d9bfb17b596e1b35e4da9d50553713b3b3630cf5690f2b023a84eac90c56851e6912b483fe60e8b4ea28b254c07e92f17ef83d72d78745a8352dd + languageName: node + linkType: hard + "agent-base@npm:6": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -9337,6 +9381,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^8.0.1": + version: 8.0.1 + resolution: "eslint-scope@npm:8.0.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10/458513863d3c79005b599f40250437bddba923f18549058ea45820a8d3d4bbc67fe292751d522a0cab69dd01fe211ffde5c1a5fc867e86f2d28727b1d61610da + languageName: node + linkType: hard + "eslint-visitor-keys-BABEL_8_BREAKING-false@npm:eslint-visitor-keys@^2.1.0": version: 2.1.0 resolution: "eslint-visitor-keys@npm:2.1.0" @@ -9368,6 +9422,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^4.0.0": + version: 4.0.0 + resolution: "eslint-visitor-keys@npm:4.0.0" + checksum: 10/c7617166e6291a15ce2982b5c4b9cdfb6409f5c14562712d12e2584480cdf18609694b21d7dad35b02df0fa2cd037505048ded54d2f405c64f600949564eb334 + languageName: node + linkType: hard + "eslint@npm:^8.22.0, eslint@npm:^8.57.0": version: 8.57.0 resolution: "eslint@npm:8.57.0" @@ -9416,6 +9477,61 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^9.0.0": + version: 9.0.0 + resolution: "eslint@npm:9.0.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^3.0.2" + "@eslint/js": "npm:9.0.0" + "@humanwhocodes/config-array": "npm:^0.12.3" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^8.0.1" + eslint-visitor-keys: "npm:^4.0.0" + espree: "npm:^10.0.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^8.0.0" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10/5cf03e14eb114f95bc4e553c8ae2da65ec09d519779beb08e326d98518bce647ce9c8bf3467bcea4cab35a2657cc3a8e945717e784afa4b1bdb9d1ecd9173ba0 + languageName: node + linkType: hard + +"espree@npm:^10.0.1": + version: 10.0.1 + resolution: "espree@npm:10.0.1" + dependencies: + acorn: "npm:^8.11.3" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.0.0" + checksum: 10/557d6cfb4894b1489effcaed8702682086033f8a2449568933bc59493734733d750f2a87907ba575844d3933340aea2d84288f5e67020c6152f6fd18a86497b2 + languageName: node + linkType: hard + "espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" @@ -9814,6 +9930,15 @@ __metadata: languageName: node linkType: hard +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" + dependencies: + flat-cache: "npm:^4.0.0" + checksum: 10/afe55c4de4e0d226a23c1eae62a7219aafb390859122608a89fa4df6addf55c7fd3f1a2da6f5b41e7cdff496e4cf28bbd215d53eab5c817afa96d2b40c81bfb0 + languageName: node + linkType: hard + "file-uri-to-path@npm:1.0.0": version: 1.0.0 resolution: "file-uri-to-path@npm:1.0.0" @@ -9976,10 +10101,20 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.1.0": - version: 3.1.1 - resolution: "flatted@npm:3.1.1" - checksum: 10/2ce58ed083be7f7ec4500deba0a58df0673487ddadf14ab197d149149e965db6b5d53bedb40d59dee180afba97b093326c6f836385004ea8929b7beb18bb6033 +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + checksum: 10/58ce851d9045fffc7871ce2bd718bc485ad7e777bf748c054904b87c351ff1080c2c11da00788d78738bfb51b71e4d5ea12d13b98eb36e3358851ffe495b62dc + languageName: node + linkType: hard + +"flatted@npm:^3.1.0, flatted@npm:^3.2.9": + version: 3.3.1 + resolution: "flatted@npm:3.3.1" + checksum: 10/7b8376061d5be6e0d3658bbab8bde587647f68797cf6bfeae9dea0e5137d9f27547ab92aaff3512dd9d1299086a6d61be98e9d48a56d17531b634f77faadbc49 languageName: node linkType: hard @@ -10494,6 +10629,13 @@ __metadata: languageName: node linkType: hard +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10/03939c8af95c6df5014b137cac83aa909090c3a3985caef06ee9a5a669790877af8698ab38007e4c0186873adc14c0b13764acc754b16a754c216cc56aa5f021 + languageName: node + linkType: hard + "globalthis@npm:^1.0.3": version: 1.0.3 resolution: "globalthis@npm:1.0.3" @@ -12359,6 +12501,13 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10/82876154521b7b68ba71c4f969b91572d1beabadd87bd3a6b236f85fbc7dc4695089191ed60bb59f9340993c51b33d479f45b6ba9f3548beb519705281c32c3c + languageName: node + linkType: hard + "json-loader@npm:^0.5.4": version: 0.5.7 resolution: "json-loader@npm:0.5.7" @@ -12479,6 +12628,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.4": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10/167eb6ef64cc84b6fa0780ee50c9de456b422a1e18802209234f7c2cf7eae648c7741f32e50d7e24ccb22b24c13154070b01563d642755b156c357431a191e75 + languageName: node + linkType: hard + "kind-of@npm:^1.1.0": version: 1.1.0 resolution: "kind-of@npm:1.1.0"