From 184dc09d8b573597cc691df8aa78093ece2349a3 Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Thu, 19 Aug 2021 14:40:23 +0900 Subject: [PATCH] Add test for ESLint v8 (#122) * Add test for ESLint v8 * fix * fix * fix * fix * fix babel * fix * fix test * fix * fix * fix * fix * fix * fix --- .github/workflows/CI.yml | 4 +- package.json | 7 +- scripts/ci-install-eslint.js | 10 +- scripts/update-fixtures-ast.js | 7 +- test/ast.js | 7 +- test/core-rules.js | 27 +- .../ast/end-of-line01/requirements.json | 3 + .../ast/end-of-line02/requirements.json | 3 + .../filters-opt-filter-off-babel-old/ast.json | 610 ++++++++++++++++++ .../parser-options.json | 6 + .../requirements.json | 3 + .../source.vue | 3 + .../token-ranges.json | 18 + .../tree.json | 66 ++ .../ast/filters-opt-filter-off-babel/ast.json | 28 +- .../parser-options.json | 10 +- .../requirements.json | 3 + .../ast/multiple-scripts-10/requirements.json | 3 + .../ast/multiple-scripts-2/requirements.json | 3 + .../ast/multiple-scripts-3/requirements.json | 3 + .../ast/multiple-scripts-4/requirements.json | 3 + .../ast/multiple-scripts-5/requirements.json | 3 + .../ast/multiple-scripts-6/requirements.json | 3 + .../ast/multiple-scripts-7/requirements.json | 3 + .../ast/multiple-scripts-8/requirements.json | 3 + .../ast/multiple-scripts-9/requirements.json | 3 + .../requirements.json | 3 + .../requirements.json | 3 + .../requirements.json | 3 + .../requirements.json | 3 + .../ast/multiple-scripts/requirements.json | 3 + .../requirements.json | 3 + .../script-setup-example01/requirements.json | 3 + .../script-setup-example02/requirements.json | 3 + .../script-setup-example04/requirements.json | 3 + .../script-setup-example05/requirements.json | 3 + .../script-setup-example06/requirements.json | 3 + .../script-setup-example07/requirements.json | 3 + .../script-setup-example08/requirements.json | 3 + .../script-setup-example09/requirements.json | 3 + .../script-setup-example13/requirements.json | 3 + .../script-setup-example14/requirements.json | 3 + .../script-setup-example15/requirements.json | 3 + .../requirements.json | 3 + .../ast/script-setup/requirements.json | 3 + .../svg-attrs-camel-case/requirements.json | 3 + .../ast/svg-attrs-colon/requirements.json | 3 + .../ast/svg-namespace/requirements.json | 3 + test/index.js | 387 ++++++----- test/lib/eslint-compat.js | 116 ++++ test/parser-options.js | 25 +- 51 files changed, 1227 insertions(+), 209 deletions(-) create mode 100644 test/fixtures/ast/end-of-line01/requirements.json create mode 100644 test/fixtures/ast/end-of-line02/requirements.json create mode 100644 test/fixtures/ast/filters-opt-filter-off-babel-old/ast.json create mode 100644 test/fixtures/ast/filters-opt-filter-off-babel-old/parser-options.json create mode 100644 test/fixtures/ast/filters-opt-filter-off-babel-old/requirements.json create mode 100644 test/fixtures/ast/filters-opt-filter-off-babel-old/source.vue create mode 100644 test/fixtures/ast/filters-opt-filter-off-babel-old/token-ranges.json create mode 100644 test/fixtures/ast/filters-opt-filter-off-babel-old/tree.json create mode 100644 test/fixtures/ast/filters-opt-filter-off-babel/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-10/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-2/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-3/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-4/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-5/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-6/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-7/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-8/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-9/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-with-export01/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-with-export02/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-with-export03/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts-with-export04/requirements.json create mode 100644 test/fixtures/ast/multiple-scripts/requirements.json create mode 100644 test/fixtures/ast/parser-option-multiple-parsers-2/requirements.json create mode 100644 test/fixtures/ast/script-setup-example01/requirements.json create mode 100644 test/fixtures/ast/script-setup-example02/requirements.json create mode 100644 test/fixtures/ast/script-setup-example04/requirements.json create mode 100644 test/fixtures/ast/script-setup-example05/requirements.json create mode 100644 test/fixtures/ast/script-setup-example06/requirements.json create mode 100644 test/fixtures/ast/script-setup-example07/requirements.json create mode 100644 test/fixtures/ast/script-setup-example08/requirements.json create mode 100644 test/fixtures/ast/script-setup-example09/requirements.json create mode 100644 test/fixtures/ast/script-setup-example13/requirements.json create mode 100644 test/fixtures/ast/script-setup-example14/requirements.json create mode 100644 test/fixtures/ast/script-setup-example15/requirements.json create mode 100644 test/fixtures/ast/script-setup-with-export/requirements.json create mode 100644 test/fixtures/ast/script-setup/requirements.json create mode 100644 test/fixtures/ast/svg-attrs-camel-case/requirements.json create mode 100644 test/fixtures/ast/svg-attrs-colon/requirements.json create mode 100644 test/fixtures/ast/svg-namespace/requirements.json create mode 100644 test/lib/eslint-compat.js diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index a6e32261..1fe52242 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -29,8 +29,8 @@ jobs: name: Test strategy: matrix: - eslint: [7] - node: [14] + eslint: [7, '8.0.0-0'] + node: [14, 16] os: [ubuntu-latest] include: # On other platforms diff --git a/package.json b/package.json index 5197b8e0..02a8746c 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,11 @@ "semver": "^6.3.0" }, "devDependencies": { + "@babel/core": "^7.15.0", + "@babel/eslint-parser": "^7.15.0", + "@babel/plugin-syntax-decorators": "^7.14.5", + "@babel/plugin-syntax-pipeline-operator": "^7.15.0", + "@babel/plugin-syntax-typescript": "^7.14.5", "@mysticatea/eslint-plugin": "^13.0.0", "@types/debug": "0.0.30", "@types/eslint": "^7.2.6", @@ -67,7 +72,7 @@ "pretest": "run-s build lint", "test": "npm run -s test:mocha", "test:mocha": "nyc mocha \"test/*.js\" --reporter dot --timeout 60000", - "test:debug": "mocha --inspect --require ts-node/register/transpile-only \"test/*.js\" --reporter dot --timeout 60000", + "test:debug": "mocha --require ts-node/register/transpile-only \"test/*.js\" --reporter dot --timeout 60000", "preupdate-fixtures": "npm run -s build", "update-fixtures": "node scripts/update-fixtures-ast.js && node scripts/update-fixtures-document-fragment.js", "preversion": "npm test", diff --git a/scripts/ci-install-eslint.js b/scripts/ci-install-eslint.js index 7bde2b54..724c0ebc 100644 --- a/scripts/ci-install-eslint.js +++ b/scripts/ci-install-eslint.js @@ -12,7 +12,7 @@ function sh(command) { return new Promise((resolve, reject) => { spawn(command, [], { shell: true, stdio: "inherit" }) .on("error", reject) - .on("exit", exitCode => { + .on("exit", (exitCode) => { if (exitCode) { reject(new Error(`Exit with non-zero ${exitCode}`)) } else { @@ -29,10 +29,10 @@ function sh(command) { : `^${requestedVersion}` // Install ESLint of the requested version - await sh(`npm install eslint@${requestedVersionSpec}`) + await sh(`npm install eslint@${requestedVersionSpec} --legacy-peer-deps`) // Install ESLint submodule of the requested version - const installedVersion = require("eslint").CLIEngine.version + const installedVersion = require("eslint/package.json").version cd("test/fixtures/eslint") if (!installedVersion.startsWith("7.")) { await sh(`git checkout v${installedVersion}`) @@ -40,8 +40,8 @@ function sh(command) { if (installedVersion.startsWith("5.")) { await sh("npm install eslint-utils@1.4.0") } - await sh("npm install") -})().catch(error => { + await sh("npm install --legacy-peer-deps") +})().catch((error) => { console.error(error) process.exitCode = 1 }) diff --git a/scripts/update-fixtures-ast.js b/scripts/update-fixtures-ast.js index 9e0fa561..2290ba28 100644 --- a/scripts/update-fixtures-ast.js +++ b/scripts/update-fixtures-ast.js @@ -208,8 +208,11 @@ for (const name of TARGETS) { : {} if ( Object.entries(requirements).some(([pkgName, pkgVersion]) => { - const pkg = require(`${pkgName}/package.json`) - return !semver.satisfies(pkg.version, pkgVersion) + const version = + pkgName === "node" + ? process.version + : require(`${pkgName}/package.json`).version + return !semver.satisfies(version, pkgVersion) }) ) { continue diff --git a/test/ast.js b/test/ast.js index 48a9b58a..e5634442 100644 --- a/test/ast.js +++ b/test/ast.js @@ -190,8 +190,11 @@ describe("Template AST", () => { if ( Object.entries(requirements).some(([pkgName, pkgVersion]) => { - const pkg = require(`${pkgName}/package.json`) - return !semver.satisfies(pkg.version, pkgVersion) + const version = + pkgName === "node" + ? process.version + : require(`${pkgName}/package.json`).version + return !semver.satisfies(version, pkgVersion) }) ) { continue diff --git a/test/core-rules.js b/test/core-rules.js index 8a2b2b51..69c7772a 100644 --- a/test/core-rules.js +++ b/test/core-rules.js @@ -104,8 +104,15 @@ function modifyPattern(ruleId, pattern) { // Ignore for now if ( - ruleId === "newline-per-chained-call" && - pattern.code === "foo.bar()['foo' + \u2029 + 'bar']()" + (ruleId === "newline-per-chained-call" && + pattern.code === "foo.bar()['foo' + \u2029 + 'bar']()") || + (ruleId === "no-nonoctal-decimal-escape" && + pattern.code === "'\\\r\n\\9'") || + // The location is reported as a fixed value: { line: 1, column: 0 }. + (ruleId === "consistent-return" && + pattern.parserOptions && + pattern.parserOptions.ecmaFeatures && + pattern.parserOptions.ecmaFeatures.globalReturn === true) ) { return null } @@ -151,6 +158,22 @@ function modifyPattern(ruleId, pattern) { } } + // `no-shadow` rule is special a bit. + if (ruleId === "no-shadow") { + // The data that the rule gives to the message contains the location. + if ( + error.data && + error.data && + Object.hasOwnProperty.call( + error.data, + "shadowedLine" + ) && + typeof error.data.shadowedLine === "number" + ) { + error.data.shadowedLine++ + } + } + // Wrap the code by `