Skip to content

Commit a13fd24

Browse files
committed
refactor: provide a baseconfig object to extend legacy and flat configs
1 parent 6d3360f commit a13fd24

File tree

3 files changed

+96
-148
lines changed

3 files changed

+96
-148
lines changed

base.js

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// Note: Base config used for building both the legacy and flat configs.
2+
// It is not a valid ESLint config.
3+
4+
const baseConfig = {
5+
ecmaVersion: 2019,
6+
sourceType: "module",
7+
parserOptions: {
8+
ecmaFeatures: {
9+
jsx: true,
10+
},
11+
},
12+
rules: {
13+
curly: "error",
14+
"dot-notation": "off",
15+
"eol-last": "error",
16+
eqeqeq: ["error", "always", { null: "ignore" }],
17+
"guard-for-in": "off",
18+
"jsdoc/check-alignment": "error",
19+
"new-parens": "error",
20+
"no-array-constructor": "error",
21+
"no-bitwise": "off",
22+
"no-caller": "error",
23+
"no-cond-assign": "error",
24+
"no-console": ["error", { allow: ["error", "log", "warn", "info"] }],
25+
"no-debugger": "error",
26+
"no-empty": "off",
27+
"no-eval": "error",
28+
"no-fallthrough": "off",
29+
"no-new-wrappers": "error",
30+
"no-redeclare": "error",
31+
"no-restricted-imports": ["error", "moment"],
32+
"no-shadow": "off",
33+
"no-unused-expressions": "off",
34+
"no-unused-labels": "error",
35+
"no-var": "error",
36+
radix: "error",
37+
"sort-keys": "off",
38+
"spaced-comment": ["off", "always"],
39+
"use-isnan": "error",
40+
"no-duplicate-imports": "error",
41+
"@typescript-eslint/no-unused-expressions": [
42+
"error",
43+
{ allowShortCircuit: true, allowTernary: true },
44+
],
45+
"@typescript-eslint/array-type": ["error", { default: "array-simple" }],
46+
"@typescript-eslint/naming-convention": [
47+
"error",
48+
{
49+
selector: "interface",
50+
format: ["PascalCase"],
51+
custom: {
52+
regex: "^I[A-Z]",
53+
match: false,
54+
},
55+
},
56+
],
57+
"@typescript-eslint/consistent-type-assertions": "error",
58+
"@typescript-eslint/no-inferrable-types": "error",
59+
"@typescript-eslint/no-namespace": ["error", { allowDeclarations: false }],
60+
"@typescript-eslint/no-unused-vars": "off",
61+
"@typescript-eslint/no-use-before-define": "off",
62+
"@typescript-eslint/triple-slash-reference": "error",
63+
"@stylistic/ts/type-annotation-spacing": [
64+
"error",
65+
{
66+
after: true,
67+
before: false,
68+
overrides: {
69+
arrow: { after: true, before: true },
70+
},
71+
},
72+
],
73+
"react-hooks/exhaustive-deps": "error",
74+
},
75+
settings: {
76+
react: {
77+
version: "detect",
78+
},
79+
},
80+
};
81+
82+
module.exports = baseConfig;

flat.js

Lines changed: 7 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ const typescriptParser = require("@typescript-eslint/parser");
66
const prettierConfig = require("eslint-config-prettier");
77
const stylisticTs = require("@stylistic/eslint-plugin-ts");
88

