Skip to content

Commit 31ef12a

Browse files
committed
[Fix] use same plugin instance in flat configs
1 parent 393bfa2 commit 31ef12a

File tree

4 files changed

+92
-96
lines changed

4 files changed

+92
-96
lines changed

configs/all.js

+5-41
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,13 @@
11
'use strict';
22

3-
const fromEntries = require('object.fromentries');
4-
const entries = require('object.entries');
3+
const plugin = require('../index');
54

6-
const allRules = require('../lib/rules');
7-
8-
function filterRules(rules, predicate) {
9-
return fromEntries(entries(rules).filter((entry) => predicate(entry[1])));
10-
}
11-
12-
/**
13-
* @param {object} rules - rules object mapping rule name to rule module
14-
* @returns {Record<string, 2>}
15-
*/
16-
function configureAsError(rules) {
17-
return fromEntries(Object.keys(rules).map((key) => [`react/${key}`, 2]));
18-
}
19-
20-
const activeRules = filterRules(allRules, (rule) => !rule.meta.deprecated);
21-
const activeRulesConfig = configureAsError(activeRules);
22-
23-
const deprecatedRules = filterRules(allRules, (rule) => rule.meta.deprecated);
5+
const legacyConfig = plugin.configs.all;
246

257
module.exports = {
26-
plugins: {
27-
/**
28-
* @type {{
29-
* deprecatedRules: Record<string, import('eslint').Rule.RuleModule>,
30-
* rules: Record<string, import('eslint').Rule.RuleModule>,
31-
* }}
32-
*/
33-
react: {
34-
deprecatedRules,
35-
rules: allRules,
36-
},
37-
},
38-
rules: activeRulesConfig,
39-
languageOptions: {
40-
parserOptions: {
41-
ecmaFeatures: {
42-
jsx: true,
43-
},
44-
},
45-
},
8+
plugins: { react: plugin },
9+
rules: legacyConfig.rules,
10+
languageOptions: { parserOptions: legacyConfig.parserOptions },
4611
};
4712

48-
// this is so the `languageOptions` property won't be warned in the new config system
4913
Object.defineProperty(module.exports, 'languageOptions', { enumerable: false });

configs/jsx-runtime.js

+8-13
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
'use strict';
22

3-
const all = require('./all');
3+
const plugin = require('../index');
44

5-
module.exports = Object.assign({}, all, {
6-
languageOptions: Object.assign({}, all.languageOptions, {
7-
parserOptions: Object.assign({}, all.languageOptions.parserOptions, {
8-
jsxPragma: null, // for @typescript/eslint-parser
9-
}),
10-
}),
11-
rules: {
12-
'react/react-in-jsx-scope': 0,
13-
'react/jsx-uses-react': 0,
14-
},
15-
});
5+
const legacyConfig = plugin.configs['jsx-runtime'];
6+
7+
module.exports = {
8+
plugins: { react: plugin },
9+
rules: legacyConfig.rules,
10+
languageOptions: { parserOptions: legacyConfig.parserOptions },
11+
};
1612

17-
// this is so the `languageOptions` property won't be warned in the new config system
1813
Object.defineProperty(module.exports, 'languageOptions', { enumerable: false });

configs/recommended.js

+8-29
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,13 @@
11
'use strict';
22

3-
const all = require('./all');
3+
const plugin = require('../index');
44

5-
module.exports = Object.assign({}, all, {
6-
languageOptions: all.languageOptions,
7-
rules: {
8-
'react/display-name': 2,
9-
'react/jsx-key': 2,
10-
'react/jsx-no-comment-textnodes': 2,
11-
'react/jsx-no-duplicate-props': 2,
12-
'react/jsx-no-target-blank': 2,
13-
'react/jsx-no-undef': 2,
14-
'react/jsx-uses-react': 2,
15-
'react/jsx-uses-vars': 2,
16-
'react/no-children-prop': 2,
17-
'react/no-danger-with-children': 2,
18-
'react/no-deprecated': 2,
19-
'react/no-direct-mutation-state': 2,
20-
'react/no-find-dom-node': 2,
21-
'react/no-is-mounted': 2,
22-
'react/no-render-return-value': 2,
23-
'react/no-string-refs': 2,
24-
'react/no-unescaped-entities': 2,
25-
'react/no-unknown-property': 2,
26-
'react/no-unsafe': 0,
27-
'react/prop-types': 2,
28-
'react/react-in-jsx-scope': 2,
29-
'react/require-render-return': 2,
30-
},
31-
});
5+
const legacyConfig = plugin.configs.recommended;
6+
7+
module.exports = {
8+
plugins: { react: plugin },
9+
rules: legacyConfig.rules,
10+
languageOptions: { parserOptions: legacyConfig.parserOptions },
11+
};
3212

