Skip to content

Commit fba0e10

Browse files
committed
feat(sort-maps): adds useConfigurationIf.allNamesMatchPattern
1 parent 463c1d5 commit fba0e10

File tree

2 files changed

+48
-18
lines changed

2 files changed

+48
-18
lines changed

rules/sort-maps.ts

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
import type { TSESTree } from '@typescript-eslint/types'
1+
import type { TSESLint } from '@typescript-eslint/utils'
2+
3+
import { TSESTree } from '@typescript-eslint/types'
24

35
import type { SortingNode } from '../types/sorting-node'
46
import type { Options } from './sort-maps/types'
57

68
import {
9+
buildUseConfigurationIfJsonSchema,
710
buildCustomGroupsArrayJsonSchema,
811
partitionByCommentJsonSchema,
912
partitionByNewLineJsonSchema,
@@ -19,6 +22,7 @@ import {
1922
import { validateGeneratedGroupsConfiguration } from '../utils/validate-generated-groups-configuration'
2023
import { validateCustomSortConfiguration } from '../utils/validate-custom-sort-configuration'
2124
import { getCustomGroupsCompareOptions } from '../utils/get-custom-groups-compare-options'
25+
import { getMatchingContextOptions } from '../utils/get-matching-context-options'
2226
import { getEslintDisabledLines } from '../utils/get-eslint-disabled-lines'
2327
import { doesCustomGroupMatch } from './sort-maps/does-custom-group-match'
2428
import { isNodeEslintDisabled } from '../utils/is-node-eslint-disabled'
@@ -52,6 +56,7 @@ let defaultOptions: Required<Options[0]> = {
5256
partitionByComment: false,
5357
partitionByNewLine: false,
5458
newlinesBetween: 'ignore',
59+
useConfigurationIf: {},
5560
type: 'alphabetical',
5661
ignoreCase: true,
5762
customGroups: [],
@@ -77,8 +82,21 @@ export default createEslintRule<Options, MESSAGE_ID>({
7782
return
7883
}
7984

85+
let sourceCode = getSourceCode(context)
8086
let settings = getSettings(context.settings)
81-
let options = complete(context.options.at(0), settings, defaultOptions)
87+
88+
let matchedContextOptions = getMatchingContextOptions({
89+
nodeNames: elements
90+
.filter(
91+
element =>
92+
element !== null &&
93+
element.type !== TSESTree.AST_NODE_TYPES.SpreadElement,
94+
)
95+
.map(element => getNodeName({ sourceCode, element })),
96+
contextOptions: context.options,
97+
})
98+
99+
let options = complete(matchedContextOptions[0], settings, defaultOptions)
82100
validateCustomSortConfiguration(options)
83101
validateGeneratedGroupsConfiguration({
84102
customGroups: options.customGroups,
@@ -87,7 +105,6 @@ export default createEslintRule<Options, MESSAGE_ID>({
87105
modifiers: [],
88106
})
89107

90-
let sourceCode = getSourceCode(context)
91108
let eslintDisabledLines = getEslintDisabledLines({
92109
ruleName: context.id,
93110
sourceCode,
@@ -110,21 +127,10 @@ export default createEslintRule<Options, MESSAGE_ID>({
110127
for (let part of parts) {
111128
let formattedMembers: SortingNode[][] = [[]]
112129
for (let element of part) {
113-
let name: string
114-
115-
if (element.type === 'ArrayExpression') {
116-
let [left] = element.elements
117-
118-
if (!left) {
119-
name = `${left}`
120-
} else if (left.type === 'Literal') {
121-
name = left.raw
122-
} else {
123-
name = sourceCode.getText(left)
124-
}
125-
} else {
126-
name = sourceCode.getText(element)
127-
}
130+
let name: string = getNodeName({
131+
sourceCode,
132+
element,
133+
})
128134

129135
let lastSortingNode = formattedMembers.at(-1)?.at(-1)
130136

@@ -265,6 +271,7 @@ export default createEslintRule<Options, MESSAGE_ID>({
265271
customGroups: buildCustomGroupsArrayJsonSchema({
266272
singleCustomGroupJsonSchema,
267273
}),
274+
useConfigurationIf: buildUseConfigurationIfJsonSchema(),
268275
partitionByNewLine: partitionByNewLineJsonSchema,
269276
specialCharacters: specialCharactersJsonSchema,
270277
newlinesBetween: newlinesBetweenJsonSchema,
@@ -300,3 +307,23 @@ export default createEslintRule<Options, MESSAGE_ID>({
300307
defaultOptions: [defaultOptions],
301308
name: 'sort-maps',
302309
})
310+
311+
let getNodeName = ({
312+
sourceCode,
313+
element,
314+
}: {
315+
sourceCode: TSESLint.SourceCode
316+
element: TSESTree.Expression
317+
}): string => {
318+
if (element.type === 'ArrayExpression') {
319+
let [left] = element.elements
320+
321+
if (!left) {
322+
return `${left}`
323+
} else if (left.type === 'Literal') {
324+
return left.raw
325+
}
326+
return sourceCode.getText(left)
327+
}
328+
return sourceCode.getText(element)
329+
}

rules/sort-maps/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ export type Options = Partial<{
1616
| Group[]
1717
| Group
1818
)[]
19+
useConfigurationIf: {
20+
allNamesMatchPattern?: string
21+
}
1922
type: 'alphabetical' | 'line-length' | 'natural' | 'custom'
2023
newlinesBetween: 'ignore' | 'always' | 'never'
2124
specialCharacters: 'remove' | 'trim' | 'keep'

0 commit comments

Comments
 (0)