From fd24c77ec3296e45739a602f308e882112d097a0 Mon Sep 17 00:00:00 2001 From: Alex Bozhenko Date: Mon, 11 Sep 2023 23:39:38 -0700 Subject: [PATCH 1/8] split by dot --- src/cmd/fix/main.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/cmd/fix/main.go b/src/cmd/fix/main.go index 0f36fcc3123202..2fa6a15c84facf 100644 --- a/src/cmd/fix/main.go +++ b/src/cmd/fix/main.go @@ -73,11 +73,14 @@ func main() { 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 + version := (*goVersionStr)[len("go"):] + versionParts := strings.SplitN(version, ".", 3); + if len(versionParts) < 2 { + report(fmt.Errorf("invalid -go=%s", *goVersionStr)) + os.Exit(exitCode) } + majorStr := versionParts[0] + minorStr, _, _ := strings.Cut(versionParts[1], "rc") major, err1 := strconv.Atoi(majorStr) minor, err2 := strconv.Atoi(minorStr) if err1 != nil || err2 != nil || major < 0 || major >= 100 || minor < 0 || minor >= 100 { From 2abdd34458cbf412a87f01037ea3f36d39124660 Mon Sep 17 00:00:00 2001 From: Alex Bozhenko Date: Sun, 1 Oct 2023 00:31:41 -0700 Subject: [PATCH 2/8] address comments --- src/cmd/fix/main.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/cmd/fix/main.go b/src/cmd/fix/main.go index 2fa6a15c84facf..6a773c45a0e816 100644 --- a/src/cmd/fix/main.go +++ b/src/cmd/fix/main.go @@ -74,13 +74,12 @@ func main() { os.Exit(exitCode) } version := (*goVersionStr)[len("go"):] - versionParts := strings.SplitN(version, ".", 3); - if len(versionParts) < 2 { - report(fmt.Errorf("invalid -go=%s", *goVersionStr)) - os.Exit(exitCode) + f := strings.SplitN(version, ".", 3) + majorStr := f[0] + minorStr := "0" + if len(f) >= 1 { + minorStr, _, _ = strings.Cut(f[1], "rc") } - majorStr := versionParts[0] - minorStr, _, _ := strings.Cut(versionParts[1], "rc") major, err1 := strconv.Atoi(majorStr) minor, err2 := strconv.Atoi(minorStr) if err1 != nil || err2 != nil || major < 0 || major >= 100 || minor < 0 || minor >= 100 { From e8808ea481645d303e7ab8e8af3d50a98bfb7133 Mon Sep 17 00:00:00 2001 From: Alex Bozhenko Date: Fri, 2 Feb 2024 16:03:04 -0800 Subject: [PATCH 3/8] address comments --- src/cmd/fix/main.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cmd/fix/main.go b/src/cmd/fix/main.go index 6a773c45a0e816..2676c68e0d32fb 100644 --- a/src/cmd/fix/main.go +++ b/src/cmd/fix/main.go @@ -13,7 +13,7 @@ import ( "go/parser" "go/scanner" "go/token" - "internal/diff" + "go/version" "io" "io/fs" "os" @@ -21,6 +21,8 @@ import ( "sort" "strconv" "strings" + + "internal/diff" ) var ( @@ -73,12 +75,10 @@ func main() { report(fmt.Errorf("invalid -go=%s", *goVersionStr)) os.Exit(exitCode) } - version := (*goVersionStr)[len("go"):] - f := strings.SplitN(version, ".", 3) - majorStr := f[0] + majorStr := version.Lang(*goVersionStr) minorStr := "0" - if len(f) >= 1 { - minorStr, _, _ = strings.Cut(f[1], "rc") + if before, after, found := strings.Cut(majorStr, "."); found { + majorStr, minorStr = before, after } major, err1 := strconv.Atoi(majorStr) minor, err2 := strconv.Atoi(minorStr) From b0f236ee0e16d00d935a313a6d14ff5442c9dfca Mon Sep 17 00:00:00 2001 From: Alex Bozhenko Date: Fri, 2 Feb 2024 17:01:20 -0800 Subject: [PATCH 4/8] fix usage ov version.Lang --- src/cmd/fix/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/fix/main.go b/src/cmd/fix/main.go index 2676c68e0d32fb..a98bf6148ce71c 100644 --- a/src/cmd/fix/main.go +++ b/src/cmd/fix/main.go @@ -71,11 +71,11 @@ func main() { flag.Parse() if *goVersionStr != "" { - if !strings.HasPrefix(*goVersionStr, "go") { + if !version.IsValid(*goVersionStr) { report(fmt.Errorf("invalid -go=%s", *goVersionStr)) os.Exit(exitCode) } - majorStr := version.Lang(*goVersionStr) + majorStr := version.Lang(*goVersionStr)[len("go"):] minorStr := "0" if before, after, found := strings.Cut(majorStr, "."); found { majorStr, minorStr = before, after From 090ef7add96366494a2b854813a668b0087017fe Mon Sep 17 00:00:00 2001 From: Alex Bozhenko Date: Fri, 2 Feb 2024 19:50:52 -0800 Subject: [PATCH 5/8] use go/version to compare version cli arg --- src/cmd/fix/buildtag.go | 5 +++-- src/cmd/fix/buildtag_test.go | 4 ++-- src/cmd/fix/main.go | 28 +++++----------------------- src/cmd/fix/main_test.go | 9 +++++---- 4 files changed, 15 insertions(+), 31 deletions(-) diff --git a/src/cmd/fix/buildtag.go b/src/cmd/fix/buildtag.go index 5f4fbfef16f15b..81edffbdea268a 100644 --- a/src/cmd/fix/buildtag.go +++ b/src/cmd/fix/buildtag.go @@ -6,6 +6,7 @@ package main import ( "go/ast" + "go/version" "strings" ) @@ -13,7 +14,7 @@ func init() { register(buildtagFix) } -const buildtagGoVersionCutoff = 1_18 +const buildtagGoVersionCutoff = "go1.18" var buildtagFix = fix{ name: "buildtag", @@ -23,7 +24,7 @@ var buildtagFix = fix{ } func buildtag(f *ast.File) bool { - if goVersion < buildtagGoVersionCutoff { + if version.Compare(*goVersion, buildtagGoVersionCutoff) == -1 { return false } diff --git a/src/cmd/fix/buildtag_test.go b/src/cmd/fix/buildtag_test.go index 1c6efbe9e03262..4a25406872367b 100644 --- a/src/cmd/fix/buildtag_test.go +++ b/src/cmd/fix/buildtag_test.go @@ -11,7 +11,7 @@ func init() { var buildtagTests = []testCase{ { Name: "buildtag.oldGo", - Version: 1_10, + Version: "go1_10", In: `//go:build yes // +build yes @@ -20,7 +20,7 @@ package main }, { Name: "buildtag.new", - Version: 1_99, + Version: "go1_99", In: `//go:build yes // +build yes diff --git a/src/cmd/fix/main.go b/src/cmd/fix/main.go index a98bf6148ce71c..ffa2426036cb92 100644 --- a/src/cmd/fix/main.go +++ b/src/cmd/fix/main.go @@ -19,7 +19,6 @@ import ( "os" "path/filepath" "sort" - "strconv" "strings" "internal/diff" @@ -39,10 +38,8 @@ var forceRewrites = flag.String("force", "", 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 @@ -70,24 +67,9 @@ func main() { flag.Usage = usage flag.Parse() - if *goVersionStr != "" { - if !version.IsValid(*goVersionStr) { - report(fmt.Errorf("invalid -go=%s", *goVersionStr)) - os.Exit(exitCode) - } - majorStr := version.Lang(*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)) diff --git a/src/cmd/fix/main_test.go b/src/cmd/fix/main_test.go index cafd116cfd6b35..e8e1a516b49776 100644 --- a/src/cmd/fix/main_test.go +++ b/src/cmd/fix/main_test.go @@ -8,16 +8,17 @@ import ( "fmt" "go/ast" "go/parser" - "internal/diff" - "internal/testenv" "strings" "testing" + + "internal/diff" + "internal/testenv" ) type testCase struct { Name string Fn func(*ast.File) bool - Version int + Version string In string Out string } @@ -96,7 +97,7 @@ func TestRewrite(t *testing.T) { 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 From 284d4333e723b2daf29f756948dca412f3e768d1 Mon Sep 17 00:00:00 2001 From: Alex Bozhenko Date: Wed, 7 Feb 2024 07:11:46 -0800 Subject: [PATCH 6/8] fix build tags --- src/cmd/fix/buildtag_test.go | 4 ++-- src/cmd/fix/main_test.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cmd/fix/buildtag_test.go b/src/cmd/fix/buildtag_test.go index 4a25406872367b..e5997043c2115e 100644 --- a/src/cmd/fix/buildtag_test.go +++ b/src/cmd/fix/buildtag_test.go @@ -11,7 +11,7 @@ func init() { var buildtagTests = []testCase{ { Name: "buildtag.oldGo", - Version: "go1_10", + Version: "go1.10", In: `//go:build yes // +build yes @@ -20,7 +20,7 @@ package main }, { Name: "buildtag.new", - Version: "go1_99", + Version: "go1.99", In: `//go:build yes // +build yes diff --git a/src/cmd/fix/main_test.go b/src/cmd/fix/main_test.go index e8e1a516b49776..fd2616dba9a08a 100644 --- a/src/cmd/fix/main_test.go +++ b/src/cmd/fix/main_test.go @@ -106,10 +106,10 @@ func TestRewrite(t *testing.T) { t.Parallel() } } else { - old := goVersion - goVersion = tt.Version + old := *goVersion + *goVersion = tt.Version defer func() { - goVersion = old + *goVersion = old }() } From b41219c97559eac789237752b706fed782c7bc99 Mon Sep 17 00:00:00 2001 From: Alex Bozhenko Date: Wed, 7 Feb 2024 07:13:05 -0800 Subject: [PATCH 7/8] fix comparison --- src/cmd/fix/buildtag.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/fix/buildtag.go b/src/cmd/fix/buildtag.go index 81edffbdea268a..6b706c4cb5a7fb 100644 --- a/src/cmd/fix/buildtag.go +++ b/src/cmd/fix/buildtag.go @@ -24,7 +24,7 @@ var buildtagFix = fix{ } func buildtag(f *ast.File) bool { - if version.Compare(*goVersion, buildtagGoVersionCutoff) == -1 { + if version.Compare(*goVersion, buildtagGoVersionCutoff) < 0 { return false } From 76bced5c48334c0937289bce8bcf50f82e3f0b98 Mon Sep 17 00:00:00 2001 From: Alex Bozhenko Date: Wed, 7 Feb 2024 07:16:16 -0800 Subject: [PATCH 8/8] fix order of imports --- src/cmd/fix/main.go | 3 +-- src/cmd/fix/main_test.go | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/cmd/fix/main.go b/src/cmd/fix/main.go index ffa2426036cb92..db67b4ba07a55e 100644 --- a/src/cmd/fix/main.go +++ b/src/cmd/fix/main.go @@ -14,14 +14,13 @@ import ( "go/scanner" "go/token" "go/version" + "internal/diff" "io" "io/fs" "os" "path/filepath" "sort" "strings" - - "internal/diff" ) var ( diff --git a/src/cmd/fix/main_test.go b/src/cmd/fix/main_test.go index fd2616dba9a08a..8d841b101fe4c0 100644 --- a/src/cmd/fix/main_test.go +++ b/src/cmd/fix/main_test.go @@ -8,11 +8,10 @@ import ( "fmt" "go/ast" "go/parser" - "strings" - "testing" - "internal/diff" "internal/testenv" + "strings" + "testing" ) type testCase struct {