Skip to content

Commit ab50c71

Browse files
authored
feat(customize): allow indent option as full rule options (#1091)
1 parent 77e1370 commit ab50c71

2 files changed

Lines changed: 29 additions & 20 deletions

File tree

‎packages/eslint-plugin/configs/customize.ts‎

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,9 @@ export function customize(options: StylisticCustomizeOptions = {}): Linter.Confi
2828
severity = 'error',
2929
} = options
3030

31-
let rules: Rules = {
32-
'@stylistic/array-bracket-spacing': [severity, 'never'],
33-
'@stylistic/arrow-parens': [severity, arrowParens ? 'always' : 'as-needed', { requireForBlockBody: true }],
34-
'@stylistic/arrow-spacing': [severity, { after: true, before: true }],
35-
'@stylistic/block-spacing': [severity, blockSpacing ? 'always' : 'never'],
36-
'@stylistic/brace-style': [severity, braceStyle, { allowSingleLine: true }],
37-
'@stylistic/comma-dangle': [severity, commaDangle],
38-
'@stylistic/comma-spacing': [severity, { after: true, before: false }],
39-
'@stylistic/comma-style': [severity, 'last'],
40-
'@stylistic/computed-property-spacing': [severity, 'never', { enforceForClassMembers: true }],
41-
'@stylistic/dot-location': [severity, 'property'],
42-
'@stylistic/eol-last': severity,
43-
'@stylistic/generator-star-spacing': [severity, { after: true, before: false }],
44-
'@stylistic/indent': [severity, indent, {
31+
const [
32+
indentLevel = 2,
33+
indentOptions = {
4534
ArrayExpression: 1,
4635
CallExpression: { arguments: 1 },
4736
flatTernaryExpressions: false,
@@ -58,10 +47,26 @@ export function customize(options: StylisticCustomizeOptions = {}): Linter.Confi
5847
offsetTernaryExpressions: true,
5948
outerIIFEBody: 1,
6049
SwitchCase: 1,
61-
tabLength: indent === 'tab' ? 4 : indent,
50+
tabLength: indentLevel === 'tab' ? 4 : indentLevel,
6251
VariableDeclarator: 1,
63-
}],
64-
'@stylistic/indent-binary-ops': [severity, indent],
52+
} satisfies RuleOptions['@stylistic/indent'][1],
53+
] = Array.isArray(indent) ? indent : [indent]
54+
55+
let rules: Rules = {
56+
'@stylistic/array-bracket-spacing': [severity, 'never'],
57+
'@stylistic/arrow-parens': [severity, arrowParens ? 'always' : 'as-needed', { requireForBlockBody: true }],
58+
'@stylistic/arrow-spacing': [severity, { after: true, before: true }],
59+
'@stylistic/block-spacing': [severity, blockSpacing ? 'always' : 'never'],
60+
'@stylistic/brace-style': [severity, braceStyle, { allowSingleLine: true }],
61+
'@stylistic/comma-dangle': [severity, commaDangle],
62+
'@stylistic/comma-spacing': [severity, { after: true, before: false }],
63+
'@stylistic/comma-style': [severity, 'last'],
64+
'@stylistic/computed-property-spacing': [severity, 'never', { enforceForClassMembers: true }],
65+
'@stylistic/dot-location': [severity, 'property'],
66+
'@stylistic/eol-last': severity,
67+
'@stylistic/generator-star-spacing': [severity, { after: true, before: false }],
68+
'@stylistic/indent': [severity, indentLevel, indentOptions],
69+
'@stylistic/indent-binary-ops': [severity, indentLevel],
6570
'@stylistic/key-spacing': [severity, { afterColon: true, beforeColon: false }],
6671
'@stylistic/keyword-spacing': [severity, { after: true, before: true }],
6772
'@stylistic/lines-between-class-members': [severity, 'always', { exceptAfterSingleLine: true }],
@@ -99,7 +104,7 @@ export function customize(options: StylisticCustomizeOptions = {}): Linter.Confi
99104
'@stylistic/no-mixed-spaces-and-tabs': severity,
100105
'@stylistic/no-multi-spaces': severity,
101106
'@stylistic/no-multiple-empty-lines': [severity, { max: 1, maxBOF: 0, maxEOF: 0 }],
102-
'@stylistic/no-tabs': indent === 'tab' ? 'off' : severity,
107+
'@stylistic/no-tabs': indentLevel === 'tab' ? 'off' : severity,
103108
'@stylistic/no-trailing-spaces': severity,
104109
'@stylistic/no-whitespace-before-property': severity,
105110
'@stylistic/object-curly-spacing': [severity, 'always'],
@@ -144,7 +149,7 @@ export function customize(options: StylisticCustomizeOptions = {}): Linter.Confi
144149
'@stylistic/jsx-equals-spacing': severity,
145150
'@stylistic/jsx-first-prop-new-line': severity,
146151
'@stylistic/jsx-function-call-newline': [severity, 'multiline'],
147-
'@stylistic/jsx-indent-props': [severity, indent],
152+
'@stylistic/jsx-indent-props': [severity, indentLevel],
148153
'@stylistic/jsx-max-props-per-line': [severity, { maximum: 1, when: 'multiline' }],
149154
'@stylistic/jsx-one-expression-per-line': [severity, { allow: 'single-child' }],
150155
'@stylistic/jsx-quotes': severity,

‎packages/eslint-plugin/dts/options.d.ts‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import type { UnprefixedRuleOptions } from './rule-options'
2+
3+
type IndentRuleOptions = UnprefixedRuleOptions['indent']
4+
15
export interface StylisticCustomizeOptions {
26
/**
37
* The name of the registered plugin, used to prefix rule IDs
@@ -10,7 +14,7 @@ export interface StylisticCustomizeOptions {
1014
*
1115
* @default 2
1216
*/
13-
indent?: number | 'tab'
17+
indent?: IndentRuleOptions[0] | IndentRuleOptions
1418
/**
1519
* Quote style
1620
* Similar to `singleQuote` option in Prettier

0 commit comments

Comments
 (0)