diff --git a/extensions/git/src/staging.ts b/extensions/git/src/staging.ts index c2af4a575b5..36e9c6f26e1 100644 --- a/extensions/git/src/staging.ts +++ b/extensions/git/src/staging.ts @@ -109,12 +109,28 @@ export function intersectDiffWithRange(textDocument: TextDocument, diff: LineCha if (diff.modifiedEndLineNumber === 0) { return diff; } else { - return { - originalStartLineNumber: diff.originalStartLineNumber, - originalEndLineNumber: diff.originalEndLineNumber, - modifiedStartLineNumber: intersection.start.line + 1, - modifiedEndLineNumber: intersection.end.line + 1 - }; + const modifiedStartLineNumber = intersection.start.line + 1; + const modifiedEndLineNumber = intersection.end.line + 1; + + // heuristic: same number of lines on both sides, let's assume line by line + if (diff.originalEndLineNumber - diff.originalStartLineNumber === diff.modifiedEndLineNumber - diff.modifiedStartLineNumber) { + const delta = modifiedStartLineNumber - diff.modifiedStartLineNumber; + const length = modifiedEndLineNumber - modifiedStartLineNumber; + + return { + originalStartLineNumber: diff.originalStartLineNumber + delta, + originalEndLineNumber: diff.originalStartLineNumber + delta + length, + modifiedStartLineNumber, + modifiedEndLineNumber + }; + } else { + return { + originalStartLineNumber: diff.originalStartLineNumber, + originalEndLineNumber: diff.originalEndLineNumber, + modifiedStartLineNumber, + modifiedEndLineNumber + }; + } } }