Skip to content

Commit d0d5d90

Browse files
MichaelDeBoeyljharb
andcommitted
[New] support eslint 8.x
Co-authored-by: Michaël De Boey <info@michaeldeboey.be> Co-authored-by: Jordan Harband <ljharb@gmail.com>
1 parent 12f33f6 commit d0d5d90

File tree

10 files changed

+53
-21
lines changed

10 files changed

+53
-21
lines changed

.github/workflows/node-4+.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ jobs:
2626
matrix:
2727
node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
2828
eslint:
29+
- 8
2930
- 7
3031
- 6
3132
- 5
@@ -45,24 +46,46 @@ jobs:
4546
babel-eslint: 10
4647
- node-version: 4
4748
babel-eslint: 9
49+
- node-version: 15
50+
eslint: 8
51+
- node-version: 13
52+
eslint: 8
53+
- node-version: 11
54+
eslint: 8
55+
- node-version: 11
56+
eslint: 7
57+
- node-version: 10
58+
eslint: 8
59+
- node-version: 9
60+
eslint: 8
4861
- node-version: 9
4962
eslint: 7
63+
- node-version: 8
64+
eslint: 8
5065
- node-version: 8
5166
eslint: 7
67+
- node-version: 7
68+
eslint: 8
5269
- node-version: 7
5370
eslint: 7
5471
- node-version: 7
5572
eslint: 6
73+
- node-version: 6
74+
eslint: 8
5675
- node-version: 6
5776
eslint: 7
5877
- node-version: 6
5978
eslint: 6
79+
- node-version: 5
80+
eslint: 8
6081
- node-version: 5
6182
eslint: 7
6283
- node-version: 5
6384
eslint: 6
6485
- node-version: 5
6586
eslint: 5
87+
- node-version: 4
88+
eslint: 8
6689
- node-version: 4
6790
eslint: 7
6891
- node-version: 4

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
"@typescript-eslint/parser": "^2.34.0 || ^3.10.1 || ^4.0.0 || ^5.0.0",
5757
"aud": "^1.1.5",
5858
"babel-eslint": "^8 || ^9 || ^10.1.0",
59-
"eslint": "^3 || ^4 || ^5 || ^6 || ^7",
59+
"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8",
6060
"eslint-config-airbnb-base": "^14.2.1",
6161
"eslint-plugin-eslint-plugin": "^2.3.0 || ^3.5.3 || ^4.0.1",
6262
"eslint-plugin-import": "^2.25.2",
@@ -72,7 +72,7 @@
7272
"typescript-eslint-parser": "^20.1.1"
7373
},
7474
"peerDependencies": {
75-
"eslint": "^3 || ^4 || ^5 || ^6 || ^7"
75+
"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
7676
},
7777
"engines": {
7878
"node": ">=4"

tests/helpers/getESLintCoreRule.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
'use strict';
2+
3+
const version = require('eslint/package.json').version;
4+
const semver = require('semver');
5+
6+
const isESLintV8 = semver.major(version) >= 8;
7+
8+
// eslint-disable-next-line global-require, import/no-dynamic-require, import/no-unresolved
9+
const getESLintCoreRule = (ruleId) => (isESLintV8 ? require('eslint/use-at-your-own-risk').builtinRules.get(ruleId) : require(`eslint/lib/rules/${ruleId}`));
10+
11+
module.exports = getESLintCoreRule;

tests/helpers/parsers.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ const parsers = {
5656
const es = test.parserOptions && test.parserOptions.ecmaVersion;
5757

5858
function addComment(testObject, parser) {
59-
const extraComment = `\n// features: [${Array.from(features).join(',')}], parser: ${parser}, parserOptions: ${testObject.parserOptions}`;
59+
const extraComment = `\n// features: [${Array.from(features).join(',')}], parser: ${parser}, parserOptions: ${JSON.stringify(testObject.parserOptions)}`;
6060
return Object.assign(
6161
{},
6262
testObject,
@@ -94,7 +94,14 @@ const parsers = {
9494
const tsNew = !skipTS && !features.has('no-ts-new');
9595

9696
return [].concat(
97-
skipBase ? [] : addComment(test, 'default'),
97+
skipBase ? [] : addComment(
98+
Object.assign({}, test, features.has('class fields') && {
99+
parserOptions: Object.assign({}, test.parserOptions, {
100+
ecmaVersion: Math.max((test.parserOptions && test.parserOptions.ecmaVersion) || 0, 2022),
101+
}),
102+
}),
103+
'default'
104+
),
98105
skipOldBabel ? [] : addComment(Object.assign({}, test, { parser: parsers.BABEL_ESLINT }), 'babel-eslint'),
99106
skipNewBabel ? [] : addComment(Object.assign({}, test, {
100107
parser: parsers['@BABEL_ESLINT'],

tests/lib/rules/destructuring-assignment.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,6 @@ ruleTester.run('destructuring-assignment', rule, {
596596
);
597597
};
598598
`,
599-
parser: parsers.BABEL_ESLINT,
600599
errors: [
601600
{
602601
messageId: 'useDestructAssignment',

tests/lib/rules/jsx-no-undef.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ const parserOptions = {
2929
// -----------------------------------------------------------------------------
3030

3131
const ruleTester = new RuleTester({ parserOptions });
32-
const linter = ruleTester.linter || eslint.linter;
33-
linter.defineRule('no-undef', require('eslint/lib/rules/no-undef'));
32+
const linter = ruleTester.linter || eslint.linter || eslint.Linter;
33+
linter.defineRule('no-undef', require('../../helpers/getESLintCoreRule')('no-undef'));
3434

3535
ruleTester.run('jsx-no-undef', rule, {
3636
valid: parsers.all([

tests/lib/rules/jsx-no-useless-fragment.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,10 @@
88
// Requirements
99
// -----------------------------------------------------------------------------
1010

11-
const eslint = require('eslint');
11+
const RuleTester = require('eslint').RuleTester;
1212
const rule = require('../../../lib/rules/jsx-no-useless-fragment');
1313
const parsers = require('../../helpers/parsers');
1414

15-
const RuleTester = eslint.RuleTester;
16-
1715
const parserOptions = {
1816
ecmaVersion: 2018,
1917
ecmaFeatures: {

tests/lib/rules/jsx-uses-react.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// -----------------------------------------------------------------------------
1111

1212
const eslint = require('eslint');
13-
const rule = require('eslint/lib/rules/no-unused-vars');
13+
const rule = require('../../helpers/getESLintCoreRule')('no-unused-vars');
1414

1515
const RuleTester = eslint.RuleTester;
1616

@@ -35,7 +35,7 @@ const settings = {
3535
// -----------------------------------------------------------------------------
3636

3737
const ruleTester = new RuleTester({ parserOptions });
38-
const linter = ruleTester.linter || eslint.linter;
38+
const linter = ruleTester.linter || eslint.linter || eslint.Linter;
3939
linter.defineRule('jsx-uses-react', require('../../../lib/rules/jsx-uses-react'));
4040

4141
ruleTester.run('no-unused-vars', rule, {

tests/lib/rules/jsx-uses-vars.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
// -----------------------------------------------------------------------------
1111

1212
const eslint = require('eslint');
13-
const ruleNoUnusedVars = require('eslint/lib/rules/no-unused-vars');
14-
const rulePreferConst = require('eslint/lib/rules/prefer-const');
13+
const ruleNoUnusedVars = require('../../helpers/getESLintCoreRule')('no-unused-vars');
14+
const rulePreferConst = require('../../helpers/getESLintCoreRule')('prefer-const');
1515

1616
const RuleTester = eslint.RuleTester;
1717

@@ -30,7 +30,7 @@ const parserOptions = {
3030
// -----------------------------------------------------------------------------
3131

3232
const ruleTester = new RuleTester({ parserOptions });
33-
const linter = ruleTester.linter || eslint.linter;
33+
const linter = ruleTester.linter || eslint.linter || eslint.Linter;
3434
linter.defineRule('jsx-uses-vars', require('../../../lib/rules/jsx-uses-vars'));
3535

3636
ruleTester.run('no-unused-vars', ruleNoUnusedVars, {

tests/lib/rules/no-unused-prop-types.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -234,9 +234,6 @@ ruleTester.run('no-unused-prop-types', rule, {
234234
}
235235
`,
236236
features: ['class fields', 'optional chaining'],
237-
parserOptions: {
238-
ecmaVersion: 2020,
239-
},
240237
},
241238
{
242239
code: `
@@ -775,9 +772,6 @@ ruleTester.run('no-unused-prop-types', rule, {
775772
}
776773
`,
777774
features: ['class fields', 'optional chaining'],
778-
parserOptions: {
779-
ecmaVersion: 2020,
780-
},
781775
},
782776
{
783777
code: `

0 commit comments

Comments
 (0)