Categorygithub.com/ogios/go-diffcontext
modulepackage
0.4.2
Repository: https://github.com/ogios/go-diffcontext.git
Documentation: pkg.go.dev

# README

go-diffcontext

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
}

State

There were 3 so called Operations 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 as diffmatchpatch.DiffDelete or diffmatchpatch.DiffInsert (package diffmatchpatch is from sergi/go-diff)
  • if slice of string in one line changed, the DiffLine will be marked as diffline.DiffChanged (package diffline is from this repo), and both line content before change and line content after change are in DiffLine.Before and DiffLine.After

Available funcs

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))
 }

Example

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())
}

# Functions

No description provided by the author
No description provided by the author

# Constants

No description provided by the author

# Structs

No description provided by the author
No description provided by the author
No description provided by the author