Skip to content

Commit b5a7df3

Browse files
authored
feat: strict limitations on the scope of files to which the rules apply (#20)
1 parent fe4452a commit b5a7df3

File tree

11 files changed

+54
-14
lines changed

11 files changed

+54
-14
lines changed

packages/eslint-config/src/configs/imports.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import process from 'node:process'
44
import type { OptionsTypeScript } from '../options.js'
55
import type { TypedFlatConfigItem } from '../types.js'
66

7+
import { GLOB_SRC } from '../globs.js'
78
import plugins from '../plugins.js'
89
import { getFlatConfigName } from '../utils/index.js'
910

1011
const name = getFlatConfigName('imports')
12+
const files: string[] = [GLOB_SRC]
1113

1214
export function imports(options: OptionsTypeScript = {}): TypedFlatConfigItem[] {
1315
const {
@@ -17,6 +19,7 @@ export function imports(options: OptionsTypeScript = {}): TypedFlatConfigItem[]
1719
return [
1820
{
1921
name: name.setup,
22+
files,
2023
plugins: {
2124
'import-x': plugins['pluginImportX'],
2225
'unused-imports': plugins['pluginUnusedImports'],
@@ -30,6 +33,7 @@ export function imports(options: OptionsTypeScript = {}): TypedFlatConfigItem[]
3033
},
3134
{
3235
name: name.rules,
36+
files,
3337
rules: {
3438
// eslint-plugin-import-x
3539
// https://github.com/un-ts/eslint-plugin-import-x
@@ -59,6 +63,7 @@ export function imports(options: OptionsTypeScript = {}): TypedFlatConfigItem[]
5963
},
6064
{
6165
name: name.stylistic,
66+
files,
6267
rules: {
6368
// rules that conflict with eslint-plugin-perfectionist are disabled.
6469
'sort-imports': 'off',

packages/eslint-config/src/configs/javascript.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import globals from 'globals'
66
import type { OptionsJavaScript } from '../options.js'
77
import type { TypedFlatConfigItem } from '../types.js'
88

9+
import { GLOB_SRC } from '../globs.js'
910
import plugins from '../plugins.js'
1011
import { getFlatConfigName } from '../utils/index.js'
1112

1213
const name = getFlatConfigName('javascript')
14+
const files: string[] = [GLOB_SRC]
1315

1416
const commonjsGlobalsOffList = Object.keys(globals.commonjs).map<
1517
Record<string, Linter.GlobalConf>
@@ -27,6 +29,7 @@ export function javascript(options: OptionsJavaScript = {}): TypedFlatConfigItem
2729
return [
2830
{
2931
name: name.setup,
32+
files,
3033
plugins: {
3134
'import-x': plugins['pluginImportX'],
3235
'unused-imports': plugins['pluginUnusedImports'],
@@ -80,6 +83,7 @@ export function javascript(options: OptionsJavaScript = {}): TypedFlatConfigItem
8083
},
8184
{
8285
name: name.rules,
86+
files,
8387
rules: {
8488
...js.configs.recommended.rules,
8589

packages/eslint-config/src/configs/json.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export function json(options: OptionsJson = {}): TypedFlatConfigItem[] {
2727
? stylistic
2828
: ({ indentWidth: 2 } as const)
2929

30-
const files = [GLOB_JSON, GLOB_JSON5, GLOB_JSONC, ...extraFiles]
30+
const files: string[] = [GLOB_JSON, GLOB_JSON5, GLOB_JSONC, ...extraFiles]
3131

3232
return [
3333
{

packages/eslint-config/src/configs/next-js.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import plugins from '../plugins.js'
88
import { getFlatConfigName } from '../utils/index.js'
99

1010
const name = getFlatConfigName('next-js')
11-
const files = [GLOB_SRC]
11+
const files: string[] = [GLOB_SRC]
1212

1313
export function nextJs(): TypedFlatConfigItem[] {
1414
return [

packages/eslint-config/src/configs/node-js.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const isModule = getPackageJson()?.type === 'module'
1313
export function nodeJs(options: OptionsNodeJs = {}): TypedFlatConfigItem[] {
1414
const { module = isModule, extraFiles = [] } = options
1515

16-
const files = [GLOB_JS, ...extraFiles]
16+
const files: string[] = [GLOB_JS, ...extraFiles]
1717

1818
return [
1919
{

packages/eslint-config/src/configs/react.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import plugins from '../plugins.js'
88
import { getFlatConfigName } from '../utils/index.js'
99

1010
const name = getFlatConfigName('react')
11-
const files = [GLOB_SRC]
11+
const files: string[] = [GLOB_SRC]
1212

1313
export function react(options: OptionsReact = {}): TypedFlatConfigItem[] {
1414
const { stylistic = true, reactCompiler = false } = options

packages/eslint-config/src/configs/regexp.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,25 @@ import * as pluginRegexp from 'eslint-plugin-regexp'
22

33
import type { TypedFlatConfigItem } from '../types.js'
44

5+
import { GLOB_SRC } from '../globs.js'
56
import plugins from '../plugins.js'
67
import { getFlatConfigName } from '../utils/index.js'
78

89
const name = getFlatConfigName('regexp')
10+
const files: string[] = [GLOB_SRC]
911

1012
export function regexp(): TypedFlatConfigItem[] {
1113
return [
1214
{
1315
name: name.setup,
16+
files,
1417
plugins: {
1518
regexp: plugins['pluginRegexp'],
1619
},
1720
},
1821
{
1922
name: name.rules,
23+
files,
2024
rules: {
2125
// eslint-plugin-regexp
2226
// https://github.com/ota-meshi/eslint-plugin-regexp

packages/eslint-config/src/configs/tailwindcss.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import type { TypedFlatConfigItem } from '../types.js'
22

3+
import { GLOB_HTML, GLOB_POSTCSS, GLOB_SRC, GLOB_STYLE } from '../globs.js'
34
import plugins from '../plugins.js'
45
import { getFlatConfigName } from '../utils/index.js'
56

67
const name = getFlatConfigName('tailwindcss')
8+
const files: string[] = [GLOB_SRC, GLOB_STYLE, GLOB_POSTCSS, GLOB_HTML]
79

810
export function tailwindcss(): TypedFlatConfigItem[] {
911
return [
1012
{
1113
name: name.setup,
14+
files,
1215
plugins: {
1316
tailwindcss: plugins['pluginTailwindCSS'],
1417
},
@@ -20,6 +23,7 @@ export function tailwindcss(): TypedFlatConfigItem[] {
2023
},
2124
{
2225
name: name.rules,
26+
files,
2327
rules: {
2428
// eslint-plugin-tailwindcss
2529
// https://github.com/francoismassart/eslint-plugin-tailwindcss

packages/eslint-config/src/configs/typescript.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export function typescript(options: OptionsTypeScript = {}): TypedFlatConfigItem
4141
reactTypeCheck = false,
4242
} = options
4343

44-
const files = [
44+
const files: string[] = [
4545
GLOB_TS,
4646
GLOB_TSX,
4747
...extraFileExtensions.map((extension) => `**/*${extension}`),

packages/eslint-config/src/configs/unicorn.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,55 @@ import globals from 'globals'
33

44
import type { TypedFlatConfigItem } from '../types.js'
55

6+
import { GLOB_ALL_SRC, GLOB_SRC } from '../globs.js'
67
import plugins from '../plugins.js'
78
import { getFlatConfigName } from '../utils/index.js'
89

910
const name = getFlatConfigName('unicorn')
11+
const files: string[] = [GLOB_SRC]
12+
const allFiles: string[] = [...GLOB_ALL_SRC]
1013

1114
export function unicorn(): TypedFlatConfigItem[] {
1215
return [
1316
{
14-
name: name.setup,
17+
name: `${name.setup}/all-src`,
18+
files: allFiles,
1519
plugins: {
1620
unicorn: plugins['pluginUnicorn'],
1721
},
22+
},
23+
{
24+
name: `${name.setup}/src`,
25+
files,
1826
languageOptions: {
1927
globals: {
2028
...globals.builtin,
2129
},
2230
},
2331
},
2432
{
25-
name: name.rules,
33+
name: `${name.rules}/all-src`,
34+
files: allFiles,
2635
rules: {
27-
// eslint-plugin-unicorn
28-
// https://github.com/sindresorhus/eslint-plugin-unicorn
29-
...pluginUnicorn.configs['flat/recommended'].rules,
30-
31-
// Ignore case for specific files
36+
// Let all files use kebab-case for filenames.
37+
// kebab-case forces filenames to be lowercase and hyphen-separated,
38+
// some file systems are case-insensitive, so this rule can help prevent
39+
// issues with importing files on case-sensitive file systems.
3240
'unicorn/filename-case': ['error', {
3341
cases: { kebabCase: true },
42+
// Ignore case for specific files
3443
ignore: ['README.md', 'LICENSE.md', 'CHANGELOG.md', 'CODE_OF_CONDUCT.md'],
3544
}],
3645
},
3746
},
47+
{
48+
name: `${name.rules}/src`,
49+
files,
50+
rules: {
51+
// eslint-plugin-unicorn
52+
// https://github.com/sindresorhus/eslint-plugin-unicorn
53+
...pluginUnicorn.configs['flat/recommended'].rules,
54+
},
55+
},
3856
]
3957
}

packages/eslint-config/src/globs.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ export const GLOB_TSX = '**/*.?([cm])tsx'
1414

1515
export const GLOB_STYLE = '**/*.{c,le,sc}ss'
1616
export const GLOB_CSS = '**/*.css'
17-
export const GLOB_POSTCSS = '**/*.{p,post}css'
1817
export const GLOB_LESS = '**/*.less'
1918
export const GLOB_SCSS = '**/*.scss'
19+
export const GLOB_POSTCSS = '**/*.{p,post}css'
2020

2121
export const GLOB_JSON = '**/*.json'
2222
export const GLOB_JSON5 = '**/*.json5'
@@ -29,8 +29,8 @@ export const GLOB_VUE = '**/*.vue'
2929
export const GLOB_YAML = '**/*.y?(a)ml'
3030
export const GLOB_TOML = '**/*.toml'
3131
export const GLOB_XML = '**/*.xml'
32-
export const GLOB_SVG = '**/*.svg'
3332
export const GLOB_HTML = '**/*.htm?(l)'
33+
export const GLOB_SVG = '**/*.svg'
3434
export const GLOB_ASTRO = '**/*.astro'
3535
export const GLOB_ASTRO_TS = '**/*.astro/*.ts'
3636
export const GLOB_GRAPHQL = '**/*.{g,graph}ql'
@@ -48,14 +48,19 @@ export const GLOB_TESTS = [
4848
export const GLOB_ALL_SRC = [
4949
GLOB_SRC,
5050
GLOB_STYLE,
51+
GLOB_POSTCSS,
5152
GLOB_JSON,
5253
GLOB_JSON5,
54+
GLOB_JSONC,
5355
GLOB_MARKDOWN,
5456
GLOB_SVELTE,
5557
GLOB_VUE,
5658
GLOB_YAML,
59+
GLOB_TOML,
5760
GLOB_XML,
5861
GLOB_HTML,
62+
GLOB_SVG,
63+
GLOB_ASTRO,
5964
]
6065

6166
export const GLOB_EXCLUDE = [

0 commit comments

Comments
 (0)