You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
multilinediff/reporter.go

55 lines
900 B
Go

package prettyreporter
import (
"fmt"
"strings"
"github.com/google/go-cmp/cmp"
)
type Reporter struct {
path cmp.Path
old []string
new []string
diffCount int
}
func (r *Reporter) PushStep(ps cmp.PathStep) {
r.path = append(r.path, ps)
}
func (r *Reporter) Report(rs cmp.Result) {
vOld, vNew := r.path.Last().Values()
if !rs.Equal() {
r.diffCount++
if vOld.IsValid() {
r.old = append(r.old, fmt.Sprintf("%+v", vOld))
}
if vNew.IsValid() {
r.new = append(r.new, fmt.Sprintf("%+v", vNew))
}
} else {
r.old = append(r.old, "")
r.new = append(r.new, fmt.Sprintf("%+v", vOld))
}
}
func (r *Reporter) PopStep() {
r.path = r.path[:len(r.path)-1]
}
func (r *Reporter) String() string {
return strings.Join(r.lines, "\n")
}
func maxLen(strs []string) int {
max := 0
for _, s := range strs {
if len(s) > max {
max = len(s)
}
}
return max
}