mmanela / diffplex

DiffPlex is Netstandard 1.0+ C# library to generate textual diffs.
Apache License 2.0
990 stars 183 forks source link

Unexpected line diffs when a code block is inserted after a previous difference #109

Open vsquared56 opened 1 year ago

vsquared56 commented 1 year ago

Hi, thanks for this project! I noticed the following issue which may come up when, for example, entire code blocks are inserted.

Consider these two simple .js files:

File1:

function foo() {
    console.log("foo");
}

File2:

function foo() {
    console.log("foo");
}

function bar() {
    console.log("bar");
}

Here, the line-level diff is expected, it's clear that all of bar() was inserted, along with its end brace: image

Now, consider a similar addition, but with a simple change inside foo():

File3:

function foo() {
    bar();
    console.log("foo");
}

function bar() {
    console.log("bar");
}

image

Comparing File1 with File3 shows the change begins at the end brace of foo(), and it's not immediately clear that a complete function was added.

Worth noting that this matches the behavior of GNU diff: image

But tools like DiffChecker.com give output that is potentially more useful: image