From 3640662ff04ddf7cdb1d8e4704428e6d7e44d6af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Mon, 23 Aug 2021 02:28:38 +0200 Subject: [PATCH] feat: support ESLint 8.x --- .github/workflows/CI.yml | 9 ++++++--- README.md | 2 +- lib/configs/_base.js | 4 ++++ package.json | 6 +++--- tests/lib/configs/_rules.js | 12 +++++++----- tests/lib/configs/eslint-replacements.json | 22 ++++++++++++++++++++++ 6 files changed, 43 insertions(+), 12 deletions(-) create mode 100644 tests/lib/configs/eslint-replacements.json diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 2537599..3be30b5 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -41,18 +41,21 @@ jobs: matrix.os }}) strategy: matrix: - eslint: [7] + eslint: [8] node: [12.22.0, 12, 14.17.0, 14, 16, 18] os: [ubuntu-latest] include: # On other platforms - os: windows-latest - eslint: 7 + eslint: 8 node: 18 - os: macos-latest - eslint: 7 + eslint: 8 node: 18 # On old ESLint versions + - eslint: 7 + node: 18 + os: ubuntu-latest - eslint: 6 node: 18 os: ubuntu-latest diff --git a/README.md b/README.md index d68f032..22355c0 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ npm install --save-dev eslint @eslint-community/eslint-plugin-mysticatea ### Requirements - Node.js `^12.22.0 || ^14.17.0 || >=16.0.0` or newer versions. -- ESLint `^6.6.0 || ^7.0.0` or newer versions. +- ESLint `^6.6.0 || ^7.0.0 || ^8.0.0` or newer versions. ## 📖 Usage diff --git a/lib/configs/_base.js b/lib/configs/_base.js index bd0ba06..7b6bb0d 100644 --- a/lib/configs/_base.js +++ b/lib/configs/_base.js @@ -38,6 +38,7 @@ module.exports = { "init-declarations": "error", "linebreak-style": ["error", "unix"], "lines-between-class-members": "error", + "logical-assignment-operators": "off", // TODO: enable once we drop ESLint v7 support "max-statements-per-line": ["error", { max: 1 }], "multiline-comment-style": ["error", "separate-lines"], "new-cap": "error", @@ -48,6 +49,7 @@ module.exports = { "no-case-declarations": "error", "no-compare-neg-zero": "error", "no-cond-assign": "error", + "no-constant-binary-expression": "off", // TODO: enable once we drop ESLint v7 support "no-constant-condition": "error", "no-constructor-return": "error", "no-control-regex": "error", @@ -152,6 +154,7 @@ module.exports = { "no-unsafe-optional-chaining": "error", "no-unused-expressions": "error", "no-unused-labels": "error", + "no-unused-private-class-members": "off", // TODO: enable once we drop ESLint v7 support "no-unused-vars": [ "error", { @@ -185,6 +188,7 @@ module.exports = { { blankLine: "always", next: "*", prev: "function" }, ], "prefer-exponentiation-operator": "error", + "prefer-object-has-own": "off", // TODO: enable once we drop ESLint v7 support "prefer-promise-reject-errors": "error", "prefer-regex-literals": "error", quotes: ["error", "double", { avoidEscape: true }], diff --git a/package.json b/package.json index b40ce6c..15f7b78 100644 --- a/package.json +++ b/package.json @@ -53,9 +53,9 @@ "vue-eslint-parser": "^8.3.0" }, "devDependencies": { - "@eslint/eslintrc": "^0.4.3", + "@eslint/eslintrc": "^1.3.3", "@eslint-community/eslint-plugin-mysticatea": "file:.", - "eslint": "~7.32.0", + "eslint": "~8.25.0", "globals": "^13.17.0", "mocha": "^9.2.2", "npm-run-all": "^4.1.5", @@ -65,7 +65,7 @@ "typescript": "^4.8.4" }, "peerDependencies": { - "eslint": ">=6.6.0" + "eslint": "^6.6.0 || ^7.0.0 || ^8.0.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" diff --git a/tests/lib/configs/_rules.js b/tests/lib/configs/_rules.js index 7d603c8..9ba9a94 100644 --- a/tests/lib/configs/_rules.js +++ b/tests/lib/configs/_rules.js @@ -6,13 +6,12 @@ const { Linter } = require("eslint") const { - ConfigArrayFactory, -} = require("@eslint/eslintrc/lib/config-array-factory") -const Validator = require("eslint/lib/shared/config-validator") -const { rules: removedRules } = require("eslint/conf/replacements.json") + Legacy: { ConfigArrayFactory, ConfigValidator }, +} = require("@eslint/eslintrc") const { rules: PluginRulesIndex, } = require("@eslint-community/eslint-plugin-mysticatea") +const { rules: removedRules } = require("./eslint-replacements.json") const coreRules = new Linter().getRules() const pluginRules = new Map( @@ -31,6 +30,7 @@ const deprecatedRuleNames = new Set( const removedRuleNames = new Set(Object.keys(removedRules)) const configFactory = new ConfigArrayFactory() +const configValidator = new ConfigValidator() module.exports = { /** @@ -40,7 +40,9 @@ module.exports = { * @returns {void} */ validateConfig(config, source) { - Validator.validate(config, source, (ruleId) => allRules.get(ruleId)) + configValidator.validate(config, source, (ruleId) => + allRules.get(ruleId) + ) /* istanbul ignore next */ for (const ruleId of [].concat( diff --git a/tests/lib/configs/eslint-replacements.json b/tests/lib/configs/eslint-replacements.json new file mode 100644 index 0000000..6acd959 --- /dev/null +++ b/tests/lib/configs/eslint-replacements.json @@ -0,0 +1,22 @@ +{ + "rules": { + "generator-star": ["generator-star-spacing"], + "global-strict": ["strict"], + "no-arrow-condition": ["no-confusing-arrow", "no-constant-condition"], + "no-comma-dangle": ["comma-dangle"], + "no-empty-class": ["no-empty-character-class"], + "no-empty-label": ["no-labels"], + "no-extra-strict": ["strict"], + "no-reserved-keys": ["quote-props"], + "no-space-before-semi": ["semi-spacing"], + "no-wrap-func": ["no-extra-parens"], + "space-after-function-name": ["space-before-function-paren"], + "space-after-keywords": ["keyword-spacing"], + "space-before-function-parentheses": ["space-before-function-paren"], + "space-before-keywords": ["keyword-spacing"], + "space-in-brackets": ["object-curly-spacing", "array-bracket-spacing", "computed-property-spacing"], + "space-return-throw-case": ["keyword-spacing"], + "space-unary-word-ops": ["space-unary-ops"], + "spaced-line-comment": ["spaced-comment"] + } +}