mirror of
https://github.com/golang/go
synced 2024-11-18 17:04:41 -07:00
cc9bfb3eec
It is now in the diff package written in terms of edits, instead of the myers package. This also means that the unified handling is no longer pluggable because it does not need to be. Change-Id: I7141b023e95ed0c1d21cbc81c7420c117fc5ef1a Reviewed-on: https://go-review.googlesource.com/c/tools/+/198517 Run-TryBot: Ian Cottrell <iancottrell@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org>
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
// Copyright 2019 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package diff supports a pluggable diff algorithm.
|
|
package diff
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"golang.org/x/tools/internal/span"
|
|
)
|
|
|
|
// TextEdit represents a change to a section of a document.
|
|
// The text within the specified span should be replaced by the supplied new text.
|
|
type TextEdit struct {
|
|
Span span.Span
|
|
NewText string
|
|
}
|
|
|
|
type ComputeEdits func(uri span.URI, before, after string) []TextEdit
|
|
|
|
type OpKind int
|
|
|
|
const (
|
|
Delete OpKind = iota
|
|
Insert
|
|
Equal
|
|
)
|
|
|
|
func (k OpKind) String() string {
|
|
switch k {
|
|
case Delete:
|
|
return "delete"
|
|
case Insert:
|
|
return "insert"
|
|
case Equal:
|
|
return "equal"
|
|
default:
|
|
panic("unknown operation kind")
|
|
}
|
|
}
|
|
|
|
// SortTextEdits attempts to order all edits by their starting points.
|
|
// The sort is stable so that edits with the same starting point will not
|
|
// be reordered.
|
|
func SortTextEdits(d []TextEdit) {
|
|
// Use a stable sort to maintain the order of edits inserted at the same position.
|
|
sort.SliceStable(d, func(i int, j int) bool {
|
|
return span.Compare(d[i].Span, d[j].Span) < 0
|
|
})
|
|
}
|