Skip to content

Commit 5989bab

Browse files
committed
feat: restrict all configs to their respective files
BREAKING CHANGE: typescript config not includes base one anymore
1 parent ba234cb commit 5989bab

File tree

8 files changed

+61
-26
lines changed

8 files changed

+61
-26
lines changed

configs/base.js

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,9 @@ import eslintPluginUnicorn from 'eslint-plugin-unicorn';
88

99
/** @typedef {import('eslint').Linter} Linter */
1010

11-
/** @type {Linter.Config[]} */
12-
const baseConfig = [
13-
js.configs.recommended,
14-
11+
export const importConfig = [
1512
importPlugin.flatConfigs.recommended,
1613
{
17-
files: ['**/*.{js,mjs,cjs}'],
1814
languageOptions: {
1915
ecmaVersion: 'latest',
2016
sourceType: 'module',
@@ -98,8 +94,27 @@ const baseConfig = [
9894
],
9995
},
10096
],
97+
98+
// disabled due to https://github.com/import-js/eslint-plugin-import/issues/3076
99+
'import/no-unresolved': 'off',
101100
},
102101
},
102+
];
103+
104+
/**
105+
* Set configs file patters in case config does not have one.
106+
*
107+
* @param {Linter.Config[]} configs
108+
* @param {string[]} files
109+
* @return {Linter.Config[]}
110+
*/
111+
export function adjustESLintConfigFiles(configs, files) {
112+
return configs.map((cfg) => ({ files, ...cfg }));
113+
}
114+
115+
/** @type {Linter.Config[]} */
116+
const baseConfig = [
117+
js.configs.recommended,
103118

104119
pluginPromise.configs['flat/recommended'],
105120
{
@@ -109,6 +124,8 @@ const baseConfig = [
109124
},
110125
},
111126

127+
...importConfig,
128+
112129
eslintPluginNoUseExtendNative.configs.recommended,
113130

114131
eslintPluginUnicorn.configs['flat/recommended'],
@@ -242,10 +259,7 @@ const baseConfig = [
242259
},
243260
},
244261

245-
{
246-
...xo[0],
247-
files: ['*.{js,mjs,cjs,ts,tsx,jsx}'],
248-
},
262+
...xo,
249263
{
250264
rules: {
251265
// annoying rules
@@ -256,9 +270,11 @@ const baseConfig = [
256270
// conflicts with prettier
257271
'@stylistic/object-curly-spacing': 'off',
258272
'@stylistic/quotes': 'off',
273+
'@stylistic/arrow-parens': 'off',
274+
'@stylistic/comma-dangle': 'off',
259275
},
260276
},
261277
eslintPluginPrettierRecommended,
262278
];
263279

264-
export default baseConfig;
280+
export default adjustESLintConfigFiles(baseConfig, ['**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx}']);

configs/jest.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import jest from 'eslint-plugin-jest';
2+
import { adjustESLintConfigFiles } from './base.js';
23

34
/** @type {Linter.Config[]} */
45
const jestConfig = [jest.configs['flat/recommended']];
5-
export default jestConfig;
6+
export default adjustESLintConfigFiles(jestConfig, ['**/*.{test,spec}.{js,jsx,mjs,cjs,ts,tsx}']);

