Skip to content

Commit 4adeb6c

Browse files
authored
feat!: requires node >= 18 & eslint >= 8.23.0 (#456)
* feat!: required node >= 18 & eslint >= 8.23.0 * chore: switch to eslint flat-rule-tester * build: split eslint-rule-tester * build: fix npm install * fix: npm scripts order * fix: revert unexpected tests changes * fix: npm scripts order * chore: eslint-plugin-n v17.0.0
1 parent dcb794f commit 4adeb6c

33 files changed

+215
-133
lines changed

Diff for: .github/workflows/main.yml

+19-9
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,17 @@ jobs:
1212
fail-fast: false
1313
matrix:
1414
node-version:
15+
- 21
1516
- 20
1617
- 18
17-
- 16
18-
- 14
1918
os:
2019
- ubuntu-latest
2120
steps:
2221
- uses: actions/checkout@v4
2322
- uses: actions/setup-node@v4
2423
with:
2524
node-version: ${{ matrix.node-version }}
26-
- run: npm install
25+
- run: npm install --force # ts-eslint does not support eslint v9 yet.
2726
- run: npm test
2827

2928
lint:
@@ -32,18 +31,29 @@ jobs:
3231
- uses: actions/checkout@v4
3332
- uses: actions/setup-node@v4
3433
with:
35-
node-version: "18.x"
36-
- run: npm install
34+
node-version: "lts/*"
35+
- run: npm install --force # ts-eslint does not support eslint v9 yet.
3736
- run: npm run lint
3837

39-
eslint7:
38+
eslint8:
4039
runs-on: ubuntu-latest
4140
steps:
4241
- uses: actions/checkout@v4
4342
- uses: actions/setup-node@v4
4443
with:
45-
node-version: "18.x"
46-
- run: npm install
47-
- run: npm install --save-dev eslint@7
44+
node-version: "lts/*"
45+
- run: npm install --force # ts-eslint does not support eslint v9 yet.
46+
- run: npm install --save-dev eslint@8
4847
- run: npm test
4948

49+
test-remote:
50+
name: eslint-remote-tester
51+
runs-on: ubuntu-latest
52+
steps:
53+
- uses: actions/checkout@v4
54+
- uses: actions/setup-node@v4
55+
with:
56+
node-version: "lts/*"
57+
- run: npm install --force # ts-eslint does not support eslint v9 yet.
58+
- run: npm install --save-dev eslint@8 # eslint-remote-tester does not support eslint v9.
59+
- run: npm run test:remote

Diff for: lib/rules/no-unused-placeholders.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,12 @@ module.exports = {
101101
const PLACEHOLDER_MATCHER = /{{\s*([^{}]+?)\s*}}/g;
102102
const placeholdersInMessage = new Set();
103103

104-
messageValue.replace(PLACEHOLDER_MATCHER, (fullMatch, term) => {
105-
placeholdersInMessage.add(term);
106-
});
104+
messageValue.replaceAll(
105+
PLACEHOLDER_MATCHER,
106+
(fullMatch, term) => {
107+
placeholdersInMessage.add(term);
108+
}
109+
);
107110

108111
data.properties.forEach((prop) => {
109112
const key = utils.getKeyName(prop);

Diff for: lib/rules/require-meta-docs-url.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ module.exports = {
6262
const expectedUrl =
6363
!options.pattern || !ruleName
6464
? undefined
65-
: options.pattern.replace(/{{\s*name\s*}}/g, ruleName);
65+
: options.pattern.replaceAll(/{{\s*name\s*}}/g, ruleName);
6666

6767
/**
6868
* Check whether a given URL is the expected URL.

Diff for: lib/utils.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -719,7 +719,7 @@ module.exports = {
719719
return fixer.replaceText(node, `{\n${propertyText}\n}`);
720720
}
721721
return fixer.insertTextAfter(
722-
sourceCode.getLastToken(node.properties[node.properties.length - 1]),
722+
sourceCode.getLastToken(node.properties.at(-1)),
723723
`,\n${propertyText}`
724724
);
725725
},

Diff for: package.json

+14-14
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
"lint:js": "eslint --cache --ignore-pattern \"**/*.md\" .",
1818
"lint:js-docs": "eslint --no-inline-config \"**/*.md\"",
1919
"lint:package-json": "npmPkgJsonLint .",
20-
"lint:remote": "eslint-remote-tester",
2120
"release": "release-it",
2221
"test": "nyc --all --check-coverage --include lib mocha tests --recursive",
22+
"test:remote": "eslint-remote-tester",
2323
"update:eslint-docs": "eslint-doc-generator"
2424
},
2525
"files": [
@@ -52,29 +52,29 @@
5252
"devDependencies": {
5353
"@commitlint/cli": "^17.1.2",
5454
"@commitlint/config-conventional": "^17.1.0",
55-
"@eslint/eslintrc": "^2.0.2",
56-
"@eslint/js": "^8.57.0",
55+
"@eslint/eslintrc": "^3.0.2",
56+
"@eslint/js": "^9.0.0",
5757
"@release-it/conventional-changelog": "^4.3.0",
58-
"@types/eslint": "^8.56.6",
58+
"@types/eslint": "^8.56.7",
5959
"@types/estree": "^1.0.5",
60-
"@typescript-eslint/parser": "^5.62.0",
61-
"@typescript-eslint/utils": "^5.62.0",
60+
"@typescript-eslint/parser": "^7.5.0",
61+
"@typescript-eslint/utils": "^7.5.0",
6262
"chai": "^4.3.6",
6363
"dirty-chai": "^2.0.1",
64-
"eslint": "^8.57.0",
64+
"eslint": "^9.0.0",
6565
"eslint-config-not-an-aardvark": "^2.1.0",
6666
"eslint-config-prettier": "^8.5.0",
6767
"eslint-doc-generator": "^1.7.0",
6868
"eslint-plugin-eslint-comments": "^3.2.0",
6969
"eslint-plugin-eslint-plugin": "file:./",
7070
"eslint-plugin-markdown": "^3.0.0",
71-
"eslint-plugin-n": "^16.6.2",
71+
"eslint-plugin-n": "^17.0.0",
7272
"eslint-plugin-prettier": "^4.2.1",
73-
"eslint-plugin-unicorn": "^46.0.0",
73+
"eslint-plugin-unicorn": "^52.0.0",
7474
"eslint-remote-tester": "^3.0.1",
75-
"eslint-scope": "^7.1.1",
76-
"espree": "^9.4.0",
77-
"globals": "^13.20.0",
75+
"eslint-scope": "^8.0.1",
76+
"espree": "^10.0.1",
77+
"globals": "^15.0.0",
7878
"husky": "^8.0.1",
7979
"lodash": "^4.17.21",
8080
"markdownlint-cli": "^0.39.0",
@@ -87,10 +87,10 @@
8787
"typescript": "^5.4.3"
8888
},
8989
"peerDependencies": {
90-
"eslint": ">=7.0.0"
90+
"eslint": ">=8.23.0"
9191
},
9292
"engines": {
93-
"node": "^14.17.0 || ^16.0.0 || >= 18.0.0"
93+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
9494
},
9595
"release-it": {
9696
"git": {

Diff for: tests/lib/eslint-rule-tester.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* @fileoverview Helpers for tests.
3+
* @author 唯然<[email protected]>
4+
*/
5+
6+
'use strict';
7+
8+
const eslintVersion = require('eslint/package.json').version;
9+
const { RuleTester } = require('eslint');
10+
const { FlatRuleTester } = require('eslint/use-at-your-own-risk');
11+
12+
// greater than or equal to ESLint v9
13+
exports.gteEslintV9 = +eslintVersion.split('.')[0] >= 9;
14+
15+
exports.RuleTester = exports.gteEslintV9 ? RuleTester : FlatRuleTester;

Diff for: tests/lib/rules/consistent-output.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,17 @@
1010
// ------------------------------------------------------------------------------
1111

1212
const rule = require('../../../lib/rules/consistent-output');
13-
const RuleTester = require('eslint').RuleTester;
13+
const RuleTester = require('../eslint-rule-tester').RuleTester;
1414

1515
const ERROR = { messageId: 'missingOutput', type: 'ObjectExpression' };
1616

1717
// ------------------------------------------------------------------------------
1818
// Tests
1919
// ------------------------------------------------------------------------------
2020

21-
const ruleTester = new RuleTester();
21+
const ruleTester = new RuleTester({
22+
languageOptions: { sourceType: 'commonjs' },
23+
});
2224
ruleTester.run('consistent-output', rule, {
2325
valid: [
2426
`

Diff for: tests/lib/rules/fixer-return.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
// ------------------------------------------------------------------------------
1111

1212
const rule = require('../../../lib/rules/fixer-return');
13-
const RuleTester = require('eslint').RuleTester;
13+
const RuleTester = require('../eslint-rule-tester').RuleTester;
1414

1515
// ------------------------------------------------------------------------------
1616
// Tests
1717
// ------------------------------------------------------------------------------
1818

19-
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
19+
const ruleTester = new RuleTester({
20+
languageOptions: { sourceType: 'commonjs' },
21+
});
2022
ruleTester.run('fixer-return', rule, {
2123
valid: [
2224
`

Diff for: tests/lib/rules/meta-property-ordering.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
// ------------------------------------------------------------------------------
1010

1111
const rule = require('../../../lib/rules/meta-property-ordering');
12-
const RuleTester = require('eslint').RuleTester;
12+
const RuleTester = require('../eslint-rule-tester').RuleTester;
1313

1414
// ------------------------------------------------------------------------------
1515
// Tests
1616
// ------------------------------------------------------------------------------
1717

18-
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
18+
const ruleTester = new RuleTester({
19+
languageOptions: { sourceType: 'commonjs' },
20+
});
1921
ruleTester.run('test-case-property-ordering', rule, {
2022
valid: [
2123
`
@@ -31,7 +33,7 @@ ruleTester.run('test-case-property-ordering', rule, {
3133
meta: {type, docs, fixable, schema, messages},
3234
create() {},
3335
};`,
34-
parserOptions: { sourceType: 'module' },
36+
languageOptions: { sourceType: 'module' },
3537
},
3638

3739
`
@@ -124,13 +126,13 @@ ruleTester.run('test-case-property-ordering', rule, {
124126
},
125127
create() {},
126128
};`,
127-
parserOptions: { sourceType: 'module' },
128129
errors: [
129130
{
130131
messageId: 'inconsistentOrder',
131132
data: { order: ['type', 'docs', 'fixable'].join(', ') },
132133
},
133134
],
135+
languageOptions: { sourceType: 'module' },
134136
},
135137
{
136138
code: `

Diff for: tests/lib/rules/no-deprecated-context-methods.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
// ------------------------------------------------------------------------------
1111

1212
const rule = require('../../../lib/rules/no-deprecated-context-methods');
13-
const RuleTester = require('eslint').RuleTester;
13+
const RuleTester = require('../eslint-rule-tester').RuleTester;
1414

1515
// ------------------------------------------------------------------------------
1616
// Tests
1717
// ------------------------------------------------------------------------------
1818

19-
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
19+
const ruleTester = new RuleTester({
20+
languageOptions: { sourceType: 'commonjs' },
21+
});
2022
ruleTester.run('no-deprecated-context-methods', rule, {
2123
valid: [
2224
`

Diff for: tests/lib/rules/no-deprecated-report-api.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
// ------------------------------------------------------------------------------
1111

1212
const rule = require('../../../lib/rules/no-deprecated-report-api');
13-
const RuleTester = require('eslint').RuleTester;
13+
const RuleTester = require('../eslint-rule-tester').RuleTester;
1414

1515
// ------------------------------------------------------------------------------
1616
// Tests
1717
// ------------------------------------------------------------------------------
1818

19-
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
19+
const ruleTester = new RuleTester({
20+
languageOptions: { sourceType: 'commonjs' },
21+
});
2022
ruleTester.run('no-deprecated-report-api', rule, {
2123
valid: [
2224
`

Diff for: tests/lib/rules/no-identical-tests.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// ------------------------------------------------------------------------------
1111

1212
const rule = require('../../../lib/rules/no-identical-tests');
13-
const RuleTester = require('eslint').RuleTester;
13+
const RuleTester = require('../eslint-rule-tester').RuleTester;
1414

1515
const ERROR_OBJECT_TEST = { messageId: 'identical', type: 'ObjectExpression' };
1616
const ERROR_STRING_TEST = { messageId: 'identical', type: 'Literal' };
@@ -19,7 +19,9 @@ const ERROR_STRING_TEST = { messageId: 'identical', type: 'Literal' };
1919
// Tests
2020
// ------------------------------------------------------------------------------
2121

22-
const ruleTester = new RuleTester();
22+
const ruleTester = new RuleTester({
23+
languageOptions: { sourceType: 'commonjs' },
24+
});
2325
ruleTester.run('no-identical-tests', rule, {
2426
valid: [
2527
`
@@ -232,8 +234,8 @@ ruleTester.run('no-identical-tests', rule, {
232234
});
233235
}
234236
`,
235-
parserOptions: { ecmaVersion: 2015 },
236237
errors: [{ messageId: 'identical', type: 'TemplateLiteral' }],
238+
languageOptions: { ecmaVersion: 2015 },
237239
},
238240
],
239241
});

Diff for: tests/lib/rules/no-missing-message-ids.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
// ------------------------------------------------------------------------------
66

77
const rule = require('../../../lib/rules/no-missing-message-ids');
8-
const RuleTester = require('eslint').RuleTester;
8+
const RuleTester = require('../eslint-rule-tester').RuleTester;
99

1010
// ------------------------------------------------------------------------------
1111
// Tests
1212
// ------------------------------------------------------------------------------
1313

14-
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 9 } });
14+
const ruleTester = new RuleTester({
15+
languageOptions: { sourceType: 'commonjs' },
16+
});
1517

1618
ruleTester.run('no-missing-message-ids', rule, {
1719
valid: [
@@ -75,7 +77,7 @@ ruleTester.run('no-missing-message-ids', rule, {
7577
}
7678
};
7779
`,
78-
parserOptions: { sourceType: 'module' },
80+
languageOptions: { sourceType: 'module' },
7981
},
8082
// unrelated function 1
8183
`
@@ -321,14 +323,14 @@ ruleTester.run('no-missing-message-ids', rule, {
321323
}
322324
};
323325
`,
324-
parserOptions: { sourceType: 'module' },
325326
errors: [
326327
{
327328
messageId: 'missingMessage',
328329
data: { messageId: 'foo' },
329330
type: 'Literal',
330331
},
331332
],
333+
languageOptions: { sourceType: 'module' },
332334
},
333335
{
334336
// Helper function with messageId parameter, inside rule, with missing messageId due to parameter reassignment.

Diff for: tests/lib/rules/no-missing-placeholders.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// ------------------------------------------------------------------------------
1111

1212
const rule = require('../../../lib/rules/no-missing-placeholders');
13-
const RuleTester = require('eslint').RuleTester;
13+
const RuleTester = require('../eslint-rule-tester').RuleTester;
1414

1515
/**
1616
* Create an error for the given key
@@ -29,7 +29,9 @@ function error(missingKey, type, extra) {
2929
// Tests
3030
// ------------------------------------------------------------------------------
3131

32-
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
32+
const ruleTester = new RuleTester({
33+
languageOptions: { sourceType: 'commonjs' },
34+
});
3335
ruleTester.run('no-missing-placeholders', rule, {
3436
valid: [
3537
`

0 commit comments

Comments
 (0)