sergi / go-diff

Diff, match and patch text in Go
MIT License
1.84k stars 210 forks source link

Implement a line-by-line diff output #69

Open zimmski opened 7 years ago

zimmski commented 7 years ago

At the moment it is only easy to output inline diff outputs but something like this https://github.com/sergi/go-diff/pull/67/files?diff=unified would be a nice addition for the output functions.

mingrammer commented 4 years ago

any update?

mgale commented 4 years ago

I came across this issue also looking for a line by line output or maybe a unified view. I was able to meet my requirements after reviewing: https://github.com/google/diff-match-patch/wiki/Line-or-Word-Diffs and following the example there but in go-diff:

sample code:

dmp := diffmatchpatch.New()

fileAdmp, fileBdmp, dmpStrings := dmp.DiffLinesToChars(fileAtext, fileBtext)
diffs := dmp.DiffMain(fileAdmp, fileBdmp, false)
diffs = dmp.DiffCharsToLines(diffs, dmpStrings)
diffs = dmp.DiffCleanupSemantic(diffs)

Then using the dmp.DiffPrettyText(diffs) output I can see entire lines are being replaced, which is easier to read. I think that method would allow for a DiffPrettyTextLine function which instead of colours can offer a more unified diff like view, with plus minus or greater than less than options?

mgale commented 4 years ago

I didn't realize it at the time but it also improves the PatchToText output:

List of patches
@@ -31,41 +31,43 @@
 ing%0A
-This same is unique to this file%0A
+A line that is new in the new file%0A
 thre