9+
const baseConfig = require("./base");
10+
911
/**
1012
* @type {Array<import('eslint').Linter.Config>}
1113
*/
@@ -14,11 +16,7 @@ module.exports = {
1416
...reactHooksPlugin.configs.recommended,
1517
...reactPlugin.configs.flat.recommended,
1618
...prettierConfig,
17-
settings: {
18-
react: {
19-
version: "detect",
20-
},
21-
},
19+
settings: baseConfig.settings,
2220
plugins: {
2321
jsdoc,
2422
"@typescript-eslint": tsPlugin,
@@ -27,75 +25,9 @@ module.exports = {
2725
},
2826
languageOptions: {
2927
parser: typescriptParser,
30-
ecmaVersion: 2019,
31-
sourceType: "module",
32-
parserOptions: {
33-
ecmaFeatures: {
34-
jsx: true,
35-
},
36-
},
37-
},
38-
rules: {
39-
curly: "error",
40-
"dot-notation": "off",
41-
"eol-last": "error",
42-
eqeqeq: ["error", "always", { null: "ignore" }],
43-
"guard-for-in": "off",
44-
"jsdoc/check-alignment": "error",
45-
"new-parens": "error",
46-
"no-array-constructor": "error",
47-
"no-bitwise": "off",
48-
"no-caller": "error",
49-
"no-cond-assign": "error",
50-
"no-console": ["error", { allow: ["error", "log", "warn", "info"] }],
51-
"no-debugger": "error",
52-
"no-empty": "off",
53-
"no-eval": "error",
54-
"no-fallthrough": "off",
55-
"no-new-wrappers": "error",
56-
"no-redeclare": "error",
57-
"no-restricted-imports": ["error", "moment"],
58-
"no-shadow": "off",
59-
"no-unused-expressions": "off",
60-
"no-unused-labels": "error",
61-
"no-var": "error",
62-
radix: "error",
63-
"sort-keys": "off",
64-
"spaced-comment": ["off", "always"],
65-
"use-isnan": "error",
66-
"no-duplicate-imports": "error",
67-
"@typescript-eslint/no-unused-expressions": [
68-
"error",
69-
{ allowShortCircuit: true, allowTernary: true },
70-
],
71-
"@typescript-eslint/array-type": ["error", { default: "array-simple" }],
72-
"@typescript-eslint/naming-convention": [
73-
"error",
74-
{
75-
selector: "interface",
76-
format: ["PascalCase"],
77-
custom: {
78-
regex: "^I[A-Z]",
79-
match: false,
80-
},
81-
},
82-
],
83-
"@typescript-eslint/consistent-type-assertions": "error",
84-
"@typescript-eslint/no-inferrable-types": "error",
85-
"@typescript-eslint/no-namespace": ["error", { allowDeclarations: false }],
86-
"@typescript-eslint/no-unused-vars": "off",
87-
"@typescript-eslint/no-use-before-define": "off",
88-
"@typescript-eslint/triple-slash-reference": "error",
89-
"@stylistic/ts/type-annotation-spacing": [
90-
"error",
91-
{
92-
after: true,
93-
before: false,
94-
overrides: {
95-
arrow: { after: true, before: true },
96-
},
97-
},
98-
],
99-
"react-hooks/exhaustive-deps": "error",
28+
ecmaVersion: baseConfig.ecmaVersion,
29+
sourceType: baseConfig.sourceType,
30+
parserOptions: baseConfig.parserOptions,
10031
},
32+
rules: baseConfig.rules,
10133
};

index.js

Lines changed: 7 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,18 @@
1+
const baseConfig = require("./base");
2+
13
module.exports = {
24
parserOptions: {
3-
ecmaVersion: 2019,
4-
sourceType: "module",
5-
ecmaFeatures: {
6-
jsx: true,
7-
},
8-
},
9-
settings: {
10-
react: {
11-
version: "detect",
12-
},
5+
ecmaVersion: baseConfig.ecmaVersion,
6+
sourceType: baseConfig.sourceType,
7+
...baseConfig.parserOptions,
138
},
9+
settings: baseConfig.settings,
1410
plugins: ["jsdoc", "@typescript-eslint", "@stylistic/ts", "react-hooks"],
1511
extends: [
1612
"plugin:react-hooks/recommended",
1713
"plugin:react/recommended",
1814
"prettier",
1915
],
2016
parser: "@typescript-eslint/parser",
21-
rules: {
22-
curly: "error",
23-
"dot-notation": "off",
24-
"eol-last": "error",
25-
eqeqeq: ["error", "always", { null: "ignore" }],
26-
"guard-for-in": "off",
27-
"jsdoc/check-alignment": "error",
28-
"new-parens": "error",
29-
"no-array-constructor": "error",
30-
"no-bitwise": "off",
31-
"no-caller": "error",
32-
"no-cond-assign": "error",
33-
"no-console": ["error", { allow: ["error", "log", "warn", "info"] }],
34-
"no-debugger": "error",
35-
"no-empty": "off",
36-
"no-eval": "error",
37-
"no-fallthrough": "off",
38-
"no-new-wrappers": "error",
39-
"no-redeclare": "error",
40-
"no-restricted-imports": ["error", "moment"],
41-
"no-shadow": "off",
42-
"no-unused-expressions": "off",
43-
"no-unused-labels": "error",
44-
"no-var": "error",
45-
radix: "error",
46-
"sort-keys": "off",
47-
"spaced-comment": ["off", "always"],
48-
"use-isnan": "error",
49-
"no-duplicate-imports": "error",
50-
"@typescript-eslint/no-unused-expressions": [
51-
"error",
52-
{ allowShortCircuit: true, allowTernary: true },
53-
],
54-
"@typescript-eslint/array-type": ["error", { default: "array-simple" }],
55-
"@typescript-eslint/naming-convention": [
56-
"error",
57-
{
58-
selector: "interface",
59-
format: ["PascalCase"],
60-
custom: {
61-
regex: "^I[A-Z]",
62-
match: false,
63-
},
64-
},
65-
],
66-
"@typescript-eslint/consistent-type-assertions": "error",
67-
"@typescript-eslint/no-inferrable-types": "error",
68-
"@typescript-eslint/no-namespace": ["error", { allowDeclarations: false }],
69-
"@typescript-eslint/no-unused-vars": "off",
70-
"@typescript-eslint/no-use-before-define": "off",
71-
"@typescript-eslint/triple-slash-reference": "error",
72-
"@stylistic/ts/type-annotation-spacing": [
73-
"error",
74-
{
75-
after: true,
76-
before: false,
77-
overrides: {
78-
arrow: { after: true, before: true },
79-
},
80-
},
81-
],
82-
"react-hooks/exhaustive-deps": "error",
83-
},
17+
rules: baseConfig.rules,
8418
};

0 commit comments

Comments
 (0)