Based on
sergi/go-diff
Transform from
// Diff represents one diff operation
type Diff struct {
Type Operation
Text string
}
To
type DiffLine struct {
Before []byte
After []byte
State diffmatchpatch.Operation
}
There were 3 so called Operation
s in sergi/go-diff
which are:
const (
// DiffDelete item represents a delete diff.
DiffDelete Operation = -1
// DiffInsert item represents an insert diff.
DiffInsert Operation = 1
// DiffEqual item represents an equal diff.
DiffEqual Operation = 0
But in here we added one more state to clarify line change and slice of content change inside a line
- if a line is removed or inserted, the
DiffLine
will be marked asdiffmatchpatch.DiffDelete
ordiffmatchpatch.DiffInsert
(packagediffmatchpatch
is fromsergi/go-diff
) - if slice of string in one line changed, the
DiffLine
will be marked asdiffline.DiffChanged
(packagediffline
is from this repo), and both line content before change and line content after change are inDiffLine.Before
andDiffLine.After
Able to get both content before and after change by GetBefore
and GetAfter
Also able to get mixed diff content with GetMixed
dc.GetMixed():
package main
import (
"fmt"
"github.com/sergi/go-diff/diffmatchpatch"
)
const (
text1 = "Lorem ipsum dolor."
- text2 = "Lorem dolor sit amet."
+ text2 = "Lorem sit amet."
)
func main() {
- dmp := diffmatchpatch.New()
-
diffs := dmp.DiffMain(text1, text2, false)
+ dmp := diffmatchpatch.New()
+
fmt.Println(dmp.DiffPrettyText(diffs))
}
import (
"fmt"
"time"
"github.com/ogios/go-diffcontext/diffline"
"github.com/sergi/go-diff/diffmatchpatch"
)
const code1 = `
const (
text1 = "Lorem ipsum dolor."
text2 = "Lorem dolor sit amet."
)
`
const code2 = `
const (
text2 = "Lorem sit amet."
)
`
package main
func main() {
dmp := diffmatchpatch.New()
diffs := dmp.DiffMain(code1, code2, true)
diffs = dmp.DiffCleanupSemantic(diffs)
diffs = dmp.DiffCleanupSemantic(diffs)
dc := diffline.New()
dc.AddDiffs(diffs)
fmt.Printf("dc.Lines: %v\n", dc.Lines)
fmt.Printf("dc.GetBefore(): %v\n", dc.GetBefore())
fmt.Printf("dc.GetAfter(): %v\n", dc.GetAfter())
fmt.Printf("dc.GetMixed(): %v\n", dc.GetMixed())
}