diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1ad441b9..ba8e922f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,10 +12,9 @@ jobs: fail-fast: false matrix: node-version: + - 21 - 20 - 18 - - 16 - - 14 os: - ubuntu-latest steps: @@ -23,7 +22,7 @@ jobs: - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - - run: npm install + - run: npm install --force # ts-eslint does not support eslint v9 yet. - run: npm test lint: @@ -32,18 +31,29 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: "18.x" - - run: npm install + node-version: "lts/*" + - run: npm install --force # ts-eslint does not support eslint v9 yet. - run: npm run lint - eslint7: + eslint8: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: "18.x" - - run: npm install - - run: npm install --save-dev eslint@7 + node-version: "lts/*" + - run: npm install --force # ts-eslint does not support eslint v9 yet. + - run: npm install --save-dev eslint@8 - run: npm test + test-remote: + name: eslint-remote-tester + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "lts/*" + - run: npm install --force # ts-eslint does not support eslint v9 yet. + - run: npm install --save-dev eslint@8 # eslint-remote-tester does not support eslint v9. + - run: npm run test:remote diff --git a/lib/rules/no-unused-placeholders.js b/lib/rules/no-unused-placeholders.js index edace9c3..da116ceb 100644 --- a/lib/rules/no-unused-placeholders.js +++ b/lib/rules/no-unused-placeholders.js @@ -101,9 +101,12 @@ module.exports = { const PLACEHOLDER_MATCHER = /{{\s*([^{}]+?)\s*}}/g; const placeholdersInMessage = new Set(); - messageValue.replace(PLACEHOLDER_MATCHER, (fullMatch, term) => { - placeholdersInMessage.add(term); - }); + messageValue.replaceAll( + PLACEHOLDER_MATCHER, + (fullMatch, term) => { + placeholdersInMessage.add(term); + } + ); data.properties.forEach((prop) => { const key = utils.getKeyName(prop); diff --git a/lib/rules/require-meta-docs-url.js b/lib/rules/require-meta-docs-url.js index d52f1984..8b6f25ac 100644 --- a/lib/rules/require-meta-docs-url.js +++ b/lib/rules/require-meta-docs-url.js @@ -62,7 +62,7 @@ module.exports = { const expectedUrl = !options.pattern || !ruleName ? undefined - : options.pattern.replace(/{{\s*name\s*}}/g, ruleName); + : options.pattern.replaceAll(/{{\s*name\s*}}/g, ruleName); /** * Check whether a given URL is the expected URL. diff --git a/lib/utils.js b/lib/utils.js index c1be12c2..9a409a5b 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -719,7 +719,7 @@ module.exports = { return fixer.replaceText(node, `{\n${propertyText}\n}`); } return fixer.insertTextAfter( - sourceCode.getLastToken(node.properties[node.properties.length - 1]), + sourceCode.getLastToken(node.properties.at(-1)), `,\n${propertyText}` ); }, diff --git a/package.json b/package.json index 839a723b..2e122386 100644 --- a/package.json +++ b/package.json @@ -17,9 +17,9 @@ "lint:js": "eslint --cache --ignore-pattern \"**/*.md\" .", "lint:js-docs": "eslint --no-inline-config \"**/*.md\"", "lint:package-json": "npmPkgJsonLint .", - "lint:remote": "eslint-remote-tester", "release": "release-it", "test": "nyc --all --check-coverage --include lib mocha tests --recursive", + "test:remote": "eslint-remote-tester", "update:eslint-docs": "eslint-doc-generator" }, "files": [ @@ -52,29 +52,29 @@ "devDependencies": { "@commitlint/cli": "^17.1.2", "@commitlint/config-conventional": "^17.1.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "^8.57.0", + "@eslint/eslintrc": "^3.0.2", + "@eslint/js": "^9.0.0", "@release-it/conventional-changelog": "^4.3.0", - "@types/eslint": "^8.56.6", + "@types/eslint": "^8.56.7", "@types/estree": "^1.0.5", - "@typescript-eslint/parser": "^5.62.0", - "@typescript-eslint/utils": "^5.62.0", + "@typescript-eslint/parser": "^7.5.0", + "@typescript-eslint/utils": "^7.5.0", "chai": "^4.3.6", "dirty-chai": "^2.0.1", - "eslint": "^8.57.0", + "eslint": "^9.0.0", "eslint-config-not-an-aardvark": "^2.1.0", "eslint-config-prettier": "^8.5.0", "eslint-doc-generator": "^1.7.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-eslint-plugin": "file:./", "eslint-plugin-markdown": "^3.0.0", - "eslint-plugin-n": "^16.6.2", + "eslint-plugin-n": "^17.0.0", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-unicorn": "^46.0.0", + "eslint-plugin-unicorn": "^52.0.0", "eslint-remote-tester": "^3.0.1", - "eslint-scope": "^7.1.1", - "espree": "^9.4.0", - "globals": "^13.20.0", + "eslint-scope": "^8.0.1", + "espree": "^10.0.1", + "globals": "^15.0.0", "husky": "^8.0.1", "lodash": "^4.17.21", "markdownlint-cli": "^0.39.0", @@ -87,10 +87,10 @@ "typescript": "^5.4.3" }, "peerDependencies": { - "eslint": ">=7.0.0" + "eslint": ">=8.23.0" }, "engines": { - "node": "^14.17.0 || ^16.0.0 || >= 18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "release-it": { "git": { diff --git a/tests/lib/eslint-rule-tester.js b/tests/lib/eslint-rule-tester.js new file mode 100644 index 00000000..dd16a8e2 --- /dev/null +++ b/tests/lib/eslint-rule-tester.js @@ -0,0 +1,15 @@ +/** + * @fileoverview Helpers for tests. + * @author 唯然 + */ + +'use strict'; + +const eslintVersion = require('eslint/package.json').version; +const { RuleTester } = require('eslint'); +const { FlatRuleTester } = require('eslint/use-at-your-own-risk'); + +// greater than or equal to ESLint v9 +exports.gteEslintV9 = +eslintVersion.split('.')[0] >= 9; + +exports.RuleTester = exports.gteEslintV9 ? RuleTester : FlatRuleTester; diff --git a/tests/lib/rules/consistent-output.js b/tests/lib/rules/consistent-output.js index 844fde15..75ecabe8 100644 --- a/tests/lib/rules/consistent-output.js +++ b/tests/lib/rules/consistent-output.js @@ -10,7 +10,7 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/consistent-output'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; const ERROR = { messageId: 'missingOutput', type: 'ObjectExpression' }; @@ -18,7 +18,9 @@ const ERROR = { messageId: 'missingOutput', type: 'ObjectExpression' }; // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester(); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('consistent-output', rule, { valid: [ ` diff --git a/tests/lib/rules/fixer-return.js b/tests/lib/rules/fixer-return.js index 62f66fb8..349a9bf4 100644 --- a/tests/lib/rules/fixer-return.js +++ b/tests/lib/rules/fixer-return.js @@ -10,13 +10,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/fixer-return'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('fixer-return', rule, { valid: [ ` diff --git a/tests/lib/rules/meta-property-ordering.js b/tests/lib/rules/meta-property-ordering.js index 830371fd..e5e8bce4 100644 --- a/tests/lib/rules/meta-property-ordering.js +++ b/tests/lib/rules/meta-property-ordering.js @@ -9,13 +9,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/meta-property-ordering'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('test-case-property-ordering', rule, { valid: [ ` @@ -31,7 +33,7 @@ ruleTester.run('test-case-property-ordering', rule, { meta: {type, docs, fixable, schema, messages}, create() {}, };`, - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, ` @@ -124,13 +126,13 @@ ruleTester.run('test-case-property-ordering', rule, { }, create() {}, };`, - parserOptions: { sourceType: 'module' }, errors: [ { messageId: 'inconsistentOrder', data: { order: ['type', 'docs', 'fixable'].join(', ') }, }, ], + languageOptions: { sourceType: 'module' }, }, { code: ` diff --git a/tests/lib/rules/no-deprecated-context-methods.js b/tests/lib/rules/no-deprecated-context-methods.js index b325b9ae..84770ccd 100644 --- a/tests/lib/rules/no-deprecated-context-methods.js +++ b/tests/lib/rules/no-deprecated-context-methods.js @@ -10,13 +10,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/no-deprecated-context-methods'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('no-deprecated-context-methods', rule, { valid: [ ` diff --git a/tests/lib/rules/no-deprecated-report-api.js b/tests/lib/rules/no-deprecated-report-api.js index e409b9a0..6483fbde 100644 --- a/tests/lib/rules/no-deprecated-report-api.js +++ b/tests/lib/rules/no-deprecated-report-api.js @@ -10,13 +10,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/no-deprecated-report-api'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('no-deprecated-report-api', rule, { valid: [ ` diff --git a/tests/lib/rules/no-identical-tests.js b/tests/lib/rules/no-identical-tests.js index 0e15d1b4..6bcf4419 100644 --- a/tests/lib/rules/no-identical-tests.js +++ b/tests/lib/rules/no-identical-tests.js @@ -10,7 +10,7 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/no-identical-tests'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; const ERROR_OBJECT_TEST = { messageId: 'identical', type: 'ObjectExpression' }; const ERROR_STRING_TEST = { messageId: 'identical', type: 'Literal' }; @@ -19,7 +19,9 @@ const ERROR_STRING_TEST = { messageId: 'identical', type: 'Literal' }; // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester(); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('no-identical-tests', rule, { valid: [ ` @@ -232,8 +234,8 @@ ruleTester.run('no-identical-tests', rule, { }); } `, - parserOptions: { ecmaVersion: 2015 }, errors: [{ messageId: 'identical', type: 'TemplateLiteral' }], + languageOptions: { ecmaVersion: 2015 }, }, ], }); diff --git a/tests/lib/rules/no-missing-message-ids.js b/tests/lib/rules/no-missing-message-ids.js index 6b43a7d6..e8e2df0e 100644 --- a/tests/lib/rules/no-missing-message-ids.js +++ b/tests/lib/rules/no-missing-message-ids.js @@ -5,13 +5,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/no-missing-message-ids'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 9 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('no-missing-message-ids', rule, { valid: [ @@ -75,7 +77,7 @@ ruleTester.run('no-missing-message-ids', rule, { } }; `, - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, // unrelated function 1 ` @@ -321,7 +323,6 @@ ruleTester.run('no-missing-message-ids', rule, { } }; `, - parserOptions: { sourceType: 'module' }, errors: [ { messageId: 'missingMessage', @@ -329,6 +330,7 @@ ruleTester.run('no-missing-message-ids', rule, { type: 'Literal', }, ], + languageOptions: { sourceType: 'module' }, }, { // Helper function with messageId parameter, inside rule, with missing messageId due to parameter reassignment. diff --git a/tests/lib/rules/no-missing-placeholders.js b/tests/lib/rules/no-missing-placeholders.js index 858fa232..56e4cf6e 100644 --- a/tests/lib/rules/no-missing-placeholders.js +++ b/tests/lib/rules/no-missing-placeholders.js @@ -10,7 +10,7 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/no-missing-placeholders'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; /** * Create an error for the given key @@ -29,7 +29,9 @@ function error(missingKey, type, extra) { // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('no-missing-placeholders', rule, { valid: [ ` diff --git a/tests/lib/rules/no-only-tests.js b/tests/lib/rules/no-only-tests.js index 29882439..0df7e600 100644 --- a/tests/lib/rules/no-only-tests.js +++ b/tests/lib/rules/no-only-tests.js @@ -5,19 +5,21 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/no-only-tests'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 'latest' } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('no-only-tests', rule, { valid: [ // No test cases with `only` ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [ 'foo', @@ -34,7 +36,7 @@ ruleTester.run('no-only-tests', rule, { // `only` set to `false` ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [ { code: 'foo', only: false }, @@ -61,7 +63,7 @@ ruleTester.run('no-only-tests', rule, { // Valid test case with `only` code: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [ { code: 'foo', only: true }, @@ -82,7 +84,7 @@ ruleTester.run('no-only-tests', rule, { messageId: 'removeOnly', output: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [ { code: 'foo' }, @@ -98,7 +100,7 @@ ruleTester.run('no-only-tests', rule, { // Invalid test case with `only` (property at end of object, no trailing comma) code: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [], invalid: [ @@ -119,7 +121,7 @@ ruleTester.run('no-only-tests', rule, { messageId: 'removeOnly', output: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [], invalid: [ @@ -135,7 +137,7 @@ ruleTester.run('no-only-tests', rule, { // Invalid test case with `only` (property at end of object, with trailing comma) code: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [], invalid: [ @@ -156,7 +158,7 @@ ruleTester.run('no-only-tests', rule, { messageId: 'removeOnly', output: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [], invalid: [ @@ -172,7 +174,7 @@ ruleTester.run('no-only-tests', rule, { // Invalid test case with `only` (property in middle of object) code: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [], invalid: [ @@ -193,7 +195,7 @@ ruleTester.run('no-only-tests', rule, { messageId: 'removeOnly', output: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [], invalid: [ @@ -209,7 +211,7 @@ ruleTester.run('no-only-tests', rule, { // Invalid test case with `only` (property at beginning of object) code: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [], invalid: [ @@ -230,7 +232,7 @@ ruleTester.run('no-only-tests', rule, { messageId: 'removeOnly', output: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); ruleTester.run('foo', bar, { valid: [], invalid: [ @@ -247,7 +249,7 @@ ruleTester.run('no-only-tests', rule, { // Valid test case using `RuleTester.only` code: ` const { RuleTester } = require('eslint'); - const ruleTester = new RuleTester(); + const ruleTester = new RuleTester({languageOptions: {sourceType: "commonjs"}}); new RuleTester().run('foo', bar, { valid: [ RuleTester.only('foo'), diff --git a/tests/lib/rules/no-property-in-node.js b/tests/lib/rules/no-property-in-node.js index 39e4587f..bc5387c1 100644 --- a/tests/lib/rules/no-property-in-node.js +++ b/tests/lib/rules/no-property-in-node.js @@ -1,14 +1,16 @@ 'use strict'; -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; const path = require('path'); const rule = require('../../../lib/rules/no-property-in-node'); const ruleTester = new RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: path.join(__dirname, '../fixtures'), + languageOptions: { + parser: require('@typescript-eslint/parser'), + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: path.join(__dirname, '../fixtures'), + }, }, }); diff --git a/tests/lib/rules/no-unused-message-ids.js b/tests/lib/rules/no-unused-message-ids.js index 82f9df8f..ea7b724e 100644 --- a/tests/lib/rules/no-unused-message-ids.js +++ b/tests/lib/rules/no-unused-message-ids.js @@ -5,13 +5,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/no-unused-message-ids'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 9 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('no-unused-message-ids', rule, { valid: [ @@ -51,7 +53,7 @@ ruleTester.run('no-unused-message-ids', rule, { } }; `, - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, // unrelated function 1 ` @@ -323,7 +325,6 @@ ruleTester.run('no-unused-message-ids', rule, { } }; `, - parserOptions: { sourceType: 'module' }, errors: [ { messageId: 'unusedMessage', @@ -331,6 +332,7 @@ ruleTester.run('no-unused-message-ids', rule, { type: 'Property', }, ], + languageOptions: { sourceType: 'module' }, }, { // `meta` / `create` in variables diff --git a/tests/lib/rules/no-unused-placeholders.js b/tests/lib/rules/no-unused-placeholders.js index a57a4274..d61fd030 100644 --- a/tests/lib/rules/no-unused-placeholders.js +++ b/tests/lib/rules/no-unused-placeholders.js @@ -10,7 +10,7 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/no-unused-placeholders'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; /** * Create an error for the given key @@ -29,7 +29,9 @@ function error(unusedKey, extra) { // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('no-unused-placeholders', rule, { valid: [ ` diff --git a/tests/lib/rules/no-useless-token-range.js b/tests/lib/rules/no-useless-token-range.js index 1ef59734..52d216a5 100644 --- a/tests/lib/rules/no-useless-token-range.js +++ b/tests/lib/rules/no-useless-token-range.js @@ -10,7 +10,7 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/no-useless-token-range'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; /** * Wraps a code sample as an eslint rule @@ -78,7 +78,9 @@ const INVALID_CASES = [ }) ); -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('no-useless-token-range', rule, { valid: [ ...[ diff --git a/tests/lib/rules/prefer-message-ids.js b/tests/lib/rules/prefer-message-ids.js index 34a2ac23..4f01f5b1 100644 --- a/tests/lib/rules/prefer-message-ids.js +++ b/tests/lib/rules/prefer-message-ids.js @@ -5,13 +5,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/prefer-message-ids'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('prefer-message-ids', rule, { valid: [ @@ -50,7 +52,7 @@ ruleTester.run('prefer-message-ids', rule, { } }; `, - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, ` module.exports = { @@ -159,8 +161,8 @@ ruleTester.run('prefer-message-ids', rule, { } }; `, - parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'foundMessage', type: 'Property' }], + languageOptions: { sourceType: 'module' }, }, { // With message in variable. diff --git a/tests/lib/rules/prefer-object-rule.js b/tests/lib/rules/prefer-object-rule.js index 4b7bd7de..fbc4fa50 100644 --- a/tests/lib/rules/prefer-object-rule.js +++ b/tests/lib/rules/prefer-object-rule.js @@ -9,13 +9,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/prefer-object-rule'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('prefer-object-rule', rule, { valid: [ ` @@ -77,7 +79,7 @@ ruleTester.run('prefer-object-rule', rule, { }, }; `, - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, 'module.exports = {};', // No rule. ], @@ -141,27 +143,27 @@ ruleTester.run('prefer-object-rule', rule, { return { Program() { context.report() } }; }}; `, - parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'preferObject', line: 2, column: 24 }], + languageOptions: { sourceType: 'module' }, }, { code: 'export default function create(context) { return {}; };', output: 'export default {create(context) { return {}; }};', - parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'preferObject', line: 1, column: 16 }], + languageOptions: { sourceType: 'module' }, }, { code: 'export default (context) => { return {}; };', output: 'export default {create: (context) => { return {}; }};', - parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'preferObject', line: 1, column: 16 }], + languageOptions: { sourceType: 'module' }, }, { code: 'const rule = (context) => { return {}; }; export default rule;', output: 'const rule = {create: (context) => { return {}; }}; export default rule;', - parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'preferObject', line: 1, column: 14 }], + languageOptions: { sourceType: 'module' }, }, ], }); diff --git a/tests/lib/rules/prefer-output-null.js b/tests/lib/rules/prefer-output-null.js index 8fe57bcc..b7c0eda1 100644 --- a/tests/lib/rules/prefer-output-null.js +++ b/tests/lib/rules/prefer-output-null.js @@ -10,7 +10,7 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/prefer-output-null'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; const ERROR = { messageId: 'useOutputNull', type: 'Property' }; @@ -18,7 +18,9 @@ const ERROR = { messageId: 'useOutputNull', type: 'Property' }; // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 'latest' } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('prefer-output-null', rule, { valid: [ ` diff --git a/tests/lib/rules/prefer-placeholders.js b/tests/lib/rules/prefer-placeholders.js index a2a3ca4f..f7fe49e0 100644 --- a/tests/lib/rules/prefer-placeholders.js +++ b/tests/lib/rules/prefer-placeholders.js @@ -10,13 +10,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/prefer-placeholders'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('prefer-placeholders', rule, { valid: [ diff --git a/tests/lib/rules/prefer-replace-text.js b/tests/lib/rules/prefer-replace-text.js index 08a779c8..c83a9559 100644 --- a/tests/lib/rules/prefer-replace-text.js +++ b/tests/lib/rules/prefer-replace-text.js @@ -10,13 +10,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/prefer-replace-text'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('prefer-placeholders', rule, { valid: [ diff --git a/tests/lib/rules/report-message-format.js b/tests/lib/rules/report-message-format.js index 1f086ce1..155f4c46 100644 --- a/tests/lib/rules/report-message-format.js +++ b/tests/lib/rules/report-message-format.js @@ -10,13 +10,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/report-message-format'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('report-message-format', rule, { valid: [ // with no configuration, everything is allowed @@ -41,7 +43,7 @@ ruleTester.run('report-message-format', rule, { }; `, options: ['foo'], - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, { // With message as variable. @@ -218,7 +220,7 @@ ruleTester.run('report-message-format', rule, { }; `, options: ['foo'], - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, { // With message as variable. diff --git a/tests/lib/rules/require-meta-docs-description.js b/tests/lib/rules/require-meta-docs-description.js index 716eaa84..721cd626 100644 --- a/tests/lib/rules/require-meta-docs-description.js +++ b/tests/lib/rules/require-meta-docs-description.js @@ -5,13 +5,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/require-meta-docs-description'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 9 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('require-meta-docs-description', rule, { valid: [ 'foo()', // No rule. @@ -30,7 +32,7 @@ ruleTester.run('require-meta-docs-description', rule, { create(context) {} }; `, - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, ` module.exports = { @@ -157,8 +159,8 @@ ruleTester.run('require-meta-docs-description', rule, { }; `, output: null, - parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'missing', type: 'ObjectExpression' }], + languageOptions: { sourceType: 'module' }, }, { code: ` @@ -294,8 +296,10 @@ ruleTester.run('require-meta-docs-description', rule, { }); const ruleTesterTypeScript = new RuleTester({ - parserOptions: { sourceType: 'module' }, - parser: require.resolve('@typescript-eslint/parser'), + languageOptions: { + sourceType: 'module', + parser: require('@typescript-eslint/parser'), + }, }); ruleTesterTypeScript.run('require-meta-docs-description (TypeScript)', rule, { valid: [ diff --git a/tests/lib/rules/require-meta-docs-url.js b/tests/lib/rules/require-meta-docs-url.js index a6ba0f52..9d29b177 100644 --- a/tests/lib/rules/require-meta-docs-url.js +++ b/tests/lib/rules/require-meta-docs-url.js @@ -10,7 +10,7 @@ // Requirements // ----------------------------------------------------------------------------- -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; const rule = require('../../../lib/rules/require-meta-docs-url'); // ----------------------------------------------------------------------------- @@ -18,8 +18,8 @@ const rule = require('../../../lib/rules/require-meta-docs-url'); // ----------------------------------------------------------------------------- const tester = new RuleTester({ - parserOptions: { - ecmaVersion: 2020, + languageOptions: { + sourceType: 'commonjs', }, }); @@ -96,7 +96,7 @@ tester.run('require-meta-docs-url', rule, { pattern: 'path/to/{{name}}.md', }, ], - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, { // TypeScript @@ -108,7 +108,7 @@ tester.run('require-meta-docs-url', rule, { } `, options: [{ pattern: 'path/to/{{name}}.md' }], - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, { // `url` in variable. @@ -733,8 +733,8 @@ url: "plugin-name/test.md" pattern: 'plugin-name/{{ name }}.md', }, ], - parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'missing', type: 'ObjectExpression' }], + languageOptions: { sourceType: 'module' }, }, { // TypeScript @@ -756,8 +756,8 @@ url: "plugin-name/test.md" } `, options: [{ pattern: 'plugin-name/{{ name }}.md' }], - parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'missing', type: 'ObjectExpression' }], + languageOptions: { sourceType: 'module' }, }, { filename: 'test.js', diff --git a/tests/lib/rules/require-meta-fixable.js b/tests/lib/rules/require-meta-fixable.js index 496d2134..dfc7d7ff 100644 --- a/tests/lib/rules/require-meta-fixable.js +++ b/tests/lib/rules/require-meta-fixable.js @@ -10,13 +10,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/require-meta-fixable'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 9 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('require-meta-fixable', rule, { valid: [ // No `meta`. @@ -50,7 +52,7 @@ ruleTester.run('require-meta-fixable', rule, { } }; `, - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, // Value in variable. ` @@ -138,7 +140,7 @@ ruleTester.run('require-meta-fixable', rule, { create(context) { context.report(node, message, data, fix); } }; `, - parserOptions: { + languageOptions: { ecmaVersion: 9, }, }, @@ -251,8 +253,8 @@ ruleTester.run('require-meta-fixable', rule, { create(context) { context.report({node, message, fix: foo}); } }; `, - parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'missing', type: 'ObjectExpression' }], + languageOptions: { sourceType: 'module' }, }, { code: ` diff --git a/tests/lib/rules/require-meta-has-suggestions.js b/tests/lib/rules/require-meta-has-suggestions.js index 69451350..3a96ea59 100644 --- a/tests/lib/rules/require-meta-has-suggestions.js +++ b/tests/lib/rules/require-meta-has-suggestions.js @@ -5,13 +5,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/require-meta-has-suggestions'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 9 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('require-meta-has-suggestions', rule, { valid: [ 'module.exports = context => { return {}; };', @@ -122,7 +124,7 @@ ruleTester.run('require-meta-has-suggestions', rule, { } }; `, - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, // Provides suggestions, has hasSuggestions property (as variable). ` @@ -215,7 +217,7 @@ ruleTester.run('require-meta-has-suggestions', rule, { create(context) { context.report(node, message, data, fix); } }; `, - parserOptions: { + languageOptions: { ecmaVersion: 9, }, }, @@ -289,7 +291,6 @@ ruleTester.run('require-meta-has-suggestions', rule, { }; `, output: null, - parserOptions: { sourceType: 'module' }, errors: [ { messageId: 'shouldBeSuggestable', @@ -300,6 +301,7 @@ ruleTester.run('require-meta-has-suggestions', rule, { endColumn: 78, }, ], + languageOptions: { sourceType: 'module' }, }, { // Reports suggestions, no hasSuggestions property, violation should be on `meta` object, empty meta object. diff --git a/tests/lib/rules/require-meta-schema.js b/tests/lib/rules/require-meta-schema.js index ca11074e..8903d1fd 100644 --- a/tests/lib/rules/require-meta-schema.js +++ b/tests/lib/rules/require-meta-schema.js @@ -5,13 +5,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/require-meta-schema'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 9 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('require-meta-schema', rule, { valid: [ ` @@ -61,7 +63,7 @@ ruleTester.run('require-meta-schema', rule, { create(context) { const options = context.options; } }; `, - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, // Variable schema with array value. ` @@ -254,7 +256,6 @@ schema: [] }; `, output: null, - parserOptions: { sourceType: 'module' }, errors: [ { messageId: 'missing', @@ -274,6 +275,7 @@ schema: [] ], }, ], + languageOptions: { sourceType: 'module' }, }, { code: ` diff --git a/tests/lib/rules/require-meta-type.js b/tests/lib/rules/require-meta-type.js index 67babf4c..ecb99ec0 100644 --- a/tests/lib/rules/require-meta-type.js +++ b/tests/lib/rules/require-meta-type.js @@ -10,13 +10,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/require-meta-type'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 9 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('require-meta-type', rule, { valid: [ ` @@ -33,7 +35,7 @@ ruleTester.run('require-meta-type', rule, { create(context) {} }; `, - parserOptions: { sourceType: 'module' }, + languageOptions: { sourceType: 'module' }, }, ` module.exports = { @@ -115,8 +117,8 @@ ruleTester.run('require-meta-type', rule, { create(context) {} }; `, - parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'missing', type: 'ObjectExpression' }], + languageOptions: { sourceType: 'module' }, }, { code: ` diff --git a/tests/lib/rules/test-case-property-ordering.js b/tests/lib/rules/test-case-property-ordering.js index 996df162..cb20b85c 100644 --- a/tests/lib/rules/test-case-property-ordering.js +++ b/tests/lib/rules/test-case-property-ordering.js @@ -10,13 +10,15 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/test-case-property-ordering'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester(); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('test-case-property-ordering', rule, { valid: [ ` diff --git a/tests/lib/rules/test-case-shorthand-strings.js b/tests/lib/rules/test-case-shorthand-strings.js index c494480f..4deddade 100644 --- a/tests/lib/rules/test-case-shorthand-strings.js +++ b/tests/lib/rules/test-case-shorthand-strings.js @@ -10,7 +10,7 @@ // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/test-case-shorthand-strings'); -const RuleTester = require('eslint').RuleTester; +const RuleTester = require('../eslint-rule-tester').RuleTester; /** * Returns the code for some valid test cases @@ -40,7 +40,9 @@ const UNEXPECTED_SHORTHAND_ERROR = { // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); +const ruleTester = new RuleTester({ + languageOptions: { sourceType: 'commonjs' }, +}); ruleTester.run('test-case-shorthand-strings', rule, { valid: [ // default (as-needed)