Skip to content

Commit 9e12d2b

Browse files
MichaelDeBoeyljharb
andcommitted
[New] support eslint 8.x
Co-authored-by: Michaël De Boey <[email protected]> Co-authored-by: Jordan Harband <[email protected]>
1 parent c3c97e3 commit 9e12d2b

11 files changed

+54
-22
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

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ This change log adheres to standards from [Keep a CHANGELOG](http://keepachangel
66
## Unreleased
77

88
### Added
9+
* support eslint 8.x ([#3059][] @MichaelDeBoey @ljharb)
910
* [`no-unused-class-component-methods`]: Handle unused class component methods ([#2166][] @jakeleventhal @pawelnvk)
1011
* add [`no-arrow-function-lifecycle`] ([#1980][] @ngtan)
1112
* add support for `@typescript-eslint/parser` v5 (@ljharb)
@@ -37,6 +38,7 @@ This change log adheres to standards from [Keep a CHANGELOG](http://keepachangel
3738
[#3110]: https://github.com/yannickcr/eslint-plugin-react/pull/3110
3839
[#3102]: https://github.com/yannickcr/eslint-plugin-react/issue/3102
3940
[#3092]: https://github.com/yannickcr/eslint-plugin-react/pull/3092
41+
[#3059]: https://github.com/yannickcr/eslint-plugin-react/pull/3059
4042
[#2863]: https://github.com/yannickcr/eslint-plugin-react/pull/2863
4143
[#2166]: https://github.com/yannickcr/eslint-plugin-react/pull/2166
4244
[#1980]: https://github.com/yannickcr/eslint-plugin-react/pull/1980

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": "^15.0.0",
6161
"eslint-plugin-eslint-plugin": "^2.3.0 || ^3.5.3 || ^4.0.1",
6262
"eslint-plugin-import": "^2.25.2",
@@ -73,7 +73,7 @@
7373
"typescript-eslint-parser": "^20.1.1"
7474
},
7575
"peerDependencies": {
76-
"eslint": "^3 || ^4 || ^5 || ^6 || ^7"
76+
"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
7777
},
7878
"engines": {
7979
"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: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,14 @@ const parsers = {
104104
const tsNew = !skipTS && !features.has('no-ts-new');
105105

106106
return [].concat(
107-
skipBase ? [] : addComment(test, 'default'),
107+
skipBase ? [] : addComment(
108+
Object.assign({}, test, features.has('class fields') && {
109+
parserOptions: Object.assign({}, test.parserOptions, {
110+
ecmaVersion: Math.max((test.parserOptions && test.parserOptions.ecmaVersion) || 0, 2022),
111+
}),
112+
}),
113+
'default'
114+
),
108115
skipOldBabel ? [] : addComment(Object.assign({}, test, {
109116
parser: parsers.BABEL_ESLINT,
110117
parserOptions: parsers.babelParserOptions(test, features),

tests/lib/rules/destructuring-assignment.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,6 @@ ruleTester.run('destructuring-assignment', rule, {
646646
);
647647
};
648648
`,
649-
parser: parsers.BABEL_ESLINT,
650649
errors: [
651650
{
652651
messageId: 'useDestructAssignment',
@@ -675,7 +674,6 @@ ruleTester.run('destructuring-assignment', rule, {
675674
},
676675
};
677676
`,
678-
parser: parsers.BABEL_ESLINT,
679677
errors: [
680678
{
681679
messageId: 'useDestructAssignment',
@@ -704,7 +702,6 @@ ruleTester.run('destructuring-assignment', rule, {
704702
};
705703
}
706704
`,
707-
parser: parsers.BABEL_ESLINT,
708705
errors: [
709706
{
710707
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)