Skip to content

Commit 8d15b98

Browse files
authored
fix(sort-objects): fix function name pattern usage with variable assignment
1 parent 4045595 commit 8d15b98

File tree

3 files changed

+60
-6
lines changed

3 files changed

+60
-6
lines changed

rules/sort-objects.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,10 @@ export default createEslintRule<Options, MESSAGE_ID>({
125125
return
126126
}
127127

128-
let objectParent = getObjectParent({ node: nodeObject })
129-
128+
let objectParent = getObjectParent({
129+
onlyFirstParent: true,
130+
node: nodeObject,
131+
})
130132
let matchedContextOptions = getMatchingContextOptions({
131133
nodeNames: nodeObject.properties
132134
.map(property => getNodeName({ sourceCode, property }))
@@ -178,10 +180,14 @@ export default createEslintRule<Options, MESSAGE_ID>({
178180
return
179181
}
180182

183+
let objectParentForIgnorePattern = getObjectParent({
184+
onlyFirstParent: false,
185+
node: nodeObject,
186+
})
181187
if (
182-
objectParent?.name &&
188+
objectParentForIgnorePattern?.name &&
183189
options.ignorePattern.some(pattern =>
184-
matches(objectParent.name, pattern),
190+
matches(objectParentForIgnorePattern.name, pattern),
185191
)
186192
) {
187193
return
@@ -629,21 +635,26 @@ let getNodeName = ({
629635
}
630636

631637
let getObjectParent = ({
638+
onlyFirstParent,
632639
node,
633640
}: {
634641
node: TSESTree.ObjectExpression | TSESTree.ObjectPattern
642+
onlyFirstParent: boolean
635643
}): {
636644
type: 'VariableDeclarator' | 'CallExpression'
637645
name: string
638646
} | null => {
639-
let variableParentName = getVariableParentName({ node })
647+
let variableParentName = getVariableParentName({ onlyFirstParent, node })
640648
if (variableParentName) {
641649
return {
642650
type: 'VariableDeclarator',
643651
name: variableParentName,
644652
}
645653
}
646-
let callParentName = getCallExpressionParentName({ node })
654+
let callParentName = getCallExpressionParentName({
655+
onlyFirstParent,
656+
node,
657+
})
647658
if (callParentName) {
648659
return {
649660
type: 'CallExpression',
@@ -654,15 +665,18 @@ let getObjectParent = ({
654665
}
655666

656667
let getVariableParentName = ({
668+
onlyFirstParent,
657669
node,
658670
}: {
659671
node: TSESTree.ObjectExpression | TSESTree.ObjectPattern
672+
onlyFirstParent: boolean
660673
}): string | null => {
661674
let variableParent = getFirstNodeParentWithType({
662675
allowedTypes: [
663676
TSESTree.AST_NODE_TYPES.VariableDeclarator,
664677
TSESTree.AST_NODE_TYPES.Property,
665678
],
679+
onlyFirstParent,
666680
node,
667681
})
668682
if (!variableParent) {
@@ -682,12 +696,15 @@ let getVariableParentName = ({
682696
}
683697

684698
let getCallExpressionParentName = ({
699+
onlyFirstParent,
685700
node,
686701
}: {
687702
node: TSESTree.ObjectExpression | TSESTree.ObjectPattern
703+
onlyFirstParent: boolean
688704
}): string | null => {
689705
let callParent = getFirstNodeParentWithType({
690706
allowedTypes: [TSESTree.AST_NODE_TYPES.CallExpression],
707+
onlyFirstParent,
691708
node,
692709
})
693710
if (!callParent) {

rules/sort-objects/get-first-node-parent-with-type.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,20 @@ type NodeOfType<Type> = { type: Type } & TSESTree.Node
55
export let getFirstNodeParentWithType = <
66
NodeType extends TSESTree.AST_NODE_TYPES,
77
>({
8+
onlyFirstParent,
89
allowedTypes,
910
node,
1011
}: {
1112
allowedTypes: NodeType[]
13+
onlyFirstParent: boolean
1214
node: TSESTree.Node
1315
}): NodeOfType<NodeType> | null => {
1416
let { parent } = node
17+
if (onlyFirstParent) {
18+
return parent && (allowedTypes as string[]).includes(parent.type)
19+
? (parent as NodeOfType<NodeType>)
20+
: null
21+
}
1522
while (parent) {
1623
if ((allowedTypes as string[]).includes(parent.type)) {
1724
return parent as NodeOfType<NodeType>

test/rules/sort-objects.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2278,6 +2278,24 @@ describe(ruleName, () => {
22782278
},
22792279
messageId: 'unexpectedObjectsGroupOrder',
22802280
},
2281+
{
2282+
data: {
2283+
rightGroup: 'g',
2284+
leftGroup: 'b',
2285+
right: 'g',
2286+
left: 'b',
2287+
},
2288+
messageId: 'unexpectedObjectsGroupOrder',
2289+
},
2290+
{
2291+
data: {
2292+
rightGroup: 'r',
2293+
leftGroup: 'g',
2294+
right: 'r',
2295+
left: 'g',
2296+
},
2297+
messageId: 'unexpectedObjectsGroupOrder',
2298+
},
22812299
],
22822300
options: [
22832301
{
@@ -2311,6 +2329,12 @@ describe(ruleName, () => {
23112329
g: string,
23122330
b: string
23132331
})
2332+
2333+
let a = someFunction(true, {
2334+
r: string,
2335+
g: string,
2336+
b: string
2337+
})
23142338
`,
23152339
code: dedent`
23162340
let obj = {
@@ -2324,6 +2348,12 @@ describe(ruleName, () => {
23242348
g: string,
23252349
r: string
23262350
})
2351+
2352+
let a = someFunction(true, {
2353+
b: string,
2354+
g: string,
2355+
r: string
2356+
})
23272357
`,
23282358
},
23292359
],

0 commit comments

Comments
 (0)