Skip to content

Commit 11e3101

Browse files
committed
feat!: make all configs function for consistency and immutability
1 parent 3935399 commit 11e3101

14 files changed

+558
-513
lines changed

src/configs/comments.ts

+14-12
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import type { FlatESLintConfigItem } from 'eslint-define-config'
22
import { pluginComments } from '../plugins'
33

4-
export const comments: FlatESLintConfigItem[] = [
5-
{
6-
plugins: {
7-
'eslint-comments': pluginComments,
4+
export function comments(): FlatESLintConfigItem[] {
5+
return [
6+
{
7+
plugins: {
8+
'eslint-comments': pluginComments,
9+
},
10+
rules: {
11+
'eslint-comments/no-aggregating-enable': 'error',
12+
'eslint-comments/no-duplicate-disable': 'error',
13+
'eslint-comments/no-unlimited-disable': 'error',
14+
'eslint-comments/no-unused-enable': 'error',
15+
},
816
},
9-
rules: {
10-
'eslint-comments/no-aggregating-enable': 'error',
11-
'eslint-comments/no-duplicate-disable': 'error',
12-
'eslint-comments/no-unlimited-disable': 'error',
13-
'eslint-comments/no-unused-enable': 'error',
14-
},
15-
},
16-
]
17+
]
18+
}

src/configs/ignores.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import type { FlatESLintConfigItem } from 'eslint-define-config'
22
import { GLOB_EXCLUDE } from '../globs'
33

4-
export const ignores: FlatESLintConfigItem[] = [
5-
{ ignores: GLOB_EXCLUDE },
6-
]
4+
export function ignores(): FlatESLintConfigItem[] {
5+
return [
6+
{ ignores: GLOB_EXCLUDE },
7+
]
8+
}

src/configs/imports.ts

+19-17
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
import type { FlatESLintConfigItem } from 'eslint-define-config'
22
import { pluginImport } from '../plugins'
33

4-
export const imports: FlatESLintConfigItem[] = [
5-
{
6-
plugins: {
7-
import: pluginImport,
4+
export function imports(): FlatESLintConfigItem[] {
5+
return [
6+
{
7+
plugins: {
8+
import: pluginImport,
9+
},
10+
rules: {
11+
'import/export': 'error',
12+
'import/first': 'error',
13+
'import/newline-after-import': ['error', { considerComments: true, count: 1 }],
14+
'import/no-duplicates': 'error',
15+
'import/no-mutable-exports': 'error',
16+
'import/no-named-default': 'error',
17+
'import/no-self-import': 'error',
18+
'import/no-webpack-loader-syntax': 'error',
19+
'import/order': 'error',
20+
},
821
},
9-
rules: {
10-
'import/export': 'error',
11-
'import/first': 'error',
12-
'import/newline-after-import': ['error', { considerComments: true, count: 1 }],
13-
'import/no-duplicates': 'error',
14-
'import/no-mutable-exports': 'error',
15-
'import/no-named-default': 'error',
16-
'import/no-self-import': 'error',
17-
'import/no-webpack-loader-syntax': 'error',
18-
'import/order': 'error',
19-
},
20-
},
21-
]
22+
]
23+
}

src/configs/javascript.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,15 @@ import type { FlatESLintConfigItem } from 'eslint-define-config'
22
import globals from 'globals'
33
import { pluginAntfu, pluginUnusedImports } from '../plugins'
44
import { OFF } from '../flags'
5-
import type { OptionsIsInEditor } from '../types'
5+
import type { OptionsIsInEditor, OptionsOverrides } from '../types'
66
import { GLOB_SRC, GLOB_SRC_EXT } from '../globs'
77

8-
export function javascript(options: OptionsIsInEditor = {}): FlatESLintConfigItem[] {
8+
export function javascript(options: OptionsIsInEditor & OptionsOverrides = {}): FlatESLintConfigItem[] {
9+
const {
10+
isInEditor = false,
11+
overrides = {},
12+
} = options
13+
914
return [
1015
{
1116
languageOptions: {
@@ -211,7 +216,7 @@ export function javascript(options: OptionsIsInEditor = {}): FlatESLintConfigIte
211216
'symbol-description': 'error',
212217
'unicode-bom': ['error', 'never'],
213218

214-
'unused-imports/no-unused-imports': options.isInEditor ? OFF : 'error',
219+
'unused-imports/no-unused-imports': isInEditor ? OFF : 'error',
215220
'unused-imports/no-unused-vars': [
216221
'error',
217222
{ args: 'after-used', argsIgnorePattern: '^_', vars: 'all', varsIgnorePattern: '^_' },
@@ -222,6 +227,8 @@ export function javascript(options: OptionsIsInEditor = {}): FlatESLintConfigIte
222227
'vars-on-top': 'error',
223228
'wrap-iife': ['error', 'any', { functionPrototypeMethods: true }],
224229
'yoda': ['error', 'never'],
230+
231+
...overrides,
225232
},
226233
},
227234
{

src/configs/jsdoc.ts

+29-27
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,33 @@
11
import type { FlatESLintConfigItem } from 'eslint-define-config'
22
import { pluginJsdoc } from '../plugins'
33

4-
export const jsdoc: FlatESLintConfigItem[] = [
5-
{
6-
plugins: {
7-
jsdoc: pluginJsdoc,
4+
export function jsdoc(): FlatESLintConfigItem[] {
5+
return [
6+
{
7+
plugins: {
8+
jsdoc: pluginJsdoc,
9+
},
10+
rules: {
11+
'jsdoc/check-access': 'warn',
12+
'jsdoc/check-alignment': 'warn',
13+
'jsdoc/check-param-names': 'warn',
14+
'jsdoc/check-property-names': 'warn',
15+
'jsdoc/check-types': 'warn',
16+
'jsdoc/empty-tags': 'warn',
17+
'jsdoc/implements-on-classes': 'warn',
18+
'jsdoc/multiline-blocks': 'warn',
19+
'jsdoc/no-defaults': 'warn',
20+
'jsdoc/no-multi-asterisks': 'warn',
21+
'jsdoc/no-types': 'warn',
22+
'jsdoc/require-param-name': 'warn',
23+
'jsdoc/require-property': 'warn',
24+
'jsdoc/require-property-description': 'warn',
25+
'jsdoc/require-property-name': 'warn',
26+
'jsdoc/require-returns-check': 'warn',
27+
'jsdoc/require-returns-description': 'warn',
28+
'jsdoc/require-yields-check': 'warn',
29+
'jsdoc/valid-types': 'warn',
30+
},
831
},
9-
rules: {
10-
'jsdoc/check-access': 'warn',
11-
'jsdoc/check-alignment': 'warn',
12-
'jsdoc/check-param-names': 'warn',
13-
'jsdoc/check-property-names': 'warn',
14-
'jsdoc/check-types': 'warn',
15-
'jsdoc/empty-tags': 'warn',
16-
'jsdoc/implements-on-classes': 'warn',
17-
'jsdoc/multiline-blocks': 'warn',
18-
'jsdoc/no-defaults': 'warn',
19-
'jsdoc/no-multi-asterisks': 'warn',
20-
'jsdoc/no-types': 'warn',
21-
'jsdoc/require-param-name': 'warn',
22-
'jsdoc/require-property': 'warn',
23-
'jsdoc/require-property-description': 'warn',
24-
'jsdoc/require-property-name': 'warn',
25-
'jsdoc/require-returns-check': 'warn',
26-
'jsdoc/require-returns-description': 'warn',
27-
'jsdoc/require-yields-check': 'warn',
28-
'jsdoc/valid-types': 'warn',
29-
},
30-
},
31-
]
32+
]
33+
}

src/configs/jsonc.ts

+51-49
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,56 @@ import type { FlatESLintConfigItem } from 'eslint-define-config'
22
import { GLOB_JSON, GLOB_JSON5, GLOB_JSONC } from '../globs'
33
import { parserJsonc, pluginJsonc } from '../plugins'
44

5-
export const jsonc: FlatESLintConfigItem[] = [
6-
{
7-
plugins: {
8-
jsonc: pluginJsonc as any,
5+
export function jsonc(): FlatESLintConfigItem[] {
6+
return [
7+
{
8+
plugins: {
9+
jsonc: pluginJsonc as any,
10+
},
911
},
10-
},
11-
{
12-
files: [GLOB_JSON, GLOB_JSON5, GLOB_JSONC],
13-
languageOptions: {
14-
parser: parserJsonc,
12+
{
13+
files: [GLOB_JSON, GLOB_JSON5, GLOB_JSONC],
14+
languageOptions: {
15+
parser: parserJsonc,
16+
},
17+
rules: {
18+
'jsonc/array-bracket-spacing': ['error', 'never'],
19+
'jsonc/comma-dangle': ['error', 'never'],
20+
'jsonc/comma-style': ['error', 'last'],
21+
'jsonc/indent': ['error', 2],
22+
'jsonc/key-spacing': ['error', { afterColon: true, beforeColon: false }],
23+
'jsonc/no-bigint-literals': 'error',
24+
'jsonc/no-binary-expression': 'error',
25+
'jsonc/no-binary-numeric-literals': 'error',
26+
'jsonc/no-dupe-keys': 'error',
27+
'jsonc/no-escape-sequence-in-identifier': 'error',
28+
'jsonc/no-floating-decimal': 'error',
29+
'jsonc/no-hexadecimal-numeric-literals': 'error',
30+
'jsonc/no-infinity': 'error',
31+
'jsonc/no-multi-str': 'error',
32+
'jsonc/no-nan': 'error',
33+
'jsonc/no-number-props': 'error',
34+
'jsonc/no-numeric-separators': 'error',
35+
'jsonc/no-octal': 'error',
36+
'jsonc/no-octal-escape': 'error',
37+
'jsonc/no-octal-numeric-literals': 'error',
38+
'jsonc/no-parenthesized': 'error',
39+
'jsonc/no-plus-sign': 'error',
40+
'jsonc/no-regexp-literals': 'error',
41+
'jsonc/no-sparse-arrays': 'error',
42+
'jsonc/no-template-literals': 'error',
43+
'jsonc/no-undefined-value': 'error',
44+
'jsonc/no-unicode-codepoint-escapes': 'error',
45+
'jsonc/no-useless-escape': 'error',
46+
'jsonc/object-curly-newline': ['error', { consistent: true, multiline: true }],
47+
'jsonc/object-curly-spacing': ['error', 'always'],
48+
'jsonc/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
49+
'jsonc/quote-props': 'error',
50+
'jsonc/quotes': 'error',
51+
'jsonc/space-unary-ops': 'error',
52+
'jsonc/valid-json-number': 'error',
53+
'jsonc/vue-custom-block/no-parsing-error': 'error',
54+
},
1555
},
16-
rules: {
17-
'jsonc/array-bracket-spacing': ['error', 'never'],
18-
'jsonc/comma-dangle': ['error', 'never'],
19-
'jsonc/comma-style': ['error', 'last'],
20-
'jsonc/indent': ['error', 2],
21-
'jsonc/key-spacing': ['error', { afterColon: true, beforeColon: false }],
22-
'jsonc/no-bigint-literals': 'error',
23-
'jsonc/no-binary-expression': 'error',
24-
'jsonc/no-binary-numeric-literals': 'error',
25-
'jsonc/no-dupe-keys': 'error',
26-
'jsonc/no-escape-sequence-in-identifier': 'error',
27-
'jsonc/no-floating-decimal': 'error',
28-
'jsonc/no-hexadecimal-numeric-literals': 'error',
29-
'jsonc/no-infinity': 'error',
30-
'jsonc/no-multi-str': 'error',
31-
'jsonc/no-nan': 'error',
32-
'jsonc/no-number-props': 'error',
33-
'jsonc/no-numeric-separators': 'error',
34-
'jsonc/no-octal': 'error',
35-
'jsonc/no-octal-escape': 'error',
36-
'jsonc/no-octal-numeric-literals': 'error',
37-
'jsonc/no-parenthesized': 'error',
38-
'jsonc/no-plus-sign': 'error',
39-
'jsonc/no-regexp-literals': 'error',
40-
'jsonc/no-sparse-arrays': 'error',
41-
'jsonc/no-template-literals': 'error',
42-
'jsonc/no-undefined-value': 'error',
43-
'jsonc/no-unicode-codepoint-escapes': 'error',
44-
'jsonc/no-useless-escape': 'error',
45-
'jsonc/object-curly-newline': ['error', { consistent: true, multiline: true }],
46-
'jsonc/object-curly-spacing': ['error', 'always'],
47-
'jsonc/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
48-
'jsonc/quote-props': 'error',
49-
'jsonc/quotes': 'error',
50-
'jsonc/space-unary-ops': 'error',
51-
'jsonc/valid-json-number': 'error',
52-
'jsonc/vue-custom-block/no-parsing-error': 'error',
53-
},
54-
},
55-
]
56+
]
57+
}

src/configs/node.ts

+18-16
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
import type { FlatESLintConfigItem } from 'eslint-define-config'
22
import { pluginNode } from '../plugins'
33

4-
export const node: FlatESLintConfigItem[] = [
5-
{
6-
plugins: {
7-
node: pluginNode,
4+
export function node(): FlatESLintConfigItem[] {
5+
return [
6+
{
7+
plugins: {
8+
node: pluginNode,
9+
},
10+
rules: {
11+
'node/handle-callback-err': ['error', '^(err|error)$'],
12+
'node/no-deprecated-api': 'error',
13+
'node/no-exports-assign': 'error',
14+
'node/no-new-require': 'error',
15+
'node/no-path-concat': 'error',
16+
'node/prefer-global/buffer': ['error', 'never'],
17+
'node/prefer-global/process': ['error', 'never'],
18+
'node/process-exit-as-throw': 'error',
19+
},
820
},
9-
rules: {
10-
'node/handle-callback-err': ['error', '^(err|error)$'],
11-
'node/no-deprecated-api': 'error',
12-
'node/no-exports-assign': 'error',
13-
'node/no-new-require': 'error',
14-
'node/no-path-concat': 'error',
15-
'node/prefer-global/buffer': ['error', 'never'],
16-
'node/prefer-global/process': ['error', 'never'],
17-
'node/process-exit-as-throw': 'error',
18-
},
19-
},
20-
]
21+
]
22+
}

0 commit comments

Comments
 (0)