mirror of
https://github.com/golang/go
synced 2024-11-18 19:44:46 -07:00
go/packages: initialise Fset if mode >= Types
...as it is required not just for Syntax processing but also when loading export data. Clarify comments surrounding Types, Fset. Remove bogus comment re: Dir. Change-Id: I8d234bc311d73cbed4fd271ef883ebba22ba2708 Reviewed-on: https://go-review.googlesource.com/128595 Run-TryBot: Michael Matloob <matloob@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
parent
e832138124
commit
201986631b
@ -42,16 +42,16 @@ const (
|
||||
LoadImports
|
||||
|
||||
// LoadTypes adds type information for the package's exported symbols.
|
||||
// Package fields added: Types, IllTyped.
|
||||
// Package fields added: Types, Fset, IllTyped.
|
||||
LoadTypes
|
||||
|
||||
// LoadSyntax adds typed syntax trees for the packages matching the patterns.
|
||||
// Package fields added: Syntax, TypesInfo, Fset, for direct pattern matches only.
|
||||
// Package fields added: Syntax, TypesInfo, for direct pattern matches only.
|
||||
LoadSyntax
|
||||
|
||||
// LoadAllSyntax adds typed syntax trees for the packages matching the patterns
|
||||
// and all dependencies.
|
||||
// Package fields added: Syntax, TypesInfo, Fset, for all packages in import graph.
|
||||
// Package fields added: Syntax, TypesInfo, for all packages in import graph.
|
||||
LoadAllSyntax
|
||||
)
|
||||
|
||||
@ -95,7 +95,8 @@ type Config struct {
|
||||
// TODO(rsc): What happens in the Metadata loader? Currently nothing.
|
||||
Error func(error)
|
||||
|
||||
// Fset is the token.FileSet to use when parsing loaded source files.
|
||||
// Fset is the token.FileSet to use when parsing source files or
|
||||
// type information provided by the build system.
|
||||
// If Fset is nil, the loader will create one.
|
||||
Fset *token.FileSet
|
||||
|
||||
@ -199,8 +200,16 @@ type Package struct {
|
||||
|
||||
// Types is the type information for the package.
|
||||
// Modes LoadTypes and above set this field for all packages.
|
||||
//
|
||||
// TODO(adonovan): all packages? In Types mode this entails
|
||||
// asymptotically more export data processing than is required
|
||||
// to load the requested packages. Is that what we want?
|
||||
Types *types.Package
|
||||
|
||||
// Fset provides position information for Types, TypesInfo, and Syntax.
|
||||
// Modes LoadTypes and above set this for field for all packages.
|
||||
Fset *token.FileSet
|
||||
|
||||
// IllTyped indicates whether the package has any type errors.
|
||||
// Modes LoadTypes and above set this field for all packages.
|
||||
IllTyped bool
|
||||
@ -214,11 +223,6 @@ type Package struct {
|
||||
// TypesInfo is the type-checking results for the package's syntax trees.
|
||||
// It is set only when Syntax is set.
|
||||
TypesInfo *types.Info
|
||||
|
||||
// Fset is the token.FileSet for the package's syntax trees listed in Syntax.
|
||||
// It is set only when Syntax is set.
|
||||
// All packages loaded together share a single Fset.
|
||||
Fset *token.FileSet
|
||||
}
|
||||
|
||||
// loaderPackage augments Package with state used during the loading phase
|
||||
@ -250,17 +254,20 @@ func newLoader(cfg *Config) *loader {
|
||||
if ld.Context == nil {
|
||||
ld.Context = context.Background()
|
||||
}
|
||||
// Determine directory to be used for relative contains: paths.
|
||||
if ld.Dir == "" {
|
||||
if cwd, err := os.Getwd(); err == nil {
|
||||
ld.Dir = cwd
|
||||
}
|
||||
}
|
||||
if ld.Mode >= LoadSyntax {
|
||||
|
||||
if ld.Mode >= LoadTypes {
|
||||
if ld.Fset == nil {
|
||||
ld.Fset = token.NewFileSet()
|
||||
}
|
||||
|
||||
// Error and ParseFile are required even in LoadTypes mode
|
||||
// because we load source if export data is missing.
|
||||
|
||||
if ld.Error == nil {
|
||||
ld.Error = func(e error) {
|
||||
fmt.Fprintln(os.Stderr, e)
|
||||
|
Loading…
Reference in New Issue
Block a user