From ddfcdee425f51d5f8c8a7b99846fb940691b03b0 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Wed, 29 Jul 2026 17:29:43 -0500 Subject: [PATCH] refactor(core): simplify edit file diffs --- packages/core/src/tool/plugin/edit.ts | 45 +++++++++++---------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/packages/core/src/tool/plugin/edit.ts b/packages/core/src/tool/plugin/edit.ts index ca18a5319e..ccab3ff8eb 100644 --- a/packages/core/src/tool/plugin/edit.ts +++ b/packages/core/src/tool/plugin/edit.ts @@ -185,18 +185,7 @@ export const Plugin = { ) const preview = replacements > 0 && (replacements === 1 || input.replaceAll === true) - ? { - file: target.resource, - patch: createTwoFilesPatch(target.resource, target.resource, source, replaced), - status: "modified" as const, - ...diffLines(source, replaced).reduce( - (result, item) => ({ - additions: result.additions + (item.added ? (item.count ?? 0) : 0), - deletions: result.deletions + (item.removed ? (item.count ?? 0) : 0), - }), - { additions: 0, deletions: 0 }, - ), - } + ? fileDiff(target.resource, source, replaced) : undefined yield* permission.assert({ action: "edit", @@ -226,22 +215,8 @@ export const Plugin = { const formatted = (yield* formatter.file(target.canonical)) ? yield* Bom.syncFile(fs, target.canonical, bom) : (yield* Bom.readFile(fs, target.canonical)).text - const counts = diffLines(source, formatted).reduce( - (result, item) => ({ - additions: result.additions + (item.added ? (item.count ?? 0) : 0), - deletions: result.deletions + (item.removed ? (item.count ?? 0) : 0), - }), - { additions: 0, deletions: 0 }, - ) return { - files: [ - { - file: result.resource, - patch: createTwoFilesPatch(result.resource, result.resource, source, formatted), - status: "modified" as const, - ...counts, - }, - ], + files: [fileDiff(result.resource, source, formatted)], replacements, } satisfies Output }).pipe( @@ -263,3 +238,19 @@ export const Plugin = { .pipe(Effect.orDie) }), } + +function fileDiff(file: string, before: string, after: string): typeof FileDiff.Info.Type { + const counts = diffLines(before, after).reduce( + (result, item) => ({ + additions: result.additions + (item.added ? (item.count ?? 0) : 0), + deletions: result.deletions + (item.removed ? (item.count ?? 0) : 0), + }), + { additions: 0, deletions: 0 }, + ) + return { + file, + patch: createTwoFilesPatch(file, file, before, after), + status: "modified", + ...counts, + } +}