Skip to content

Commit ec24c1a

Browse files
committed
Adding support for eslint 9
1 parent 05aabc4 commit ec24c1a

File tree

11 files changed

+168
-26
lines changed

11 files changed

+168
-26
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const base = require('./flat');
2+
3+
module.exports = [
4+
...base,
5+
{ rules: { 'comma-dangle': 'off', 'max-len': 'off' } },
6+
{
7+
files: ['test/**'],
8+
rules: {
9+
'no-shadow': 'off',
10+
'id-length': ['error', { min: 2, properties: 'never', exceptions: ['t'] }],
11+
},
12+
},
13+
];
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const globals = require('globals');
2+
const importPlugin = require('eslint-plugin-import');
3+
4+
const bestPractices = require('./rules/best-practices');
5+
const errors = require('./rules/errors');
6+
const es6 = require('./rules/es6');
7+
const imports = require('./rules/imports');
8+
const node = require('./rules/node');
9+
const strict = require('./rules/strict');
10+
const style = require('./rules/style');
11+
const variables = require('./rules/variables');
12+
13+
module.exports = [
14+
{
15+
languageOptions: {
16+
ecmaVersion: 2018,
17+
sourceType: 'module',
18+
globals: {
19+
...globals.es2015,
20+
...globals.node,
21+
},
22+
parserOptions: {
23+
ecmaFeatures: {
24+
generators: false,
25+
objectLiteralDuplicateProperties: false,
26+
},
27+
},
28+
},
29+
plugins: {
30+
import: importPlugin,
31+
},
32+
settings: imports.settings,
33+
rules: {
34+
...bestPractices.rules,
35+
...errors.rules,
36+
...node.rules,
37+
...style.rules,
38+
...variables.rules,
39+
...es6.rules,
40+
...imports.rules,
41+
...strict.rules,
42+
},
43+
},
44+
];

packages/eslint-config-airbnb-base/package.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"./rules/imports": "./rules/imports.js",
1616
"./rules/strict": "./rules/strict.js",
1717
"./rules/variables": "./rules/variables.js",
18+
"./flat": "./flat.js",
1819
"./package.json": "./package.json"
1920
},
2021
"scripts": {
@@ -72,21 +73,22 @@
7273
"babel-preset-airbnb": "^4.5.0",
7374
"babel-tape-runner": "^3.0.0",
7475
"eclint": "^2.8.1",
75-
"eslint": "^7.32.0 || ^8.2.0",
76-
"eslint-find-rules": "^4.1.0",
76+
"eslint": "^7.32.0 || ^8.2.0 || ^9.0.0",
77+
"eslint-find-rules": "^5.0.0",
7778
"eslint-plugin-import": "^2.30.0",
7879
"in-publish": "^2.0.1",
7980
"safe-publish-latest": "^2.0.0",
8081
"tape": "^5.9.0"
8182
},
8283
"peerDependencies": {
83-
"eslint": "^7.32.0 || ^8.2.0",
84+
"eslint": "^7.32.0 || ^8.2.0 || ^9.0.0",
8485
"eslint-plugin-import": "^2.30.0"
8586
},
8687
"engines": {
8788
"node": "^10.12.0 || >=12.0.0"
8889
},
8990
"dependencies": {
90-
"confusing-browser-globals": "^1.0.11"
91+
"confusing-browser-globals": "^1.0.11",
92+
"globals": "^15.14.0"
9193
}
9294
}

packages/eslint-config-airbnb-base/whitespace-async.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ const { isArray } = Array;
44
const { entries } = Object;
55
const { ESLint } = require('eslint');
66

7-
const baseConfig = require('.');
7+
const isFlat = ESLint.configType === 'flat';
8+
const baseConfig = isFlat ? require('./flat') : require('.');
89
const whitespaceRules = require('./whitespaceRules');
910

1011
const severities = ['off', 'warn', 'error'];
@@ -20,11 +21,10 @@ function getSeverity(ruleConfig) {
2021
}
2122

