Skip to content

Commit

Permalink
feat!: make all configs function for consistency and immutability
Browse files Browse the repository at this point in the history
  • Loading branch information
antfu committed Sep 26, 2023
1 parent 3935399 commit 11e3101
Show file tree
Hide file tree
Showing 14 changed files with 558 additions and 513 deletions.
26 changes: 14 additions & 12 deletions src/configs/comments.ts
@@ -1,16 +1,18 @@
import type { FlatESLintConfigItem } from 'eslint-define-config'
import { pluginComments } from '../plugins'

export const comments: FlatESLintConfigItem[] = [
{
plugins: {
'eslint-comments': pluginComments,
export function comments(): FlatESLintConfigItem[] {
return [
{
plugins: {
'eslint-comments': pluginComments,
},
rules: {
'eslint-comments/no-aggregating-enable': 'error',
'eslint-comments/no-duplicate-disable': 'error',
'eslint-comments/no-unlimited-disable': 'error',
'eslint-comments/no-unused-enable': 'error',
},
},
rules: {
'eslint-comments/no-aggregating-enable': 'error',
'eslint-comments/no-duplicate-disable': 'error',
'eslint-comments/no-unlimited-disable': 'error',
'eslint-comments/no-unused-enable': 'error',
},
},
]
]
}
8 changes: 5 additions & 3 deletions src/configs/ignores.ts
@@ -1,6 +1,8 @@
import type { FlatESLintConfigItem } from 'eslint-define-config'
import { GLOB_EXCLUDE } from '../globs'

export const ignores: FlatESLintConfigItem[] = [
{ ignores: GLOB_EXCLUDE },
]
export function ignores(): FlatESLintConfigItem[] {
return [
{ ignores: GLOB_EXCLUDE },
]
}
36 changes: 19 additions & 17 deletions src/configs/imports.ts
@@ -1,21 +1,23 @@
import type { FlatESLintConfigItem } from 'eslint-define-config'
import { pluginImport } from '../plugins'

export const imports: FlatESLintConfigItem[] = [
{
plugins: {
import: pluginImport,
export function imports(): FlatESLintConfigItem[] {
return [
{
plugins: {
import: pluginImport,
},
rules: {
'import/export': 'error',
'import/first': 'error',
'import/newline-after-import': ['error', { considerComments: true, count: 1 }],
'import/no-duplicates': 'error',
'import/no-mutable-exports': 'error',
'import/no-named-default': 'error',
'import/no-self-import': 'error',
'import/no-webpack-loader-syntax': 'error',
'import/order': 'error',
},
},
rules: {
'import/export': 'error',
'import/first': 'error',
'import/newline-after-import': ['error', { considerComments: true, count: 1 }],
'import/no-duplicates': 'error',
'import/no-mutable-exports': 'error',
'import/no-named-default': 'error',
'import/no-self-import': 'error',
'import/no-webpack-loader-syntax': 'error',
'import/order': 'error',
},
},
]
]
}
13 changes: 10 additions & 3 deletions src/configs/javascript.ts
Expand Up @@ -2,10 +2,15 @@ import type { FlatESLintConfigItem } from 'eslint-define-config'
import globals from 'globals'
import { pluginAntfu, pluginUnusedImports } from '../plugins'
import { OFF } from '../flags'
import type { OptionsIsInEditor } from '../types'
import type { OptionsIsInEditor, OptionsOverrides } from '../types'
import { GLOB_SRC, GLOB_SRC_EXT } from '../globs'

export function javascript(options: OptionsIsInEditor = {}): FlatESLintConfigItem[] {
export function javascript(options: OptionsIsInEditor & OptionsOverrides = {}): FlatESLintConfigItem[] {
const {
isInEditor = false,
overrides = {},
} = options

return [
{
languageOptions: {
Expand Down Expand Up @@ -211,7 +216,7 @@ export function javascript(options: OptionsIsInEditor = {}): FlatESLintConfigIte
'symbol-description': 'error',
'unicode-bom': ['error', 'never'],

'unused-imports/no-unused-imports': options.isInEditor ? OFF : 'error',
'unused-imports/no-unused-imports': isInEditor ? OFF : 'error',
'unused-imports/no-unused-vars': [
'error',
{ args: 'after-used', argsIgnorePattern: '^_', vars: 'all', varsIgnorePattern: '^_' },
Expand All @@ -222,6 +227,8 @@ export function javascript(options: OptionsIsInEditor = {}): FlatESLintConfigIte
'vars-on-top': 'error',
'wrap-iife': ['error', 'any', { functionPrototypeMethods: true }],
'yoda': ['error', 'never'],

...overrides,
},
},
{
Expand Down
56 changes: 29 additions & 27 deletions src/configs/jsdoc.ts
@@ -1,31 +1,33 @@
import type { FlatESLintConfigItem } from 'eslint-define-config'
import { pluginJsdoc } from '../plugins'

export const jsdoc: FlatESLintConfigItem[] = [
{
plugins: {
jsdoc: pluginJsdoc,
export function jsdoc(): FlatESLintConfigItem[] {
return [
{
plugins: {
jsdoc: pluginJsdoc,
},
rules: {
'jsdoc/check-access': 'warn',
'jsdoc/check-alignment': 'warn',
'jsdoc/check-param-names': 'warn',
'jsdoc/check-property-names': 'warn',
'jsdoc/check-types': 'warn',
'jsdoc/empty-tags': 'warn',
'jsdoc/implements-on-classes': 'warn',
'jsdoc/multiline-blocks': 'warn',
'jsdoc/no-defaults': 'warn',
'jsdoc/no-multi-asterisks': 'warn',
'jsdoc/no-types': 'warn',
'jsdoc/require-param-name': 'warn',
'jsdoc/require-property': 'warn',
'jsdoc/require-property-description': 'warn',
'jsdoc/require-property-name': 'warn',
'jsdoc/require-returns-check': 'warn',
'jsdoc/require-returns-description': 'warn',
'jsdoc/require-yields-check': 'warn',
'jsdoc/valid-types': 'warn',
},
},
rules: {
'jsdoc/check-access': 'warn',
'jsdoc/check-alignment': 'warn',
'jsdoc/check-param-names': 'warn',
'jsdoc/check-property-names': 'warn',
'jsdoc/check-types': 'warn',
'jsdoc/empty-tags': 'warn',
'jsdoc/implements-on-classes': 'warn',
'jsdoc/multiline-blocks': 'warn',
'jsdoc/no-defaults': 'warn',
'jsdoc/no-multi-asterisks': 'warn',
'jsdoc/no-types': 'warn',
'jsdoc/require-param-name': 'warn',
'jsdoc/require-property': 'warn',
'jsdoc/require-property-description': 'warn',
'jsdoc/require-property-name': 'warn',
'jsdoc/require-returns-check': 'warn',
'jsdoc/require-returns-description': 'warn',
'jsdoc/require-yields-check': 'warn',
'jsdoc/valid-types': 'warn',
},
},
]
]
}
100 changes: 51 additions & 49 deletions src/configs/jsonc.ts
Expand Up @@ -2,54 +2,56 @@ import type { FlatESLintConfigItem } from 'eslint-define-config'
import { GLOB_JSON, GLOB_JSON5, GLOB_JSONC } from '../globs'
import { parserJsonc, pluginJsonc } from '../plugins'

export const jsonc: FlatESLintConfigItem[] = [
{
plugins: {
jsonc: pluginJsonc as any,
export function jsonc(): FlatESLintConfigItem[] {
return [
{
plugins: {
jsonc: pluginJsonc as any,
},
},
},
{
files: [GLOB_JSON, GLOB_JSON5, GLOB_JSONC],
languageOptions: {
parser: parserJsonc,
{
files: [GLOB_JSON, GLOB_JSON5, GLOB_JSONC],
languageOptions: {
parser: parserJsonc,
},
rules: {
'jsonc/array-bracket-spacing': ['error', 'never'],
'jsonc/comma-dangle': ['error', 'never'],
'jsonc/comma-style': ['error', 'last'],
'jsonc/indent': ['error', 2],
'jsonc/key-spacing': ['error', { afterColon: true, beforeColon: false }],
'jsonc/no-bigint-literals': 'error',
'jsonc/no-binary-expression': 'error',
'jsonc/no-binary-numeric-literals': 'error',
'jsonc/no-dupe-keys': 'error',
'jsonc/no-escape-sequence-in-identifier': 'error',
'jsonc/no-floating-decimal': 'error',
'jsonc/no-hexadecimal-numeric-literals': 'error',
'jsonc/no-infinity': 'error',
'jsonc/no-multi-str': 'error',
'jsonc/no-nan': 'error',
'jsonc/no-number-props': 'error',
'jsonc/no-numeric-separators': 'error',
'jsonc/no-octal': 'error',
'jsonc/no-octal-escape': 'error',
'jsonc/no-octal-numeric-literals': 'error',
'jsonc/no-parenthesized': 'error',
'jsonc/no-plus-sign': 'error',
'jsonc/no-regexp-literals': 'error',
'jsonc/no-sparse-arrays': 'error',
'jsonc/no-template-literals': 'error',
'jsonc/no-undefined-value': 'error',
'jsonc/no-unicode-codepoint-escapes': 'error',
'jsonc/no-useless-escape': 'error',
'jsonc/object-curly-newline': ['error', { consistent: true, multiline: true }],
'jsonc/object-curly-spacing': ['error', 'always'],
'jsonc/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
'jsonc/quote-props': 'error',
'jsonc/quotes': 'error',
'jsonc/space-unary-ops': 'error',
'jsonc/valid-json-number': 'error',
'jsonc/vue-custom-block/no-parsing-error': 'error',
},
},
rules: {
'jsonc/array-bracket-spacing': ['error', 'never'],
'jsonc/comma-dangle': ['error', 'never'],
'jsonc/comma-style': ['error', 'last'],
'jsonc/indent': ['error', 2],
'jsonc/key-spacing': ['error', { afterColon: true, beforeColon: false }],
'jsonc/no-bigint-literals': 'error',
'jsonc/no-binary-expression': 'error',
'jsonc/no-binary-numeric-literals': 'error',
'jsonc/no-dupe-keys': 'error',
'jsonc/no-escape-sequence-in-identifier': 'error',
'jsonc/no-floating-decimal': 'error',
'jsonc/no-hexadecimal-numeric-literals': 'error',
'jsonc/no-infinity': 'error',
'jsonc/no-multi-str': 'error',
'jsonc/no-nan': 'error',
'jsonc/no-number-props': 'error',
'jsonc/no-numeric-separators': 'error',
'jsonc/no-octal': 'error',
'jsonc/no-octal-escape': 'error',
'jsonc/no-octal-numeric-literals': 'error',
'jsonc/no-parenthesized': 'error',
'jsonc/no-plus-sign': 'error',
'jsonc/no-regexp-literals': 'error',
'jsonc/no-sparse-arrays': 'error',
'jsonc/no-template-literals': 'error',
'jsonc/no-undefined-value': 'error',
'jsonc/no-unicode-codepoint-escapes': 'error',
'jsonc/no-useless-escape': 'error',
'jsonc/object-curly-newline': ['error', { consistent: true, multiline: true }],
'jsonc/object-curly-spacing': ['error', 'always'],
'jsonc/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
'jsonc/quote-props': 'error',
'jsonc/quotes': 'error',
'jsonc/space-unary-ops': 'error',
'jsonc/valid-json-number': 'error',
'jsonc/vue-custom-block/no-parsing-error': 'error',
},
},
]
]
}
34 changes: 18 additions & 16 deletions src/configs/node.ts
@@ -1,20 +1,22 @@
import type { FlatESLintConfigItem } from 'eslint-define-config'
import { pluginNode } from '../plugins'

export const node: FlatESLintConfigItem[] = [
{
plugins: {
node: pluginNode,
export function node(): FlatESLintConfigItem[] {
return [
{
plugins: {
node: pluginNode,
},
rules: {
'node/handle-callback-err': ['error', '^(err|error)$'],
'node/no-deprecated-api': 'error',
'node/no-exports-assign': 'error',
'node/no-new-require': 'error',
'node/no-path-concat': 'error',
'node/prefer-global/buffer': ['error', 'never'],
'node/prefer-global/process': ['error', 'never'],
'node/process-exit-as-throw': 'error',
},
},
rules: {
'node/handle-callback-err': ['error', '^(err|error)$'],
'node/no-deprecated-api': 'error',
'node/no-exports-assign': 'error',
'node/no-new-require': 'error',
'node/no-path-concat': 'error',
'node/prefer-global/buffer': ['error', 'never'],
'node/prefer-global/process': ['error', 'never'],
'node/process-exit-as-throw': 'error',
},
},
]
]
}

0 comments on commit 11e3101

Please sign in to comment.