Skip to content

Commit

Permalink
[dev.typeparams] go/types: export the Config.GoVersion field
Browse files Browse the repository at this point in the history
Export the types.Config.GoVersion field, so that users can specify a
language compatibility version for go/types to enforce.

Updates #46648

Change-Id: I9e00122925faf0006cfb08c3f2d022619d5d54d5
Reviewed-on: https://go-review.googlesource.com/c/go/+/334533
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
  • Loading branch information
findleyr committed Jul 14, 2021
1 parent 5517053 commit 2b10d7f
Show file tree
Hide file tree
Showing 5 changed files with 6 additions and 13 deletions.
4 changes: 2 additions & 2 deletions src/go/types/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,12 +103,12 @@ type ImporterFrom interface {
// A Config specifies the configuration for type checking.
// The zero value for Config is a ready-to-use default configuration.
type Config struct {
// goVersion describes the accepted Go language version. The string
// GoVersion describes the accepted Go language version. The string
// must follow the format "go%d.%d" (e.g. "go1.12") or it must be
// empty; an empty string indicates the latest language version.
// If the format is invalid, invoking the type checker will cause a
// panic.
goVersion string
GoVersion string

// If IgnoreFuncBodies is set, function bodies are not
// type-checked.
Expand Down
4 changes: 2 additions & 2 deletions src/go/types/check.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,9 @@ func NewChecker(conf *Config, fset *token.FileSet, pkg *Package, info *Info) *Ch
info = new(Info)
}

version, err := parseGoVersion(conf.goVersion)
version, err := parseGoVersion(conf.GoVersion)
if err != nil {
panic(fmt.Sprintf("invalid Go version %q (%v)", conf.goVersion, err))
panic(fmt.Sprintf("invalid Go version %q (%v)", conf.GoVersion, err))
}

return &Checker{
Expand Down
2 changes: 1 addition & 1 deletion src/go/types/check_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ func testFiles(t *testing.T, sizes Sizes, filenames []string, srcs [][]byte, man
// typecheck and collect typechecker errors
var conf Config
conf.Sizes = sizes
SetGoVersion(&conf, goVersion)
conf.GoVersion = goVersion

// special case for importC.src
if len(filenames) == 1 {
Expand Down
3 changes: 1 addition & 2 deletions src/go/types/stdlib_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,7 @@ func testTestDir(t *testing.T, path string, ignore ...string) {
// parse and type-check file
file, err := parser.ParseFile(fset, filename, nil, 0)
if err == nil {
conf := Config{Importer: stdLibImporter}
SetGoVersion(&conf, goVersion)
conf := Config{GoVersion: goVersion, Importer: stdLibImporter}
_, err = conf.Check(filename, fset, []*ast.File{file}, nil)
}

Expand Down
6 changes: 0 additions & 6 deletions src/go/types/types_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,5 @@

package types

// SetGoVersion sets the unexported goVersion field on config, so that tests
// which assert on behavior for older Go versions can set it.
func SetGoVersion(config *Config, goVersion string) {
config.goVersion = goVersion
}

// Debug is set if go/types is built with debug mode enabled.
const Debug = debug

0 comments on commit 2b10d7f

Please sign in to comment.