1
0
mirror of https://github.com/golang/go synced 2024-11-19 00:34:40 -07:00
go/internal/lsp/cache/builtin.go
Rebecca Stambler 2dc213d980 internal/lsp: remove cachedFileToMapper function
This function incorrectly used cached packages to get ASTs and type
information that should have been directly found from the origin
package. Shift to using pkg.FindFile instead.

Change-Id: I9f73209bb1a1343f53b430150e78ffd180e14a44
Reviewed-on: https://go-review.googlesource.com/c/tools/+/195797
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
2019-09-17 03:27:47 +00:00

59 lines
1.4 KiB
Go

package cache
import (
"context"
"go/ast"
"golang.org/x/tools/go/packages"
"golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/span"
)
type builtinPkg struct {
pkg *ast.Package
files []source.ParseGoHandle
}
func (b *builtinPkg) Lookup(name string) *ast.Object {
if b == nil || b.pkg == nil || b.pkg.Scope == nil {
return nil
}
return b.pkg.Scope.Lookup(name)
}
func (b *builtinPkg) Files() []source.ParseGoHandle {
return b.files
}
// buildBuiltinPkg builds the view's builtin package.
// It assumes that the view is not active yet,
// i.e. it has not been added to the session's list of views.
func (view *view) buildBuiltinPackage(ctx context.Context) error {
cfg := view.Config(ctx)
pkgs, err := packages.Load(cfg, "builtin")
if err != nil {
return err
}
if len(pkgs) != 1 {
return err
}
pkg := pkgs[0]
files := make(map[string]*ast.File)
for _, filename := range pkg.GoFiles {
fh := view.session.GetFile(span.FileURI(filename))
ph := view.session.cache.ParseGoHandle(fh, source.ParseFull)
view.builtin.files = append(view.builtin.files, ph)
file, _, err := ph.Parse(ctx)
if file == nil {
return err
}
files[filename] = file
view.ignoredURIsMu.Lock()
view.ignoredURIs[span.NewURI(filename)] = struct{}{}
view.ignoredURIsMu.Unlock()
}
view.builtin.pkg, err = ast.NewPackage(cfg.Fset, files, nil, nil)
return err
}