From 4d60114635c0125fd96099061af2710585d6f4d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Mon, 30 Aug 2021 03:06:15 +0200 Subject: [PATCH] feat: support ESLint 8.x --- .github/workflows/node-4+.yml | 25 +++++++++++++++++++++- package.json | 10 ++++----- tests/helpers/getESLintCoreRule.js | 11 ++++++++++ tests/lib/rules/jsx-no-undef.js | 4 ++-- tests/lib/rules/jsx-no-useless-fragment.js | 4 +--- tests/lib/rules/jsx-uses-react.js | 4 ++-- tests/lib/rules/jsx-uses-vars.js | 6 +++--- 7 files changed, 48 insertions(+), 16 deletions(-) create mode 100644 tests/helpers/getESLintCoreRule.js diff --git a/.github/workflows/node-4+.yml b/.github/workflows/node-4+.yml index 4ef85621c4..127847042f 100644 --- a/.github/workflows/node-4+.yml +++ b/.github/workflows/node-4+.yml @@ -26,6 +26,7 @@ jobs: matrix: node-version: ${{ fromJson(needs.matrix.outputs.latest) }} eslint: + - '^8.0.0-0' - 7 - 6 - 5 @@ -45,24 +46,46 @@ jobs: babel-eslint: 10 - node-version: 4 babel-eslint: 9 + - node-version: 15 + eslint: '^8.0.0-0' + - node-version: 13 + eslint: '^8.0.0-0' + - node-version: 11 + eslint: '^8.0.0-0' + - node-version: 11 + eslint: 7 + - node-version: 10 + eslint: '^8.0.0-0' + - node-version: 9 + eslint: '^8.0.0-0' - node-version: 9 eslint: 7 + - node-version: 8 + eslint: '^8.0.0-0' - node-version: 8 eslint: 7 + - node-version: 7 + eslint: '^8.0.0-0' - node-version: 7 eslint: 7 - node-version: 7 eslint: 6 + - node-version: 6 + eslint: '^8.0.0-0' - node-version: 6 eslint: 7 - node-version: 6 eslint: 6 + - node-version: 5 + eslint: '^8.0.0-0' - node-version: 5 eslint: 7 - node-version: 5 eslint: 6 - node-version: 5 eslint: 5 + - node-version: 4 + eslint: '^8.0.0-0' - node-version: 4 eslint: 7 - node-version: 4 @@ -76,7 +99,7 @@ jobs: name: 'nvm install ${{ matrix.node-version }} && npm install' with: node-version: ${{ matrix.node-version }} - after_install: npm install --no-save "eslint@${{ matrix.eslint }}" "@typescript-eslint/parser@${{ matrix.node-version >= 10 && '4.0' || (matrix.node-version >= 8 && '3' || '2') }}" "babel-eslint@${{ matrix.babel-eslint }}" + after_install: npm install --no-save "eslint@${{ matrix.eslint }}" "@typescript-eslint/parser@${{ matrix.node-version >= 10 && '^5.0.0-0' || (matrix.node-version >= 8 && '3' || '2') }}" "babel-eslint@${{ matrix.babel-eslint }}" skip-ls-check: true env: NPM_CONFIG_LEGACY_PEER_DEPS: true diff --git a/package.json b/package.json index 09f4153950..73f2e5931b 100644 --- a/package.json +++ b/package.json @@ -44,13 +44,13 @@ "string.prototype.matchall": "^4.0.5" }, "devDependencies": { - "@types/eslint": "=7.2.10", + "@types/eslint": "^7.28.0", "@types/estree": "^0.0.50", - "@types/node": "^14.17.17", - "@typescript-eslint/parser": "^2.34.0 || ^3.10.1 || ~4.0", + "@types/node": "^14.17.12", + "@typescript-eslint/parser": "^2.34.0 || ^3.10.1 || ~4.0 || ^5.0.0-0", "aud": "^1.1.5", "babel-eslint": "^8 || ^9 || ^10.1.0", - "eslint": "^3 || ^4 || ^5 || ^6 || ^7", + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8.0.0-0", "eslint-config-airbnb-base": "^14.2.1", "eslint-plugin-eslint-plugin": "^2.3.0 || ^3.5.3", "eslint-plugin-import": "^2.24.2", @@ -66,7 +66,7 @@ "typescript-eslint-parser": "^20.1.1" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8.0.0-0" }, "engines": { "node": ">=4" diff --git a/tests/helpers/getESLintCoreRule.js b/tests/helpers/getESLintCoreRule.js new file mode 100644 index 0000000000..bbed38bccb --- /dev/null +++ b/tests/helpers/getESLintCoreRule.js @@ -0,0 +1,11 @@ +'use strict'; + +const version = require('eslint/package.json').version; +const semver = require('semver'); + +const isESLintV8 = semver.major(version) >= 8; + +// eslint-disable-next-line global-require, import/no-dynamic-require, import/no-unresolved +const getESLintCoreRule = (ruleId) => (isESLintV8 ? require('eslint/use-at-your-own-risk').builtinRules.get(ruleId) : require(`eslint/lib/rules/${ruleId}`)); + +module.exports = getESLintCoreRule; diff --git a/tests/lib/rules/jsx-no-undef.js b/tests/lib/rules/jsx-no-undef.js index 40f498befd..cb946e1da0 100644 --- a/tests/lib/rules/jsx-no-undef.js +++ b/tests/lib/rules/jsx-no-undef.js @@ -28,8 +28,8 @@ const parserOptions = { // ----------------------------------------------------------------------------- const ruleTester = new RuleTester({parserOptions}); -const linter = ruleTester.linter || eslint.linter; -linter.defineRule('no-undef', require('eslint/lib/rules/no-undef')); +const linter = ruleTester.linter || eslint.linter || eslint.Linter; +linter.defineRule('no-undef', require('../../helpers/getESLintCoreRule')('no-undef')); ruleTester.run('jsx-no-undef', rule, { valid: [{ diff --git a/tests/lib/rules/jsx-no-useless-fragment.js b/tests/lib/rules/jsx-no-useless-fragment.js index 0557fcdcb0..a72a4a1db4 100644 --- a/tests/lib/rules/jsx-no-useless-fragment.js +++ b/tests/lib/rules/jsx-no-useless-fragment.js @@ -8,12 +8,10 @@ // Requirements // ----------------------------------------------------------------------------- -const eslint = require('eslint'); +const RuleTester = require('eslint').RuleTester; const rule = require('../../../lib/rules/jsx-no-useless-fragment'); const parsers = require('../../helpers/parsers'); -const RuleTester = eslint.RuleTester; - const parserOptions = { ecmaVersion: 2018, ecmaFeatures: { diff --git a/tests/lib/rules/jsx-uses-react.js b/tests/lib/rules/jsx-uses-react.js index 6fd6d59d1f..0bde2276f1 100644 --- a/tests/lib/rules/jsx-uses-react.js +++ b/tests/lib/rules/jsx-uses-react.js @@ -10,7 +10,7 @@ // ----------------------------------------------------------------------------- const eslint = require('eslint'); -const rule = require('eslint/lib/rules/no-unused-vars'); +const rule = require('../../helpers/getESLintCoreRule')('no-unused-vars'); const RuleTester = eslint.RuleTester; @@ -35,7 +35,7 @@ const settings = { // ----------------------------------------------------------------------------- const ruleTester = new RuleTester({parserOptions}); -const linter = ruleTester.linter || eslint.linter; +const linter = ruleTester.linter || eslint.linter || eslint.Linter; linter.defineRule('jsx-uses-react', require('../../../lib/rules/jsx-uses-react')); ruleTester.run('no-unused-vars', rule, { diff --git a/tests/lib/rules/jsx-uses-vars.js b/tests/lib/rules/jsx-uses-vars.js index 1b2e0d0561..ce78e29018 100644 --- a/tests/lib/rules/jsx-uses-vars.js +++ b/tests/lib/rules/jsx-uses-vars.js @@ -10,8 +10,8 @@ // ----------------------------------------------------------------------------- const eslint = require('eslint'); -const ruleNoUnusedVars = require('eslint/lib/rules/no-unused-vars'); -const rulePreferConst = require('eslint/lib/rules/prefer-const'); +const ruleNoUnusedVars = require('../../helpers/getESLintCoreRule')('no-unused-vars'); +const rulePreferConst = require('../../helpers/getESLintCoreRule')('prefer-const'); const RuleTester = eslint.RuleTester; @@ -30,7 +30,7 @@ const parserOptions = { // ----------------------------------------------------------------------------- const ruleTester = new RuleTester({parserOptions}); -const linter = ruleTester.linter || eslint.linter; +const linter = ruleTester.linter || eslint.linter || eslint.Linter; linter.defineRule('jsx-uses-vars', require('../../../lib/rules/jsx-uses-vars')); ruleTester.run('no-unused-vars', ruleNoUnusedVars, {