}
// A Checker maintains the state of the type checker.
-// It must be created with NewChecker.
+// It must be created with [NewChecker].
type Checker struct {
// package information
// (initialized by NewChecker, valid for the life-time of checker)
check.cleaners = append(check.cleaners, c)
}
-// NewChecker returns a new Checker instance for a given package.
-// Package files may be added incrementally via checker.Files.
+// NewChecker returns a new [Checker] instance for a given package.
+// [Package] files may be added incrementally via checker.Files.
func NewChecker(conf *Config, fset *token.FileSet, pkg *Package, info *Info) *Checker {
// make sure we have a configuration
if conf == nil {
}
}
+ // collect file versions
for _, file := range check.files {
- fbase := file.FileStart
- check.recordFileVersion(fbase, check.version) // record package version (possibly zero version)
- v, _ := parseGoVersion(file.GoVersion)
- if v.major > 0 {
+ check.recordFileVersion(file, check.conf.GoVersion)
+ if v, _ := parseGoVersion(file.GoVersion); v.major > 0 {
if v.equal(check.version) {
continue
}
if check.posVers == nil {
check.posVers = make(map[token.Pos]version)
}
- check.posVers[fbase] = v
- check.recordFileVersion(fbase, v) // overwrite package version
+ check.posVers[file.FileStart] = v
+ check.recordFileVersion(file, file.GoVersion) // overwrite package version
}
}
}
-// A posVers records that the file starting at pos declares the Go version vers.
-type posVers struct {
- pos token.Pos
- vers version
-}
-
// A bailout panic is used for early termination.
type bailout struct{}
}
}
-func (check *Checker) recordFileVersion(pos token.Pos, v version) {
- if m := check._FileVersions; m != nil {
- m[pos] = _Version{v.major, v.minor}
+func (check *Checker) recordFileVersion(file *ast.File, version string) {
+ if m := check.FileVersions; m != nil {
+ m[file] = version
}
}