2223
async function onlyErrorOnRules(rulesToError, config) {
23-
const errorsOnly = { ...config };
24-
const cli = new ESLint({
25-
useEslintrc: false,
26-
baseConfig: config
27-
});
24+
const errorsOnly = isFlat ? { rules: {} } : { ...config };
25+
const cli = isFlat
26+
? new ESLint({ overrideConfigFile: true, overrideConfig: config })
27+
: new ESLint({ useEslintrc: false, baseConfig: config });
2828
const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules;
2929

3030
entries(baseRules).forEach((rule) => {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const airbnb = require('./flat');
2+
3+
module.exports = [
4+
...airbnb,
5+
{ rules: { 'comma-dangle': 'off' } },
6+
{
7+
files: ['test/**'],
8+
rules: {
9+
'no-shadow': 'off',
10+
'id-length': ['error', { min: 2, properties: 'never', exceptions: ['t'] }],
11+
},
12+
},
13+
];
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('eslint-config-airbnb-base/flat');
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const reactHooksPlugin = require('eslint-plugin-react-hooks');
2+
3+
const reactHooks = require('./rules/react-hooks');
4+
5+
module.exports = [
6+
{
7+
plugins: {
8+
'react-hooks': reactHooksPlugin,
9+
},
10+
languageOptions: {
11+
parserOptions: {
12+
ecmaFeatures: {
13+
jsx: true,
14+
},
15+
},
16+
},
17+
rules: reactHooks.rules,
18+
},
19+
];
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
const reactPlugin = require('eslint-plugin-react');
2+
const jsxA11yPlugin = require('eslint-plugin-jsx-a11y');
3+
4+
const baseFlatConfig = require('eslint-config-airbnb-base/flat');
5+
6+
const react = require('./rules/react');
7+
const reactA11y = require('./rules/react-a11y');
8+
9+
module.exports = [
10+
...baseFlatConfig,
11+
{
12+
files: ['**/*.{js,jsx,mjs,cjs}'],
13+
plugins: {
14+
react: reactPlugin,
15+
'jsx-a11y': jsxA11yPlugin,
16+
},
17+
languageOptions: {
18+
parserOptions: {
19+
ecmaFeatures: {
20+
jsx: true,
21+
},
22+
},
23+
},
24+
settings: react.settings,
25+
rules: {
26+
...react.rules,
27+
...reactA11y.rules,
28+
},
29+
},
30+
];

packages/eslint-config-airbnb/package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
"./rules/react": "./rules/react.js",
1313
"./rules/react-a11y": "./rules/react-a11y.js",
1414
"./rules/react-hooks": "./rules/react-hooks.js",
15+
"./flat": "./flat.js",
16+
"./flat-base": "./flat-base.js",
17+
"./flat-hooks": "./flat-hooks.js",
1518
"./package.json": "./package.json"
1619
},
1720
"scripts": {
@@ -73,8 +76,8 @@
7376
"babel-preset-airbnb": "^4.5.0",
7477
"babel-tape-runner": "^3.0.0",
7578
"eclint": "^2.8.1",
76-
"eslint": "^7.32.0 || ^8.2.0",
77-
"eslint-find-rules": "^4.1.0",
79+
"eslint": "^7.32.0 || ^8.2.0 || ^9.0.0",
80+
"eslint-find-rules": "^5.0.0",
7881
"eslint-plugin-import": "^2.30.0",
7982
"eslint-plugin-jsx-a11y": "^6.10.0",
8083
"eslint-plugin-react": "^7.36.1",
@@ -85,7 +88,7 @@
8588
"tape": "^5.9.0"
8689
},
8790
"peerDependencies": {
88-
"eslint": "^7.32.0 || ^8.2.0",
91+
"eslint": "^7.32.0 || ^8.2.0 || ^9.0.0",
8992
"eslint-plugin-import": "^2.30.0",
9093
"eslint-plugin-jsx-a11y": "^6.10.0",
9194
"eslint-plugin-react": "^7.36.1",

packages/eslint-config-airbnb/test/test-react-order.js

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import eslintrc from '..';
44
import reactRules from '../rules/react';
55
import reactA11yRules from '../rules/react-a11y';
66

7+
const isFlat = ESLint.configType === 'flat';
8+
79
const rules = {
810
// It is okay to import devDependencies in tests.
911
'import/no-extraneous-dependencies': [2, { devDependencies: true }],
@@ -12,17 +14,32 @@ const rules = {
1214
// otherwise we need some junk in our fixture code
1315
'react/no-unused-class-component-methods': 0,
1416
};
15-
const cli = new (CLIEngine || ESLint)({
16-
useEslintrc: false,
17-
baseConfig: eslintrc,
18-
...(CLIEngine ? { rules } : { overrideConfig: { rules } }),
19-
});
17+
18+
function createCli() {
19+
if (isFlat) {
20+
// eslint-disable-next-line global-require
21+
const flatConfig = require('../flat');
22+
return new ESLint({
23+
overrideConfigFile: true,
24+
overrideConfig: [...flatConfig, { rules }],
25+
});
26+
}
27+
return new (CLIEngine || ESLint)({
28+
useEslintrc: false,
29+
baseConfig: eslintrc,
30+
...(CLIEngine ? { rules } : { overrideConfig: { rules } }),
31+
});
32+
}
33+
const cli = createCli();
2034

2135
async function lint(text) {
2236
// @see https://eslint.org/docs/developer-guide/nodejs-api.html#executeonfiles
2337
// @see https://eslint.org/docs/developer-guide/nodejs-api.html#executeontext
24-
const linter = CLIEngine ? cli.executeOnText(text) : await cli.lintText(text);
25-
return (CLIEngine ? linter.results : linter)[0];
38+
if (CLIEngine) {
39+
return cli.executeOnText(text).results[0];
40+
}
41+
const results = await cli.lintText(text, isFlat ? { filePath: 'test.jsx' } : undefined);
42+
return results[0];
2643
}
2744

2845
function wrapComponent(body) {

0 commit comments

Comments
 (0)