From 8556eab5b5cf3e536588a1641812b8aaef0957cb Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Sun, 8 Sep 2024 01:34:10 +0200 Subject: [PATCH] fix(keep-sorted): support `satisfies`, close #25 --- src/commands/keep-sorted.test.ts | 28 ++++++++++++++++++++++++++++ src/commands/keep-sorted.ts | 14 +++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/commands/keep-sorted.test.ts b/src/commands/keep-sorted.test.ts index 8a27308..d790ee3 100644 --- a/src/commands/keep-sorted.test.ts +++ b/src/commands/keep-sorted.test.ts @@ -356,4 +356,32 @@ run( ] `, }, + { + description: 'With satisfies', + code: $` + // @keep-sorted + const a = { + foo, + bar, + apple + } satisfies Record + `, + output: $` + // @keep-sorted + const a = { + apple, + bar, + foo, + } satisfies Record + `, + errors: ['command-fix'], + }, + { + description: 'With satisfies', + code: $` + // @keep-sorted + const a = bar satisfies Record + `, + errors: ['command-error'], + }, ) diff --git a/src/commands/keep-sorted.ts b/src/commands/keep-sorted.ts index a5ab340..62c0187 100644 --- a/src/commands/keep-sorted.ts +++ b/src/commands/keep-sorted.ts @@ -22,15 +22,27 @@ export const keepSorted: Command = { return ctx.reportError(`Failed to parse options: ${optionsRaw}`) } - const node = ctx.findNodeBelow( + let node = ctx.findNodeBelow( 'ObjectExpression', 'ObjectPattern', 'ArrayExpression', 'TSInterfaceBody', 'TSTypeLiteral', + 'TSSatisfiesExpression', ) || ctx.findNodeBelow( 'ExportNamedDeclaration', ) + + // Unwrap TSSatisfiesExpression + if (node?.type === 'TSSatisfiesExpression') { + if (node.expression.type !== 'ArrayExpression' && node.expression.type !== 'ObjectExpression') { + node = undefined + } + else { + node = node.expression + } + } + if (!node) return ctx.reportError('Unable to find object/array/interface to sort')