mirror of
https://github.com/golang/go
synced 2024-11-22 01:44:40 -07:00
token/position: provide files iterator
R=golang-dev, r2 CC=golang-dev https://golang.org/cl/3541044
This commit is contained in:
parent
52c9fb6f3d
commit
6fcae0f044
@ -385,3 +385,25 @@ func (s *FileSet) AddFile(filename string, base, size int) *File {
|
|||||||
s.files = append(s.files, f)
|
s.files = append(s.files, f)
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Files returns the files added to the file set.
|
||||||
|
func (s *FileSet) Files() <-chan *File {
|
||||||
|
ch := make(chan *File)
|
||||||
|
go func() {
|
||||||
|
for i := 0; ; i++ {
|
||||||
|
var f *File
|
||||||
|
s.mutex.RLock()
|
||||||
|
if i < len(s.files) {
|
||||||
|
f = s.files[i]
|
||||||
|
}
|
||||||
|
s.mutex.RUnlock()
|
||||||
|
if f == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
ch <- f
|
||||||
|
}
|
||||||
|
close(ch)
|
||||||
|
}()
|
||||||
|
return ch
|
||||||
|
}
|
||||||
|
@ -138,3 +138,21 @@ func TestLineInfo(t *testing.T) {
|
|||||||
checkPos(t, msg, fset.Position(p), Position{"bar", offs, 42, col})
|
checkPos(t, msg, fset.Position(p), Position{"bar", offs, 42, col})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func TestFiles(t *testing.T) {
|
||||||
|
fset := NewFileSet()
|
||||||
|
for i, test := range tests {
|
||||||
|
fset.AddFile(test.filename, fset.Base(), test.size)
|
||||||
|
j := 0
|
||||||
|
for g := range fset.Files() {
|
||||||
|
if g.Name() != tests[j].filename {
|
||||||
|
t.Errorf("expected filename = %s; got %s", tests[j].filename, g.Name())
|
||||||
|
}
|
||||||
|
j++
|
||||||
|
}
|
||||||
|
if j != i+1 {
|
||||||
|
t.Errorf("expected %d files; got %d", i+1, j)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user