diff --git a/src/renderer/src/components/editor/pierre-diff/pierre-diff-search-view.test.ts b/src/renderer/src/components/editor/pierre-diff/pierre-diff-search-view.test.ts index b08c7bfbc3f..619d5af3c70 100644 --- a/src/renderer/src/components/editor/pierre-diff/pierre-diff-search-view.test.ts +++ b/src/renderer/src/components/editor/pierre-diff/pierre-diff-search-view.test.ts @@ -33,3 +33,17 @@ it('does not feed a pure-deletion line number to revealLine', () => { expect(revealed).toBeGreaterThanOrEqual(hunk.additionStart) expect(revealed).toBeLessThanOrEqual(additionEnd) }) + +it('maps a fully deleted file onto the empty new-file hunk start', () => { + const diff = buildPierreFileDiff({ + ...input, + status: 'deleted', + originalContent: `${'keep\n'.repeat(40)}${'drop\n'.repeat(10)}GONE\n${'keep\n'.repeat(40)}old\n`, + modifiedContent: '' + }) + expect(diff.additionLines).toHaveLength(0) + expect(diff.hunks[0]?.additionStart).toBe(0) + expect(diff.hunks[0]?.additionCount).toBe(0) + // FileDiff.revealLine uses 1-based new-file ranges; +0,0 becomes [1, 1). + expect(pierreSearchRevealLine(diff, 51, 'deletions')).toBe(1) +}) diff --git a/src/renderer/src/components/editor/pierre-diff/pierre-diff-search-view.ts b/src/renderer/src/components/editor/pierre-diff/pierre-diff-search-view.ts index 25379425227..a6d56fd33aa 100644 --- a/src/renderer/src/components/editor/pierre-diff/pierre-diff-search-view.ts +++ b/src/renderer/src/components/editor/pierre-diff/pierre-diff-search-view.ts @@ -146,8 +146,8 @@ export function pierreSearchRevealLine( if (side === 'additions') { return lineNumber } - // revealLine is new-file only; never pass a pure-deletion old-file number. - let modifiedLine = 0 + // revealLine is new-file only; +0,0 (fully deleted) is range [1, 1), not 0. + let modifiedLine = 1 let found = false iterateOverDiff({ diff,