diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9b50151..61b0861 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,8 +5,14 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: [12, 14, 16, 18, 20] - name: Test with Node ${{ matrix.node }} + include: + - node: 20 + eslint: 9 + - node: 18 + eslint: 8 + - node: 12 + eslint: 5 + name: node@${{ matrix.node }} and eslint@${{ matrix.eslint }} steps: - uses: actions/checkout@v3 - name: Setup node @@ -14,6 +20,7 @@ jobs: with: node-version: ${{ matrix.node }} - run: npm ci + - run: npm install eslint@${{ matrix.eslint }} - run: npm test format: diff --git a/lib/rules/sort-destructure-keys.js b/lib/rules/sort-destructure-keys.js index 57effaa..841772c 100644 --- a/lib/rules/sort-destructure-keys.js +++ b/lib/rules/sort-destructure-keys.js @@ -217,9 +217,10 @@ module.exports = { return { ObjectPattern(objectPatternNode) { - const scope = sourceCode.getScope - ? sourceCode.getScope(objectPatternNode) - : context.getScope(); + const scope = + sourceCode && sourceCode.getScope + ? sourceCode.getScope(objectPatternNode) + : context.getScope(); /* * If the node is more complex than just basic destructuring diff --git a/package.json b/package.json index 68906e7..a654fb7 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "format": "prettier --write \"{lib,tests}/**/*.js\"" }, "peerDependencies": { - "eslint": "3 - 9" + "eslint": "5 - 9" }, "dependencies": { "natural-compare-lite": "^1.4.0" diff --git a/tests/lib/rules/sort-destructure-keys.js b/tests/lib/rules/sort-destructure-keys.js index 0a4841a..37b4698 100644 --- a/tests/lib/rules/sort-destructure-keys.js +++ b/tests/lib/rules/sort-destructure-keys.js @@ -1,5 +1,16 @@ +const assert = require("assert"); const rule = require("../../../lib/rules/sort-destructure-keys"); -const RuleTester = require("eslint").RuleTester; +const eslint = require("eslint"); + +function eslintMajorVersion() { + const version = eslint.CLIEngine + ? eslint.CLIEngine.version + : eslint.ESLint.version; + const match = version.match(/^(?\d+)\.\d+\.\d+$/); + assert.ok(match, "ESLint `version` must have a major version number."); + + return Number(match.groups.major); +} function msg(second, first) { return { @@ -14,13 +25,24 @@ function just(...args) { function testsWithParser(parser, parserOptions = {}) { describe(`with parser: ${parser}`, () => { - const ruleTester = new RuleTester({ - parser: require.resolve(parser), - parserOptions: { - ...parserOptions, - ecmaVersion: 2018, - }, - }); + parserOptions = { + ...parserOptions, + ecmaVersion: 2018, + }; + + const ruleTester = new eslint.RuleTester( + eslintMajorVersion() >= 9 + ? { + languageOptions: { + parser: require(parser), + parserOptions, + }, + } + : { + parser: require.resolve(parser), + parserOptions, + }, + ); const testsFor = (name, ...args) => ruleTester.run(name, rule, ...args);