Skip to content

Commit 0573fa0

Browse files
authored
Add support for multiline diff with capture mode.
1 parent 6877a91 commit 0573fa0

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/SimpleDiff.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,25 @@ public function compare(string $left, string $right, bool $strict = false): Diff
1919
$to = explode("\n", $right);
2020
$padLength = strlen((string) max(count($from), count($to)));
2121
$changedLines = [];
22+
$captureBuffer = [];
2223

2324
for ($i = 0; isset($from[$i]); $i++) {
2425
$original = $from[$i] ?? '';
2526
$target = $to[$i] ?? '';
2627
$lineNumber = str_pad((string) ($i + 1), $padLength, ' ', STR_PAD_LEFT) . '| ';
2728
if ($original === $target) {
29+
if ($captureBuffer !== []) {
30+
foreach ($captureBuffer as $captureType => $captureLines) {
31+
foreach ($captureLines as $captureLine) {
32+
$return[] = $captureLine;
33+
}
34+
}
35+
$captureBuffer = [];
36+
}
2837
$return[] = ' ' . $lineNumber . $original;
2938
} else {
30-
$return[] = '- ' . $lineNumber . $this->prettyRender($original);
31-
$return[] = '+ ' . $lineNumber . $this->prettyRender($target);
39+
$captureBuffer['-'][] = '- ' . $lineNumber . $this->prettyRender($original);
40+
$captureBuffer['+'][] = '+ ' . $lineNumber . $this->prettyRender($target);
3241
$changedLines[] = $i + 1;
3342
}
3443
}

0 commit comments

Comments
 (0)