import (
"go/ast"
+ "go/version"
"strings"
)
register(buildtagFix)
}
-const buildtagGoVersionCutoff = 1_18
+const buildtagGoVersionCutoff = "go1.18"
var buildtagFix = fix{
name: "buildtag",
}
func buildtag(f *ast.File) bool {
- if goVersion < buildtagGoVersionCutoff {
+ if version.Compare(*goVersion, buildtagGoVersionCutoff) < 0 {
return false
}
"go/parser"
"go/scanner"
"go/token"
+ "go/version"
"internal/diff"
"io"
"io/fs"
"os"
"path/filepath"
"sort"
- "strconv"
"strings"
)
var allowed, force map[string]bool
var (
- doDiff = flag.Bool("diff", false, "display diffs instead of rewriting files")
- goVersionStr = flag.String("go", "", "go language version for files")
-
- goVersion int // 115 for go1.15
+ doDiff = flag.Bool("diff", false, "display diffs instead of rewriting files")
+ goVersion = flag.String("go", "", "go language version for files")
)
// enable for debugging fix failures
flag.Usage = usage
flag.Parse()
- if *goVersionStr != "" {
- if !strings.HasPrefix(*goVersionStr, "go") {
- report(fmt.Errorf("invalid -go=%s", *goVersionStr))
- os.Exit(exitCode)
- }
- majorStr := (*goVersionStr)[len("go"):]
- minorStr := "0"
- if before, after, found := strings.Cut(majorStr, "."); found {
- majorStr, minorStr = before, after
- }
- major, err1 := strconv.Atoi(majorStr)
- minor, err2 := strconv.Atoi(minorStr)
- if err1 != nil || err2 != nil || major < 0 || major >= 100 || minor < 0 || minor >= 100 {
- report(fmt.Errorf("invalid -go=%s", *goVersionStr))
- os.Exit(exitCode)
- }
-
- goVersion = major*100 + minor
+ if !version.IsValid(*goVersion) {
+ report(fmt.Errorf("invalid -go=%s", *goVersion))
+ os.Exit(exitCode)
}
sort.Sort(byDate(fixes))
type testCase struct {
Name string
Fn func(*ast.File) bool
- Version int
+ Version string
In string
Out string
}
for _, tt := range testCases {
tt := tt
t.Run(tt.Name, func(t *testing.T) {
- if tt.Version == 0 {
+ if tt.Version == "" {
if testing.Verbose() {
// Don't run in parallel: cmd/fix sometimes writes directly to stderr,
// and since -v prints which test is currently running we want that
t.Parallel()
}
} else {
- old := goVersion
- goVersion = tt.Version
+ old := *goVersion
+ *goVersion = tt.Version
defer func() {
- goVersion = old
+ *goVersion = old
}()
}