From e6c5e2b90ac1785a3c969bdcda9630c264dd9711 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 26 Apr 2026 22:32:54 +0000 Subject: [PATCH 1/2] Upgrade to Go 1.26 and apply go fix Bump go directive in both modules to 1.26 and apply the modernization fixes that go fix produces under the new toolchain (range-over-int, strings.SplitSeq, strings.Cut, interface{} -> any). --- ast/base_test.go | 4 ++-- ast/misc.go | 2 +- generate_keyword/genkeyword.go | 2 +- go.mod | 2 +- goyacc/go.mod | 2 +- parser/consistent_test.go | 6 +++--- parser/hintparser_test.go | 18 +++++++++--------- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ast/base_test.go b/ast/base_test.go index c480610..024e41a 100644 --- a/ast/base_test.go +++ b/ast/base_test.go @@ -294,7 +294,7 @@ func buildNoQuotesClause() string { func buildMixedQuery(n int) string { var b strings.Builder b.WriteString("SELECT * FROM t1 WHERE ") - for i := 0; i < n; i++ { + for i := range n { if i > 0 { b.WriteString(" OR ") } @@ -310,7 +310,7 @@ func buildMixedQuery(n int) string { func buildQuery(clause string, n int) string { var b strings.Builder b.WriteString("SELECT * FROM t1 WHERE ") - for i := 0; i < n; i++ { + for i := range n { if i > 0 { b.WriteString(" OR ") } diff --git a/ast/misc.go b/ast/misc.go index 32b8acf..fa81fc7 100644 --- a/ast/misc.go +++ b/ast/misc.go @@ -3993,7 +3993,7 @@ type HintTimeRange struct { // will be parsed into a LeadingList like: // Items = [HintTable("a"), LeadingList{[HintTable("b"), HintTable("c")]}, HintTable("d")] type LeadingList struct { - Items []interface{} + Items []any } // HintSetVar is the payload of `SET_VAR` hint diff --git a/generate_keyword/genkeyword.go b/generate_keyword/genkeyword.go index b6d746f..8179787 100644 --- a/generate_keyword/genkeyword.go +++ b/generate_keyword/genkeyword.go @@ -110,7 +110,7 @@ func main() { } section := sectionNone - for _, line := range strings.Split(string(parserData), "\n") { + for line := range strings.SplitSeq(string(parserData), "\n") { if line == "" { // Empty line indicates section end section = sectionNone } else if strings.Contains(line, reservedKeywordStart) { diff --git a/go.mod b/go.mod index 042ce88..2d0ecb0 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,5 @@ module github.com/sqlc-dev/marino -go 1.25 +go 1.26 require golang.org/x/text v0.19.0 diff --git a/goyacc/go.mod b/goyacc/go.mod index f0bbee2..20bacb6 100644 --- a/goyacc/go.mod +++ b/goyacc/go.mod @@ -1,6 +1,6 @@ module github.com/sqlc-dev/marino/goyacc -go 1.25 +go 1.26 require ( github.com/sqlc-dev/marino v0.0.0 diff --git a/parser/consistent_test.go b/parser/consistent_test.go index 121b755..32b89dd 100644 --- a/parser/consistent_test.go +++ b/parser/consistent_test.go @@ -81,11 +81,11 @@ func extractMiddle(str, startMarker, endMarker string) string { return "" } str = str[startIdx+len(startMarker):] - endIdx := strings.Index(str, endMarker) - if endIdx == -1 { + before, _, ok := strings.Cut(str, endMarker) + if !ok { return "" } - return str[:endIdx] + return before } func extractQuotedWords(strs []string) []string { diff --git a/parser/hintparser_test.go b/parser/hintparser_test.go index 0d93317..4f79856 100644 --- a/parser/hintparser_test.go +++ b/parser/hintparser_test.go @@ -374,13 +374,13 @@ func TestParseHint(t *testing.T) { { HintName: ast.NewCIStr("LEADING"), HintData: &ast.LeadingList{ - Items: []interface{}{ + Items: []any{ &ast.HintTable{TableName: ast.NewCIStr("a")}, &ast.LeadingList{ - Items: []interface{}{ + Items: []any{ &ast.HintTable{TableName: ast.NewCIStr("b")}, &ast.LeadingList{ - Items: []interface{}{ + Items: []any{ &ast.HintTable{TableName: ast.NewCIStr("c")}, &ast.HintTable{TableName: ast.NewCIStr("d")}, }, @@ -404,7 +404,7 @@ func TestParseHint(t *testing.T) { { HintName: ast.NewCIStr("LEADING"), HintData: &ast.LeadingList{ - Items: []interface{}{ + Items: []any{ &ast.HintTable{TableName: ast.NewCIStr("a")}, &ast.HintTable{TableName: ast.NewCIStr("b")}, &ast.HintTable{TableName: ast.NewCIStr("c")}, @@ -424,15 +424,15 @@ func TestParseHint(t *testing.T) { { HintName: ast.NewCIStr("LEADING"), HintData: &ast.LeadingList{ - Items: []interface{}{ + Items: []any{ &ast.LeadingList{ - Items: []interface{}{ + Items: []any{ &ast.HintTable{TableName: ast.NewCIStr("a")}, &ast.HintTable{TableName: ast.NewCIStr("b")}, }, }, &ast.LeadingList{ - Items: []interface{}{ + Items: []any{ &ast.HintTable{TableName: ast.NewCIStr("c")}, &ast.HintTable{TableName: ast.NewCIStr("d")}, }, @@ -454,10 +454,10 @@ func TestParseHint(t *testing.T) { { HintName: ast.NewCIStr("LEADING"), HintData: &ast.LeadingList{ - Items: []interface{}{ + Items: []any{ &ast.HintTable{TableName: ast.NewCIStr("x")}, &ast.LeadingList{ - Items: []interface{}{ + Items: []any{ &ast.HintTable{TableName: ast.NewCIStr("y")}, &ast.HintTable{TableName: ast.NewCIStr("z")}, }, From f5395c9c18f0b6d8c11b63c1fb3a8cf7ece60762 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 26 Apr 2026 22:57:12 +0000 Subject: [PATCH 2/2] Fix go vet warnings and run vet in CI - Pass a constant format string to yylex.Errorf in parser.y so go vet's printf check is satisfied; regenerate parser/parser.go. - Discard the unused fmt.Sprintf result in BenchmarkDigestSprintf. - Bump CI Go version to 1.26 and add a go vet step. --- .github/workflows/go.yml | 5 ++++- parser/digester_test.go | 2 +- parser/parser.go | 2 +- parser/parser.y | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index d4299d1..4f4ca68 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -14,7 +14,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.25' + go-version: '1.26' - name: Regenerate parser run: | @@ -31,5 +31,8 @@ jobs: - name: Build run: go build ./... + - name: Vet + run: go vet ./... + - name: Test run: go test ./... diff --git a/parser/digester_test.go b/parser/digester_test.go index 219caa9..72889da 100644 --- a/parser/digester_test.go +++ b/parser/digester_test.go @@ -296,6 +296,6 @@ func BenchmarkDigestSprintf(b *testing.B) { digest1 := genRandDigest("abc") b.ResetTimer() for i := 0; i < b.N; i++ { - fmt.Sprintf("%x", digest1) + _ = fmt.Sprintf("%x", digest1) } } diff --git a/parser/parser.go b/parser/parser.go index 496e220..6f95ad7 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -18072,7 +18072,7 @@ yynewstate: { v, rangeErrMsg := getInt64FromNUM(yyS[yypt-0].item) if len(rangeErrMsg) != 0 { - yylex.AppendError(yylex.Errorf(rangeErrMsg)) + yylex.AppendError(yylex.Errorf("%s", rangeErrMsg)) return 1 } parser.yyVAL.item = v diff --git a/parser/parser.y b/parser/parser.y index c45dc1d..f5edb2a 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -6456,7 +6456,7 @@ Int64Num: { v, rangeErrMsg := getInt64FromNUM($1) if len(rangeErrMsg) != 0 { - yylex.AppendError(yylex.Errorf(rangeErrMsg)) + yylex.AppendError(yylex.Errorf("%s", rangeErrMsg)) return 1 } $$ = v