Skip to content

Commit 8556eab

Browse files
committed
fix(keep-sorted): support satisfies, close #25
1 parent 3c02f93 commit 8556eab

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

src/commands/keep-sorted.test.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,4 +356,32 @@ run(
356356
]
357357
`,
358358
},
359+
{
360+
description: 'With satisfies',
361+
code: $`
362+
// @keep-sorted
363+
const a = {
364+
foo,
365+
bar,
366+
apple
367+
} satisfies Record<string, any>
368+
`,
369+
output: $`
370+
// @keep-sorted
371+
const a = {
372+
apple,
373+
bar,
374+
foo,
375+
} satisfies Record<string, any>
376+
`,
377+
errors: ['command-fix'],
378+
},
379+
{
380+
description: 'With satisfies',
381+
code: $`
382+
// @keep-sorted
383+
const a = bar satisfies Record<string, any>
384+
`,
385+
errors: ['command-error'],
386+
},
359387
)

src/commands/keep-sorted.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,27 @@ export const keepSorted: Command = {
2222
return ctx.reportError(`Failed to parse options: ${optionsRaw}`)
2323
}
2424

25-
const node = ctx.findNodeBelow(
25+
let node = ctx.findNodeBelow(
2626
'ObjectExpression',
2727
'ObjectPattern',
2828
'ArrayExpression',
2929
'TSInterfaceBody',
3030
'TSTypeLiteral',
31+
'TSSatisfiesExpression',
3132
) || ctx.findNodeBelow(
3233
'ExportNamedDeclaration',
3334
)
35+
36+
// Unwrap TSSatisfiesExpression
37+
if (node?.type === 'TSSatisfiesExpression') {
38+
if (node.expression.type !== 'ArrayExpression' && node.expression.type !== 'ObjectExpression') {
39+
node = undefined
40+
}
41+
else {
42+
node = node.expression
43+
}
44+
}
45+
3446
if (!node)
3547
return ctx.reportError('Unable to find object/array/interface to sort')
3648

0 commit comments

Comments
 (0)