33-
// this is so the `languageOptions` property won't be warned in the new config system
3413
Object.defineProperty(module.exports, 'languageOptions', { enumerable: false });

index.js

+71-13
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,89 @@
11
'use strict';
22

3-
const configAll = require('./configs/all');
4-
const configRecommended = require('./configs/recommended');
5-
const configRuntime = require('./configs/jsx-runtime');
3+
const fromEntries = require('object.fromentries');
4+
const entries = require('object.entries');
65

76
const allRules = require('./lib/rules');
87

8+
function filterRules(rules, predicate) {
9+
return fromEntries(entries(rules).filter((entry) => predicate(entry[1])));
10+
}
11+
12+
/**
13+
* @param {object} rules - rules object mapping rule name to rule module
14+
* @returns {Record<string, 2>}
15+
*/
16+
function configureAsError(rules) {
17+
return fromEntries(Object.keys(rules).map((key) => [`react/${key}`, 2]));
18+
}
19+
20+
const activeRules = filterRules(allRules, (rule) => !rule.meta.deprecated);
21+
const activeRulesConfig = configureAsError(activeRules);
22+
23+
const deprecatedRules = filterRules(allRules, (rule) => rule.meta.deprecated);
24+
925
// for legacy config system
1026
const plugins = [
1127
'react',
1228
];
1329

1430
module.exports = {
15-
deprecatedRules: configAll.plugins.react.deprecatedRules,
31+
deprecatedRules,
1632
rules: allRules,
1733
configs: {
18-
recommended: Object.assign({}, configRecommended, {
19-
parserOptions: configRecommended.languageOptions.parserOptions,
34+
recommended: {
2035
plugins,
21-
}),
22-
all: Object.assign({}, configAll, {
23-
parserOptions: configAll.languageOptions.parserOptions,
36+
parserOptions: {
37+
ecmaFeatures: {
38+
jsx: true,
39+
},
40+
},
41+
rules: {
42+
'react/display-name': 2,
43+
'react/jsx-key': 2,
44+
'react/jsx-no-comment-textnodes': 2,
45+
'react/jsx-no-duplicate-props': 2,
46+
'react/jsx-no-target-blank': 2,
47+
'react/jsx-no-undef': 2,
48+
'react/jsx-uses-react': 2,
49+
'react/jsx-uses-vars': 2,
50+
'react/no-children-prop': 2,
51+
'react/no-danger-with-children': 2,
52+
'react/no-deprecated': 2,
53+
'react/no-direct-mutation-state': 2,
54+
'react/no-find-dom-node': 2,
55+
'react/no-is-mounted': 2,
56+
'react/no-render-return-value': 2,
57+
'react/no-string-refs': 2,
58+
'react/no-unescaped-entities': 2,
59+
'react/no-unknown-property': 2,
60+
'react/no-unsafe': 0,
61+
'react/prop-types': 2,
62+
'react/react-in-jsx-scope': 2,
63+
'react/require-render-return': 2,
64+
},
65+
},
66+
all: {
2467
plugins,
25-
}),
26-
'jsx-runtime': Object.assign({}, configRuntime, {
27-
parserOptions: configRuntime.languageOptions.parserOptions,
68+
parserOptions: {
69+
ecmaFeatures: {
70+
jsx: true,
71+
},
72+
},
73+
rules: activeRulesConfig,
74+
},
75+
'jsx-runtime': {
2876
plugins,
29-
}),
77+
parserOptions: {
78+
ecmaFeatures: {
79+
jsx: true,
80+
},
81+
jsxPragma: null, // for @typescript/eslint-parser
82+
},
83+
rules: {
84+
'react/react-in-jsx-scope': 0,
85+
'react/jsx-uses-react': 0,
86+
},
87+
},
3088
},
3189
};

0 commit comments

Comments
 (0)