configs/md.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,18 @@ const mdConfig = [
2424
'import/no-anonymous-default-export': 'off',
2525
},
2626
},
27-
eslintPluginPrettierRecommended,
2827
{
29-
files: ['*.md'],
28+
...eslintPluginPrettierRecommended,
29+
files: ['**/*.{md,mdx}'],
30+
},
31+
{
32+
files: ['**/*.md'],
3033
rules: {
3134
'prettier/prettier': ['error', { parser: 'markdown' }],
3235
},
3336
},
3437
{
35-
files: ['*.mdx'],
38+
files: ['**/*.mdx'],
3639
rules: {
3740
'prettier/prettier': ['error', { parser: 'mdx' }],
3841
},

configs/node.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import nodePlugin from 'eslint-plugin-n';
44
const nodeConfig = [
55
nodePlugin.configs['flat/recommended-module'],
66
{
7-
files: ['*.{js,mjs,cjs}'],
7+
files: ['**/*.{js,mjs,cjs,ts,mts,cts}'],
88
languageOptions: {
99
ecmaVersion: 'latest',
1010
sourceType: 'module',

configs/react.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import pluginReact from 'eslint-plugin-react';
22
import pluginReactHooks from 'eslint-plugin-react-hooks';
3+
import { adjustESLintConfigFiles } from './base.js';
34

4-
/** @var {Linter.Config[]} config */
5+
/** @var {Linter.Config[]} */
56
const reactConfig = [
67
pluginReact.configs.flat.recommended,
78
pluginReactHooks.configs.recommended,
@@ -22,4 +23,4 @@ const reactConfig = [
2223
},
2324
},
2425
];
25-
export default reactConfig;
26+
export default adjustESLintConfigFiles(reactConfig, ['**/*.{ts,tsx,js,jsx}']);

configs/typescript-unsafe.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import { adjustESLintConfigFiles } from './base.js';
12
import typescriptConfig from './typescript.js';
23

3-
/** @var {Linter.Config[]} config */
4+
/** @var {Linter.Config[]} */
45
const typescriptUnsafeConfig = [
56
...typescriptConfig,
67
{
@@ -15,4 +16,4 @@ const typescriptUnsafeConfig = [
1516
},
1617
},
1718
];
18-
export default typescriptUnsafeConfig;
19+
export default adjustESLintConfigFiles(typescriptUnsafeConfig, ['**/*.{ts,tsx,mts,ctx}']);

configs/typescript.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import xoTypescript from 'eslint-config-xo-typescript';
2+
import importPlugin from 'eslint-plugin-import';
23
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
3-
import baseConfig from './base.js';
4+
import { adjustESLintConfigFiles, importConfig } from './base.js';
45

5-
/** @var {Linter.Config[]} config */
6+
/** @var {Linter.Config[]} */
67
const typescriptConfig = [
7-
...baseConfig,
8+
...importConfig,
9+
importPlugin.flatConfigs.typescript,
810

911
...xoTypescript,
1012
{
@@ -50,9 +52,20 @@ const typescriptConfig = [
5052
prefer: 'type-imports',
5153
},
5254
],
55+
56+
// annoying rules
57+
'default-case': 'off',
58+
'capitalized-comments': 'off',
59+
'function-call-argument-newline': 'off',
60+
61+
// conflicts with prettier
62+
'@stylistic/object-curly-spacing': 'off',
63+
'@stylistic/quotes': 'off',
64+
'@stylistic/arrow-parens': 'off',
65+
'@stylistic/comma-dangle': 'off',
5366
},
5467
},
5568

5669
eslintPluginPrettierRecommended,
5770
];
58-
export default typescriptConfig;
71+
export default adjustESLintConfigFiles(typescriptConfig, ['**/*.{ts,mts,ctx,tsx}']);

configs/vitest.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import vitest from '@vitest/eslint-plugin';
2+
import { adjustESLintConfigFiles } from './base.js';
23

3-
/** @var {Linter.Config[]} config */
4+
/** @var {Linter.Config[]} */
45
const vitestConfig = [
56
{
6-
files: ['*.test.{js,jsx,ts,tsx}', '*.suite.{js,jsx,ts,tsx}'],
77
plugins: { vitest },
88
rules: vitest.configs.recommended.rules,
99
},
1010
];
11-
export default vitestConfig;
11+
export default adjustESLintConfigFiles(vitestConfig, ['**/*.{test,spec}.{js,jsx,mjs,cjs,ts,tsx}']);

0 commit comments

Comments
 (0)