Commit 1ea0c480 authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder Committed by Robert Griesemer

go/token: rename RemoveLine to MergeLine, improve documentation

This is a follow-up to feedback from gri in
https://golang.org/cl/12837044/. Most of the wording
and naming improvements are lifted shamelessly from him.

R=gri
CC=golang-dev
https://golang.org/cl/13670043
parent 4874bc9b
......@@ -44,7 +44,7 @@ func SortImports(fset *token.FileSet, f *File) {
lastSpec := d.Specs[len(d.Specs)-1]
lastLine := fset.Position(lastSpec.Pos()).Line
if rParenLine := fset.Position(d.Rparen).Line; rParenLine > lastLine+1 {
fset.File(d.Rparen).RemoveLine(rParenLine - 1)
fset.File(d.Rparen).MergeLine(rParenLine - 1)
}
}
}
......@@ -146,7 +146,7 @@ func sortSpecs(fset *token.FileSet, f *File, specs []Spec) []Spec {
deduped = append(deduped, s)
} else {
p := s.Pos()
fset.File(p).RemoveLine(fset.Position(p).Line)
fset.File(p).MergeLine(fset.Position(p).Line)
}
}
specs = deduped
......
......@@ -97,7 +97,7 @@ type File struct {
size int // file size as provided to AddFile
// lines and infos are protected by set.mutex
lines []int
lines []int // lines contains the offset of the first character for each line (the first entry is always 0)
infos []lineInfo
}
......@@ -136,13 +136,27 @@ func (f *File) AddLine(offset int) {
f.set.mutex.Unlock()
}
// RemoveLine removes a line by line number as reported by Position.Line.
// MergeLine merges a line with the following line. It is akin to replacing
// the newline character at the end of the line with a space (to not change the
// remaining offsets). To obtain the line number, consult e.g. Position.Line.
// MergeLine will panic if given an invalid line number.
//
func (f *File) RemoveLine(line int) {
func (f *File) MergeLine(line int) {
if line <= 0 {
panic("illegal line number (line numbering starts at 1)")
}
f.set.mutex.Lock()
defer f.set.mutex.Unlock()
if line >= len(f.lines) {
panic("illegal line number")
}
// To merge the line numbered <line> with the line numbered <line+1>,
// we need to remove the entry in lines corresponding to the line
// numbered <line+1>. The entry in lines corresponding to the line
// numbered <line+1> is located at index <line>, since indices in lines
// are 0-based and line numbers are 1-based.
copy(f.lines[line:], f.lines[line+1:])
f.lines = f.lines[:len(f.lines)-1]
f.set.mutex.Unlock()
}
// SetLines sets the line offsets for a file and returns true if successful.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment