From: Alan Donovan Date: Wed, 1 Feb 2023 19:15:41 +0000 (-0500) Subject: go/token: add (*File).Lines method X-Git-Tag: go1.21rc1~1668 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=18772915a1b9ca211a4bb707de59ee0941b4773b;p=gostls13.git go/token: add (*File).Lines method This method returns the array updated by SetLines, for use in exporter packages. Fixes #57708 Change-Id: I12ed5e7e1bae7517f40cb25e76e51997c25d84f4 Reviewed-on: https://go-review.googlesource.com/c/go/+/464515 Reviewed-by: Robert Griesemer Reviewed-by: Robert Findley Run-TryBot: Alan Donovan TryBot-Result: Gopher Robot Auto-Submit: Alan Donovan --- diff --git a/api/next/57708.txt b/api/next/57708.txt new file mode 100644 index 0000000000..c7389adbd0 --- /dev/null +++ b/api/next/57708.txt @@ -0,0 +1 @@ +pkg go/token, method (*File) Lines() []int #57708 diff --git a/src/go/token/position.go b/src/go/token/position.go index cbc2ddb5eb..4d129d938f 100644 --- a/src/go/token/position.go +++ b/src/go/token/position.go @@ -159,6 +159,15 @@ func (f *File) MergeLine(line int) { f.lines = f.lines[:len(f.lines)-1] } +// Lines returns the effective line offset table of the form described by SetLines. +// Callers must not mutate the result. +func (f *File) Lines() []int { + f.mutex.Lock() + lines := f.lines + f.mutex.Unlock() + return lines +} + // SetLines sets the line offsets for a file and reports whether it succeeded. // The line offsets are the offsets of the first character of each line; // for instance for the content "ab\nc\n" the line offsets are {0, 3}. diff --git a/src/go/token/position_test.go b/src/go/token/position_test.go index 65cb242808..19774a97ba 100644 --- a/src/go/token/position_test.go +++ b/src/go/token/position_test.go @@ -130,6 +130,9 @@ func TestPositions(t *testing.T) { if f.LineCount() != len(test.lines) { t.Errorf("%s, SetLines: got line count %d; want %d", f.Name(), f.LineCount(), len(test.lines)) } + if !reflect.DeepEqual(f.Lines(), test.lines) { + t.Errorf("%s, Lines after SetLines(v): got %v; want %v", f.Name(), f.Lines(), test.lines) + } verifyPositions(t, fset, f, test.lines) // add lines with SetLinesForContent and verify all positions