From 0d3172e95ef8113beedeb457ffb3a0e333e24770 Mon Sep 17 00:00:00 2001 From: Klaus Post Date: Tue, 28 Oct 2025 09:11:06 +0100 Subject: [PATCH] Go modernize + upgrade Go * Ran `go run golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest -fix -test ./...` * Minimum Go version 1.23 (removed build tags) * Upgrade tinygo --- .github/workflows/test.yml | 2 +- .github/workflows/validate.yml | 4 +- Makefile | 4 +- gen/elem.go | 8 +- gen/encode.go | 2 +- gen/marshal.go | 2 +- gen/spec.go | 2 +- go.mod | 2 +- issue185_test.go | 4 +- main.go | 2 +- msgp/edit.go | 2 +- msgp/edit_test.go | 2 +- msgp/elsize_default.go | 2 +- msgp/elsize_test.go | 4 +- msgp/errors.go | 2 +- msgp/errors_default.go | 2 +- msgp/errors_test.go | 1 - msgp/extension_test.go | 8 +- msgp/fuzz_test.go | 4 +- msgp/iter.go | 2 - msgp/iter_test.go | 178 +++++++-------------------------- msgp/json_bytes.go | 4 +- msgp/json_bytes_test.go | 4 +- msgp/json_test.go | 12 +-- msgp/number_test.go | 2 +- msgp/read.go | 14 +-- msgp/read_bytes.go | 14 +-- msgp/read_bytes_test.go | 10 +- msgp/read_test.go | 30 +++--- msgp/write.go | 14 +-- msgp/write_bytes.go | 10 +- msgp/write_bytes_test.go | 42 ++++---- msgp/write_test.go | 14 +-- parse/directives.go | 4 +- parse/getast.go | 6 +- printer/print.go | 2 +- 36 files changed, 154 insertions(+), 267 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 637dc98b..49b959a0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,7 @@ jobs: test: strategy: matrix: - go-version: [1.22.x, 1.23.x, 1.24.x] + go-version: [1.23.x, 1.24.x, 1.25.x] os: [ubuntu-latest] runs-on: ${{ matrix.os }} timeout-minutes: 10 diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index e4766251..62015cdf 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -21,7 +21,7 @@ jobs: linters: strategy: matrix: - go-version: [1.24.x] + go-version: [1.25.x] os: [ubuntu-latest] runs-on: ${{ matrix.os }} timeout-minutes: 10 @@ -35,5 +35,5 @@ jobs: - name: lint uses: golangci/golangci-lint-action@v8 with: - version: v2.1.6 + version: v2.5.0 args: --print-resources-usage --timeout=10m --verbose diff --git a/Makefile b/Makefile index a40ba2e1..086a37f0 100644 --- a/Makefile +++ b/Makefile @@ -55,8 +55,8 @@ ci: prepare if [ `arch` == 'x86_64' ]; then \ sudo apt-get -y -q update; \ sudo apt-get -y -q install build-essential; \ - wget -q https://github.com/tinygo-org/tinygo/releases/download/v0.38.0/tinygo_0.38.0_amd64.deb; \ - sudo dpkg -i tinygo_0.38.0_amd64.deb; \ + wget -q https://github.com/tinygo-org/tinygo/releases/download/v0.39.0/tinygo_0.39.0_amd64.deb; \ + sudo dpkg -i tinygo_0.39.0_amd64.deb; \ export PATH=$$PATH:/usr/local/tinygo/bin; \ fi go test -v ./... ./_generated diff --git a/gen/elem.go b/gen/elem.go index 7868a3d9..bcf3c0e6 100644 --- a/gen/elem.go +++ b/gen/elem.go @@ -2,6 +2,7 @@ package gen import ( "fmt" + "slices" "strings" ) @@ -601,12 +602,7 @@ func (sf *StructField) HasTagPart(pname string) bool { if len(sf.FieldTagParts) < 2 { return false } - for _, p := range sf.FieldTagParts[1:] { - if p == pname { - return true - } - } - return false + return slices.Contains(sf.FieldTagParts[1:], pname) } type ShimMode int diff --git a/gen/encode.go b/gen/encode.go index 78613821..2b8bd7e8 100644 --- a/gen/encode.go +++ b/gen/encode.go @@ -27,7 +27,7 @@ func (e *encodeGen) Apply(dirs []string) error { return nil } -func (e *encodeGen) writeAndCheck(typ string, argfmt string, arg interface{}) { +func (e *encodeGen) writeAndCheck(typ string, argfmt string, arg any) { if e.ctx.compFloats && typ == "Float64" { typ = "Float" } diff --git a/gen/marshal.go b/gen/marshal.go index 5ce6c585..e68464ad 100644 --- a/gen/marshal.go +++ b/gen/marshal.go @@ -62,7 +62,7 @@ func (m *marshalGen) Execute(p Elem, ctx Context) error { return m.p.err } -func (m *marshalGen) rawAppend(typ string, argfmt string, arg interface{}) { +func (m *marshalGen) rawAppend(typ string, argfmt string, arg any) { if m.ctx.compFloats && typ == "Float64" { typ = "Float" } diff --git a/gen/spec.go b/gen/spec.go index 3307d338..4ff4fbee 100644 --- a/gen/spec.go +++ b/gen/spec.go @@ -462,7 +462,7 @@ func (p *printer) comment(s string) { p.print("\n// " + s) } -func (p *printer) printf(format string, args ...interface{}) { +func (p *printer) printf(format string, args ...any) { if p.err == nil { _, p.err = fmt.Fprintf(p.w, format, args...) } diff --git a/go.mod b/go.mod index d8ca1199..a604be4f 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/tinylib/msgp -go 1.22 +go 1.23 require ( github.com/philhofer/fwd v1.2.0 diff --git a/issue185_test.go b/issue185_test.go index a34ffcf2..fe41f758 100644 --- a/issue185_test.go +++ b/issue185_test.go @@ -133,7 +133,7 @@ func TestIssue185Overlap(t *testing.T) { } } -func loadVars(t *testing.T, tpl *template.Template, tplData interface{}) (vars extractedVars, err error) { +func loadVars(t *testing.T, tpl *template.Template, tplData any) (vars extractedVars, err error) { tempDir := t.TempDir() if !debugTemp { @@ -218,7 +218,7 @@ func extractVars(file string) (extractedVars, error) { return vars, nil } -func goGenerateTpl(cwd, tfile string, tpl *template.Template, tplData interface{}) error { +func goGenerateTpl(cwd, tfile string, tpl *template.Template, tplData any) error { outf, err := os.OpenFile(tfile, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0o600) if err != nil { return err diff --git a/main.go b/main.go index 73121772..676b6ba8 100644 --- a/main.go +++ b/main.go @@ -44,7 +44,7 @@ var ( directives = stringArrFlags{} ) -func diagf(f string, args ...interface{}) { +func diagf(f string, args ...any) { if !*verbose { return } diff --git a/msgp/edit.go b/msgp/edit.go index b473a6f6..e5d86f93 100644 --- a/msgp/edit.go +++ b/msgp/edit.go @@ -58,7 +58,7 @@ func HasKey(key string, raw []byte) bool { return false } var field []byte - for i := uint32(0); i < sz; i++ { + for range sz { field, bts, err = ReadStringZC(bts) if err != nil { return false diff --git a/msgp/edit_test.go b/msgp/edit_test.go index 8f1cd621..77e69394 100644 --- a/msgp/edit_test.go +++ b/msgp/edit_test.go @@ -113,7 +113,7 @@ func TestReplace(t *testing.T) { t.Fatal("field not found") } var err error - m := make(map[string]interface{}) + m := make(map[string]any) m, _, err = ReadMapStrIntfBytes(raw, m) if err != nil { t.Logf("%q", raw) diff --git a/msgp/elsize_default.go b/msgp/elsize_default.go index e7e8b547..b2e66973 100644 --- a/msgp/elsize_default.go +++ b/msgp/elsize_default.go @@ -10,7 +10,7 @@ package msgp var sizes [256]bytespec func init() { - for i := 0; i < 256; i++ { + for i := range 256 { sizes[i] = calcBytespec(byte(i)) } } diff --git a/msgp/elsize_test.go b/msgp/elsize_test.go index b300ee51..1bbe1765 100644 --- a/msgp/elsize_test.go +++ b/msgp/elsize_test.go @@ -49,7 +49,7 @@ func TestBytespec(t *testing.T) { // set up fixed fields // fixint - for i := mfixint; i < 0x80; i++ { + for i := range uint8(0x80) { sizes[i] = bytespec{size: 1, extra: constsize, typ: IntType} } @@ -75,7 +75,7 @@ func TestBytespec(t *testing.T) { } // compare all values to calcBytespec - for i := 0; i < 256; i++ { + for i := range 256 { sizeb := sizes[byte(i)] cb := calcBytespec(byte(i)) if sizeb != cb { diff --git a/msgp/errors.go b/msgp/errors.go index e2261b76..e413409a 100644 --- a/msgp/errors.go +++ b/msgp/errors.go @@ -77,7 +77,7 @@ func Resumable(e error) bool { // // ErrShortBytes is not wrapped with any context due to backward compatibility // issues with the public API. -func WrapError(err error, ctx ...interface{}) error { +func WrapError(err error, ctx ...any) error { switch e := err.(type) { case errShort: return e diff --git a/msgp/errors_default.go b/msgp/errors_default.go index e45c00a8..05d19cfe 100644 --- a/msgp/errors_default.go +++ b/msgp/errors_default.go @@ -9,7 +9,7 @@ import ( ) // ctxString converts the incoming interface{} slice into a single string. -func ctxString(ctx []interface{}) string { +func ctxString(ctx []any) string { out := "" for idx, cv := range ctx { if idx > 0 { diff --git a/msgp/errors_test.go b/msgp/errors_test.go index 086b2f2e..042ba6a3 100644 --- a/msgp/errors_test.go +++ b/msgp/errors_test.go @@ -169,7 +169,6 @@ func TestSimpleQuoteStr(t *testing.T) { } for i, tc := range tcaseList { - tc := tc t.Run(fmt.Sprint(i), func(t *testing.T) { out := simpleQuoteStr(tc.in) if out != tc.out { diff --git a/msgp/extension_test.go b/msgp/extension_test.go index ac762e11..85641802 100644 --- a/msgp/extension_test.go +++ b/msgp/extension_test.go @@ -21,7 +21,7 @@ func TestReadWriteExtension(t *testing.T) { dc := NewReader(&buf) t.Run("interface", func(t *testing.T) { - for i := 0; i < 25; i++ { + for range 25 { buf.Reset() e := randomExt() en.WriteExtension(&e) @@ -34,7 +34,7 @@ func TestReadWriteExtension(t *testing.T) { }) t.Run("raw", func(t *testing.T) { - for i := 0; i < 25; i++ { + for range 25 { buf.Reset() e := randomExt() en.WriteExtensionRaw(e.Type, e.Data) @@ -119,7 +119,7 @@ func TestExtensionRawStackBuffer(t *testing.T) { func TestReadWriteExtensionBytes(t *testing.T) { var bts []byte - for i := 0; i < 24; i++ { + for range 24 { e := randomExt() bts, _ = AppendExtension(bts[0:0], &e) _, err := ReadExtensionBytes(bts, &e) @@ -134,7 +134,7 @@ func TestAppendAndWriteCompatibility(t *testing.T) { var buf bytes.Buffer en := NewWriter(&buf) - for i := 0; i < 24; i++ { + for range 24 { buf.Reset() e := randomExt() bts, _ = AppendExtension(bts[0:0], &e) diff --git a/msgp/fuzz_test.go b/msgp/fuzz_test.go index f51a3896..e894c65a 100644 --- a/msgp/fuzz_test.go +++ b/msgp/fuzz_test.go @@ -91,7 +91,7 @@ func FuzzReader(f *testing.F) { runtime.GC() r.ReadMapKeyPtr() reset() - r.ReadMapStrIntf(map[string]interface{}{}) + r.ReadMapStrIntf(map[string]any{}) reset() r.ReadNil() reset() @@ -156,7 +156,7 @@ func FuzzReadBytes(f *testing.F) { ReadJSONNumberBytes(data) ReadMapHeaderBytes(data) ReadMapKeyZC(data) - ReadMapStrIntfBytes(data, map[string]interface{}{}) + ReadMapStrIntfBytes(data, map[string]any{}) ReadNilBytes(data) ReadStringBytes(data) ReadStringAsBytes(data, tmp5[:]) diff --git a/msgp/iter.go b/msgp/iter.go index 3689649e..19657224 100644 --- a/msgp/iter.go +++ b/msgp/iter.go @@ -1,5 +1,3 @@ -//go:build go1.23 - package msgp import ( diff --git a/msgp/iter_test.go b/msgp/iter_test.go index 71b1ec32..78be8da1 100644 --- a/msgp/iter_test.go +++ b/msgp/iter_test.go @@ -1,10 +1,9 @@ -//go:build go1.23 - package msgp import ( "bytes" "fmt" + "maps" "math" "testing" "time" @@ -1950,10 +1949,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadUint, r.ReadUint) - got := make(map[uint]uint, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -1993,10 +1989,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadUint8, r.ReadUint8) - got := make(map[uint8]uint8, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2027,10 +2020,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadUint16, r.ReadUint16) - got := make(map[uint16]uint16, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2061,10 +2051,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadUint32, r.ReadUint32) - got := make(map[uint32]uint32, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2095,10 +2082,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadUint64, r.ReadUint64) - got := make(map[uint64]uint64, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2129,10 +2113,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadInt, r.ReadInt) - got := make(map[int]int, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2163,10 +2144,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadInt8, r.ReadInt8) - got := make(map[int8]int8, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2197,10 +2175,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadInt16, r.ReadInt16) - got := make(map[int16]int16, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2231,10 +2206,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadInt32, r.ReadInt32) - got := make(map[int32]int32, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2265,10 +2237,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadInt64, r.ReadInt64) - got := make(map[int64]int64, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2299,10 +2268,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadFloat32, r.ReadFloat32) - got := make(map[float32]float32, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2333,10 +2299,7 @@ func TestReadMap_AllNumberTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadFloat64, r.ReadFloat64) - got := make(map[float64]float64, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2413,10 +2376,7 @@ func TestReadMap_AllRegularTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadBool, r.ReadBool) - got := make(map[bool]bool, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2456,10 +2416,7 @@ func TestReadMap_AllRegularTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadString, r.ReadString) - got := make(map[string]string, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2582,10 +2539,7 @@ func TestReadMap_AllRegularTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadDuration, r.ReadDuration) - got := make(map[time.Duration]time.Duration, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2617,10 +2571,7 @@ func TestReadMap_AllRegularTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadComplex64, r.ReadComplex64) - got := make(map[complex64]complex64, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2651,10 +2602,7 @@ func TestReadMap_AllRegularTypes_SameKeyValueTypes(t *testing.T) { } r := NewReader(&buf) seq, tail := ReadMap(r, r.ReadComplex128, r.ReadComplex128) - got := make(map[complex128]complex128, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) if err := tail(); err != nil { t.Fatalf("%s tail: %v", tc.name, err) } @@ -2706,10 +2654,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadUintBytes, ReadUintBytes) - got := make(map[uint]uint, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -2743,10 +2688,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadUint8Bytes, ReadUint8Bytes) - got := make(map[uint8]uint8, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -2769,10 +2711,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadUint16Bytes, ReadUint16Bytes) - got := make(map[uint16]uint16, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -2795,10 +2734,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadUint32Bytes, ReadUint32Bytes) - got := make(map[uint32]uint32, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -2821,10 +2757,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadUint64Bytes, ReadUint64Bytes) - got := make(map[uint64]uint64, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -2847,10 +2780,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadIntBytes, ReadIntBytes) - got := make(map[int]int, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -2873,10 +2803,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadInt8Bytes, ReadInt8Bytes) - got := make(map[int8]int8, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -2899,10 +2826,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadInt16Bytes, ReadInt16Bytes) - got := make(map[int16]int16, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -2925,10 +2849,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadInt32Bytes, ReadInt32Bytes) - got := make(map[int32]int32, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -2951,10 +2872,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadInt64Bytes, ReadInt64Bytes) - got := make(map[int64]int64, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -2977,10 +2895,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadFloat32Bytes, ReadFloat32Bytes) - got := make(map[float32]float32, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -3003,10 +2918,7 @@ func TestReadMapBytes_AllNumberTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadFloat64Bytes, ReadFloat64Bytes) - got := make(map[float64]float64, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -3075,10 +2987,7 @@ func TestReadMapBytes_AllRegularTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadBoolBytes, ReadBoolBytes) - got := make(map[bool]bool, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -3113,10 +3022,7 @@ func TestReadMapBytes_AllRegularTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadStringBytes, ReadStringBytes) - got := make(map[string]string, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -3208,10 +3114,7 @@ func TestReadMapBytes_AllRegularTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadDurationBytes, ReadDurationBytes) - got := make(map[time.Duration]time.Duration, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -3234,10 +3137,7 @@ func TestReadMapBytes_AllRegularTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadComplex64Bytes, ReadComplex64Bytes) - got := make(map[complex64]complex64, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -3260,10 +3160,7 @@ func TestReadMapBytes_AllRegularTypes_SameKeyValueTypes(t *testing.T) { msg = tc.append(msg, tc.vals[i]) } seq, tail := ReadMapBytes(msg, ReadComplex128Bytes, ReadComplex128Bytes) - got := make(map[complex128]complex128, len(tc.keys)) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) remain, err := tail() if err != nil { t.Fatalf("%s tail: %v", tc.name, err) @@ -3294,10 +3191,7 @@ func TestReadMapBytes_TailErrorOnTruncated(t *testing.T) { trunc := full[:len(full)-2] // truncate some bytes from the last value seq, tail := ReadMapBytes(trunc, ReadIntBytes, ReadIntBytes) - got := make(map[int]int) - for k, v := range seq { - got[k] = v - } + got := maps.Collect(seq) // We expect only the first pair to be read if len(got) != 1 || got[1] != 10 { t.Fatalf("expected only first pair (1:10), got %v", got) diff --git a/msgp/json_bytes.go b/msgp/json_bytes.go index d4fbda63..7efd162f 100644 --- a/msgp/json_bytes.go +++ b/msgp/json_bytes.go @@ -91,7 +91,7 @@ func rwArrayBytes(w jsWriter, msg []byte, scratch []byte, depth int) ([]byte, [] if err != nil { return msg, scratch, err } - for i := uint32(0); i < sz; i++ { + for i := range sz { if i != 0 { err = w.WriteByte(',') if err != nil { @@ -119,7 +119,7 @@ func rwMapBytes(w jsWriter, msg []byte, scratch []byte, depth int) ([]byte, []by if err != nil { return msg, scratch, err } - for i := uint32(0); i < sz; i++ { + for i := range sz { if i != 0 { err = w.WriteByte(',') if err != nil { diff --git a/msgp/json_bytes_test.go b/msgp/json_bytes_test.go index 4688c77a..3b2d58e4 100644 --- a/msgp/json_bytes_test.go +++ b/msgp/json_bytes_test.go @@ -41,7 +41,7 @@ func TestUnmarshalJSON(t *testing.T) { t.Logf("%s", js.Bytes()) t.Fatal(err) } - mp := make(map[string]interface{}) + mp := make(map[string]any) err = json.Unmarshal(js.Bytes(), &mp) if err != nil { t.Log(js.String()) @@ -65,7 +65,7 @@ func TestUnmarshalJSON(t *testing.T) { if !ok { t.Error(`"a_map" field doesn't exist`) } else { - if m, ok := c.(map[string]interface{}); ok { + if m, ok := c.(map[string]any); ok { if _, ok := m["cmplx"]; !ok { t.Error(`"a_map.cmplx" doesn't exist`) } diff --git a/msgp/json_test.go b/msgp/json_test.go index 6578678b..85455abe 100644 --- a/msgp/json_test.go +++ b/msgp/json_test.go @@ -44,7 +44,7 @@ func TestCopyJSON(t *testing.T) { if err != nil { t.Fatal(err) } - mp := make(map[string]interface{}) + mp := make(map[string]any) err = json.Unmarshal(js.Bytes(), &mp) if err != nil { t.Log(js.String()) @@ -64,7 +64,7 @@ func TestCopyJSON(t *testing.T) { if !ok { t.Error("no key 'a map'") } - if inm, ok := in.(map[string]interface{}); !ok { + if inm, ok := in.(map[string]any); !ok { t.Error("inner map not type-assertable to map[string]interface{}") } else { inm1, ok := inm["internal_one"] @@ -147,17 +147,17 @@ func BenchmarkCopyToJSON(b *testing.B) { } func BenchmarkStdlibJSON(b *testing.B) { - obj := map[string]interface{}{ + obj := map[string]any{ "thing_1": "a string object", - "a_first_map": map[string]interface{}{ + "a_first_map": map[string]any{ "float_a": float32(1.0), "float_b": -100, }, - "an array": []interface{}{ + "an array": []any{ "part_A", "part_B", }, - "a_second_map": map[string]interface{}{ + "a_second_map": map[string]any{ "internal_one": "blah", "internal_two": "blahhh...", }, diff --git a/msgp/number_test.go b/msgp/number_test.go index cdeebc00..efe114de 100644 --- a/msgp/number_test.go +++ b/msgp/number_test.go @@ -35,7 +35,7 @@ func TestNumber(t *testing.T) { t.Errorf("%d in; %d out!", 40000, u) } - nums := []interface{}{ + nums := []any{ float64(3.14159), int64(-29081), uint64(90821983), diff --git a/msgp/read.go b/msgp/read.go index 4acfd78f..0f366a47 100644 --- a/msgp/read.go +++ b/msgp/read.go @@ -13,7 +13,7 @@ import ( ) // where we keep old *Readers -var readerPool = sync.Pool{New: func() interface{} { return &Reader{} }} +var readerPool = sync.Pool{New: func() any { return &Reader{} }} // Type is a MessagePack wire type, // including this package's built-in @@ -207,7 +207,7 @@ func (m *Reader) CopyNext(w io.Writer) (int64, error) { defer done() } // for maps and slices, read elements - for x := uintptr(0); x < o; x++ { + for range o { var n2 int64 n2, err = m.CopyNext(w) if err != nil { @@ -1302,7 +1302,7 @@ func (m *Reader) ReadComplex128() (f complex128, err error) { // ReadMapStrIntf reads a MessagePack map into a map[string]interface{}. // (You must pass a non-nil map into the function.) -func (m *Reader) ReadMapStrIntf(mp map[string]interface{}) (err error) { +func (m *Reader) ReadMapStrIntf(mp map[string]any) (err error) { var sz uint32 sz, err = m.ReadMapHeader() if err != nil { @@ -1317,7 +1317,7 @@ func (m *Reader) ReadMapStrIntf(mp map[string]interface{}) (err error) { } for i := uint32(0); i < sz; i++ { var key string - var val interface{} + var val any key, err = m.ReadString() if err != nil { return @@ -1447,7 +1447,7 @@ func (m *Reader) ReadJSONNumber() (n json.Number, err error) { // Arrays are decoded as []interface{}, and maps are decoded // as map[string]interface{}. Integers are decoded as int64 // and unsigned integers are decoded as uint64. -func (m *Reader) ReadIntf() (i interface{}, err error) { +func (m *Reader) ReadIntf() (i any, err error) { var t Type t, err = m.NextType() if err != nil { @@ -1517,7 +1517,7 @@ func (m *Reader) ReadIntf() (i interface{}, err error) { defer done() } - mp := make(map[string]interface{}) + mp := make(map[string]any) err = m.ReadMapStrIntf(mp) i = mp return @@ -1553,7 +1553,7 @@ func (m *Reader) ReadIntf() (i interface{}, err error) { return } - out := make([]interface{}, int(sz)) + out := make([]any, int(sz)) for j := range out { out[j], err = m.ReadIntf() if err != nil { diff --git a/msgp/read_bytes.go b/msgp/read_bytes.go index 176e14e3..306e555b 100644 --- a/msgp/read_bytes.go +++ b/msgp/read_bytes.go @@ -1138,11 +1138,11 @@ func ReadTimeBytes(b []byte) (t time.Time, o []byte, err error) { // ReadMapStrIntfBytes reads a map[string]interface{} // out of 'b' and returns the map and remaining bytes. // If 'old' is non-nil, the values will be read into that map. -func ReadMapStrIntfBytes(b []byte, old map[string]interface{}) (v map[string]interface{}, o []byte, err error) { +func ReadMapStrIntfBytes(b []byte, old map[string]any) (v map[string]any, o []byte, err error) { return readMapStrIntfBytesDepth(b, old, 0) } -func readMapStrIntfBytesDepth(b []byte, old map[string]interface{}, depth int) (v map[string]interface{}, o []byte, err error) { +func readMapStrIntfBytesDepth(b []byte, old map[string]any, depth int) (v map[string]any, o []byte, err error) { if depth >= recursionLimit { err = ErrRecursion return @@ -1166,7 +1166,7 @@ func readMapStrIntfBytesDepth(b []byte, old map[string]interface{}, depth int) ( } v = old } else { - v = make(map[string]interface{}, int(sz)) + v = make(map[string]any, int(sz)) } for z := uint32(0); z < sz; z++ { @@ -1179,7 +1179,7 @@ func readMapStrIntfBytesDepth(b []byte, old map[string]interface{}, depth int) ( if err != nil { return } - var val interface{} + var val any val, o, err = readIntfBytesDepth(o, depth) if err != nil { return @@ -1192,11 +1192,11 @@ func readMapStrIntfBytesDepth(b []byte, old map[string]interface{}, depth int) ( // ReadIntfBytes attempts to read // the next object out of 'b' as a raw interface{} and // return the remaining bytes. -func ReadIntfBytes(b []byte) (i interface{}, o []byte, err error) { +func ReadIntfBytes(b []byte) (i any, o []byte, err error) { return readIntfBytesDepth(b, 0) } -func readIntfBytesDepth(b []byte, depth int) (i interface{}, o []byte, err error) { +func readIntfBytesDepth(b []byte, depth int) (i any, o []byte, err error) { if depth >= recursionLimit { err = ErrRecursion return @@ -1224,7 +1224,7 @@ func readIntfBytesDepth(b []byte, depth int) (i interface{}, o []byte, err error err = ErrShortBytes return } - j := make([]interface{}, int(sz)) + j := make([]any, int(sz)) i = j for d := range j { j[d], o, err = readIntfBytesDepth(o, depth+1) diff --git a/msgp/read_bytes_test.go b/msgp/read_bytes_test.go index d9ee6c9f..7709c731 100644 --- a/msgp/read_bytes_test.go +++ b/msgp/read_bytes_test.go @@ -277,7 +277,7 @@ func TestReadInt64Bytes(t *testing.T) { uints := []uint64{0, 8, 240, uint64(tuint16), uint64(tuint32), uint64(tuint64)} - all := make([]interface{}, 0, len(ints)+len(uints)) + all := make([]any, 0, len(ints)+len(uints)) for _, v := range ints { all = append(all, v) } @@ -325,7 +325,7 @@ func TestReadUint64Bytes(t *testing.T) { var buf bytes.Buffer wr := NewWriter(&buf) - vs := []interface{}{ + vs := []any{ int64(0), int64(8), int64(240), int64(tuint16), int64(tuint32), int64(tuint64), uint64(0), uint64(8), uint64(240), uint64(tuint16), uint64(tuint32), uint64(tuint64), uint64(math.MaxUint64), @@ -397,7 +397,7 @@ func TestReadIntBytesOverflows(t *testing.T) { } vs := []struct { - v interface{} + v any rdBits int failBits int errCheck func(err error, failBits int) bool @@ -693,13 +693,13 @@ func TestReadIntfBytes(t *testing.T) { var buf bytes.Buffer en := NewWriter(&buf) - tests := make([]interface{}, 0, 10) + tests := make([]any, 0, 10) tests = append(tests, float64(3.5)) tests = append(tests, int64(-49082)) tests = append(tests, uint64(34908)) tests = append(tests, string("hello!")) tests = append(tests, []byte("blah.")) - tests = append(tests, map[string]interface{}{ + tests = append(tests, map[string]any{ "key_one": 3.5, "key_two": "hi.", }) diff --git a/msgp/read_test.go b/msgp/read_test.go index 6c988408..96db3bcb 100644 --- a/msgp/read_test.go +++ b/msgp/read_test.go @@ -25,7 +25,7 @@ func TestReadIntf(t *testing.T) { // always read out as int64, and // unsigned integers as uint64 - testCases := []interface{}{ + testCases := []any{ float64(128.032), float32(9082.092), int64(-40), @@ -34,7 +34,7 @@ func TestReadIntf(t *testing.T) { 48*time.Hour + 3*time.Minute + 2*time.Second + 3*time.Nanosecond, "hello!", []byte("hello!"), - map[string]interface{}{ + map[string]any{ "thing-1": "thing-1-value", "thing-2": int64(800), "thing-3": []byte("some inner bytes..."), @@ -43,7 +43,7 @@ func TestReadIntf(t *testing.T) { } var buf bytes.Buffer - var v interface{} + var v any dec := NewReader(&buf) enc := NewWriter(&buf) @@ -85,7 +85,7 @@ func TestReadIntfRecursion(t *testing.T) { dec := NewReader(&buf) enc := NewWriter(&buf) // Test array recursion... - for i := 0; i < recursionLimit*2; i++ { + for range recursionLimit * 2 { enc.WriteArrayHeader(1) } enc.Flush() @@ -115,7 +115,7 @@ func TestReadIntfRecursion(t *testing.T) { // Test map recursion... buf.Reset() - for i := 0; i < recursionLimit*2; i++ { + for range recursionLimit * 2 { enc.WriteMapHeader(1) // Write a key... enc.WriteString("a") @@ -134,11 +134,11 @@ func TestReadIntfRecursion(t *testing.T) { // Test ReadMapStrInt using same input dec.Reset(bytes.NewReader(b)) - err = dec.ReadMapStrIntf(map[string]interface{}{}) + err = dec.ReadMapStrIntf(map[string]any{}) if !errors.Is(err, ErrRecursion) { t.Errorf("unexpected Reader error: %v", err) } - _, _, err = ReadMapStrIntfBytes(b, map[string]interface{}{}) + _, _, err = ReadMapStrIntfBytes(b, map[string]any{}) if !errors.Is(err, ErrRecursion) { t.Errorf("unexpected Bytes error: %v", err) } @@ -171,7 +171,7 @@ func TestSkipRecursion(t *testing.T) { dec := NewReader(&buf) enc := NewWriter(&buf) // Test array recursion... - for i := 0; i < recursionLimit*2; i++ { + for range recursionLimit * 2 { enc.WriteArrayHeader(1) } enc.Flush() @@ -187,7 +187,7 @@ func TestSkipRecursion(t *testing.T) { buf.Reset() // Test map recursion... - for i := 0; i < recursionLimit*2; i++ { + for range recursionLimit * 2 { enc.WriteMapHeader(1) // Write a key... enc.WriteString("a") @@ -336,7 +336,7 @@ func TestReadFloat64(t *testing.T) { wr := NewWriter(&buf) rd := NewReader(&buf) - for i := 0; i < 100; i++ { + for range 100 { buf.Reset() flt := (rand.Float64() - 0.5) * math.MaxFloat64 @@ -383,7 +383,7 @@ func TestReadFloat32(t *testing.T) { wr := NewWriter(&buf) rd := NewReader(&buf) - for i := 0; i < 10000; i++ { + for range 10000 { buf.Reset() flt := (rand.Float32() - 0.5) * math.MaxFloat32 @@ -433,7 +433,7 @@ func TestReadInt64(t *testing.T) { ints := []int64{-100000, -5000, -5, 0, 8, 240, int64(tuint16), int64(tuint32), int64(tuint64)} uints := []uint64{0, 8, 240, uint64(tuint16), uint64(tuint32), uint64(tuint64)} - all := make([]interface{}, 0, len(ints)+len(uints)) + all := make([]any, 0, len(ints)+len(uints)) for _, v := range ints { all = append(all, v) } @@ -500,7 +500,7 @@ func TestReadIntOverflows(t *testing.T) { } vs := []struct { - v interface{} + v any rdBits int failBits int errCheck func(err error, failBits int) bool @@ -833,7 +833,7 @@ func TestReadComplex64(t *testing.T) { wr := NewWriter(&buf) rd := NewReader(&buf) - for i := 0; i < 100; i++ { + for range 100 { buf.Reset() f := complex(rand.Float32()*math.MaxFloat32, rand.Float32()*math.MaxFloat32) @@ -876,7 +876,7 @@ func TestReadComplex128(t *testing.T) { wr := NewWriter(&buf) rd := NewReader(&buf) - for i := 0; i < 10; i++ { + for range 10 { buf.Reset() f := complex(rand.Float64()*math.MaxFloat64, rand.Float64()*math.MaxFloat64) diff --git a/msgp/write.go b/msgp/write.go index 352350f9..bb21a957 100644 --- a/msgp/write.go +++ b/msgp/write.go @@ -33,7 +33,7 @@ var ( btsType = reflect.TypeOf(([]byte)(nil)) writerPool = sync.Pool{ - New: func() interface{} { + New: func() any { return &Writer{buf: make([]byte, 2048)} }, } @@ -591,7 +591,7 @@ func (mw *Writer) WriteMapStrStr(mp map[string]string) (err error) { } // WriteMapStrIntf writes a map[string]interface to the writer -func (mw *Writer) WriteMapStrIntf(mp map[string]interface{}) (err error) { +func (mw *Writer) WriteMapStrIntf(mp map[string]any) (err error) { err = mw.WriteMapHeader(uint32(len(mp))) if err != nil { return @@ -703,7 +703,7 @@ func (mw *Writer) WriteJSONNumber(n json.Number) error { // - A pointer to a supported type // - A type that satisfies the msgp.Encodable interface // - A type that satisfies the msgp.Extension interface -func (mw *Writer) WriteIntf(v interface{}) error { +func (mw *Writer) WriteIntf(v any) error { if v == nil { return mw.WriteNil() } @@ -754,7 +754,7 @@ func (mw *Writer) WriteIntf(v interface{}) error { return mw.WriteBytes(v) case map[string]string: return mw.WriteMapStrStr(v) - case map[string]interface{}: + case map[string]any: return mw.WriteMapStrIntf(v) case time.Time: return mw.WriteTime(v) @@ -817,7 +817,7 @@ func (mw *Writer) writeSlice(v reflect.Value) (err error) { if err != nil { return } - for i := uint32(0); i < sz; i++ { + for i := range sz { err = mw.WriteIntf(v.Index(int(i)).Interface()) if err != nil { return @@ -840,7 +840,7 @@ func isSupported(k reflect.Kind) bool { // value of 'i'. If the underlying value is not // a simple builtin (or []byte), GuessSize defaults // to 512. -func GuessSize(i interface{}) int { +func GuessSize(i any) int { if i == nil { return NilSize } @@ -868,7 +868,7 @@ func GuessSize(i interface{}) int { return Complex128Size case bool: return BoolSize - case map[string]interface{}: + case map[string]any: s := MapHeaderSize for key, val := range i { s += StringPrefixSize + len(key) + GuessSize(val) diff --git a/msgp/write_bytes.go b/msgp/write_bytes.go index 70450174..dea7289d 100644 --- a/msgp/write_bytes.go +++ b/msgp/write_bytes.go @@ -371,7 +371,7 @@ func AppendMapStrStr(b []byte, m map[string]string) []byte { // AppendMapStrIntf appends a map[string]interface{} to the slice // as a MessagePack map with 'str'-type keys. -func AppendMapStrIntf(b []byte, m map[string]interface{}) ([]byte, error) { +func AppendMapStrIntf(b []byte, m map[string]any) ([]byte, error) { sz := uint32(len(m)) b = AppendMapHeader(b, sz) var err error @@ -394,7 +394,7 @@ func AppendMapStrIntf(b []byte, m map[string]interface{}) ([]byte, error) { // - A *T, where T is another supported type // - A type that satisfies the msgp.Marshaler interface // - A type that satisfies the msgp.Extension interface -func AppendIntf(b []byte, i interface{}) ([]byte, error) { +func AppendIntf(b []byte, i any) ([]byte, error) { if i == nil { return AppendNil(b), nil } @@ -444,13 +444,13 @@ func AppendIntf(b []byte, i interface{}) ([]byte, error) { return AppendTime(b, i), nil case time.Duration: return AppendDuration(b, i), nil - case map[string]interface{}: + case map[string]any: return AppendMapStrIntf(b, i) case map[string]string: return AppendMapStrStr(b, i), nil case json.Number: return AppendJSONNumber(b, i) - case []interface{}: + case []any: b = AppendArrayHeader(b, uint32(len(i))) var err error for _, k := range i { @@ -483,7 +483,7 @@ func AppendIntf(b []byte, i interface{}) ([]byte, error) { case reflect.Array, reflect.Slice: l := v.Len() b = AppendArrayHeader(b, uint32(l)) - for i := 0; i < l; i++ { + for i := range l { b, err = AppendIntf(b, v.Index(i).Interface()) if err != nil { return b, err diff --git a/msgp/write_bytes_test.go b/msgp/write_bytes_test.go index 86d93d3b..8618cf87 100644 --- a/msgp/write_bytes_test.go +++ b/msgp/write_bytes_test.go @@ -57,7 +57,7 @@ func BenchmarkAppendMapHeader(b *testing.B) { N := b.N / 4 b.ReportAllocs() b.ResetTimer() - for i := 0; i < N; i++ { + for range N { AppendMapHeader(buf[:0], 0) AppendMapHeader(buf[:0], uint32(tint8)) AppendMapHeader(buf[:0], tuint16) @@ -88,7 +88,7 @@ func BenchmarkAppendArrayHeader(b *testing.B) { N := b.N / 4 b.ReportAllocs() b.ResetTimer() - for i := 0; i < N; i++ { + for range N { AppendArrayHeader(buf[:0], 0) AppendArrayHeader(buf[:0], uint32(tint8)) AppendArrayHeader(buf[:0], tuint16) @@ -119,7 +119,7 @@ func BenchmarkAppendBytesHeader(b *testing.B) { N := b.N / 4 b.ReportAllocs() b.ResetTimer() - for i := 0; i < N; i++ { + for range N { AppendBytesHeader(buf[:0], 0) AppendBytesHeader(buf[:0], uint32(tint8)) AppendBytesHeader(buf[:0], tuint16) @@ -434,8 +434,8 @@ func BenchmarkAppendTimeExt(b *testing.B) { func TestEncodeDecode(t *testing.T) { for _, tc := range []struct { name string - input interface{} - output interface{} + input any + output any encodeError string }{ { @@ -464,65 +464,65 @@ func TestEncodeDecode(t *testing.T) { }, { name: "array-empty", - input: []interface{}{}, + input: []any{}, }, { name: "array", - input: []interface{}{int64(1), int64(2), int64(3)}, + input: []any{int64(1), int64(2), int64(3)}, }, { name: "map-empty", - input: map[string]interface{}{}, + input: map[string]any{}, }, { name: "map", - input: map[string]interface{}{"a": int64(1), "b": int64(2)}, + input: map[string]any{"a": int64(1), "b": int64(2)}, }, { name: "map-interface", - input: map[string]interface{}{"a": int64(1), "b": "2"}, + input: map[string]any{"a": int64(1), "b": "2"}, }, { name: "map-string", input: map[string]string{"a": "1", "b": "2"}, - output: map[string]interface{}{"a": "1", "b": "2"}, + output: map[string]any{"a": "1", "b": "2"}, }, { name: "map-array", input: map[string][]int64{"a": {1, 2}, "b": {3}}, - output: map[string]interface{}{"a": []interface{}{int64(1), int64(2)}, "b": []interface{}{int64(3)}}, + output: map[string]any{"a": []any{int64(1), int64(2)}, "b": []any{int64(3)}}, }, { name: "map-map", input: map[string]map[string]int64{"a": {"a": 1, "b": 2}, "b": {"c": 3}}, - output: map[string]interface{}{"a": map[string]interface{}{"a": int64(1), "b": int64(2)}, "b": map[string]interface{}{"c": int64(3)}}, + output: map[string]any{"a": map[string]any{"a": int64(1), "b": int64(2)}, "b": map[string]any{"c": int64(3)}}, }, { name: "array-map", - input: []interface{}{map[string]interface{}{"a": int64(1), "b": "2"}, map[string]int64{"c": 3}}, - output: []interface{}{map[string]interface{}{"a": int64(1), "b": "2"}, map[string]interface{}{"c": int64(3)}}, + input: []any{map[string]any{"a": int64(1), "b": "2"}, map[string]int64{"c": 3}}, + output: []any{map[string]any{"a": int64(1), "b": "2"}, map[string]any{"c": int64(3)}}, }, { name: "array-array", - input: []interface{}{[]int64{1, 2}, []interface{}{int64(3)}}, - output: []interface{}{[]interface{}{int64(1), int64(2)}, []interface{}{int64(3)}}, + input: []any{[]int64{1, 2}, []any{int64(3)}}, + output: []any{[]any{int64(1), int64(2)}, []any{int64(3)}}, }, { name: "array-array-map", - input: []interface{}{[]interface{}{int64(1), int64(2)}, map[string]interface{}{"c": int64(3)}}, + input: []any{[]any{int64(1), int64(2)}, map[string]any{"c": int64(3)}}, }, { name: "map-array-map", - input: map[string]interface{}{"a": []interface{}{int64(1), int64(2)}, "b": map[string]interface{}{"c": int64(3)}}, + input: map[string]any{"a": []any{int64(1), int64(2)}, "b": map[string]any{"c": int64(3)}}, }, { name: "map-invalid-keys", - input: map[interface{}]interface{}{int64(1): int64(2)}, + input: map[any]any{int64(1): int64(2)}, encodeError: "msgp: map keys must be strings", }, { name: "map-nested-invalid-keys", - input: map[string]interface{}{"a": map[int64]string{1: "2"}}, + input: map[string]any{"a": map[int64]string{1: "2"}}, encodeError: "msgp: map keys must be strings", }, { diff --git a/msgp/write_test.go b/msgp/write_test.go index 11542e05..9a58dc58 100644 --- a/msgp/write_test.go +++ b/msgp/write_test.go @@ -71,7 +71,7 @@ func BenchmarkWriteMapHeader(b *testing.B) { N := b.N / 4 b.ReportAllocs() b.ResetTimer() - for i := 0; i < N; i++ { + for range N { wr.WriteMapHeader(0) wr.WriteMapHeader(8) wr.WriteMapHeader(tuint16) @@ -166,7 +166,7 @@ func BenchmarkWriteArrayHeader(b *testing.B) { N := b.N / 4 b.ReportAllocs() b.ResetTimer() - for i := 0; i < N; i++ { + for range N { wr.WriteArrayHeader(0) wr.WriteArrayHeader(16) wr.WriteArrayHeader(tuint16) @@ -197,7 +197,7 @@ func TestWriteFloat64(t *testing.T) { var buf bytes.Buffer wr := NewWriter(&buf) - for i := 0; i < 10000; i++ { + for range 10000 { buf.Reset() flt := (rand.Float64() - 0.5) * math.MaxFloat64 err := wr.WriteFloat64(flt) @@ -221,7 +221,7 @@ func TestReadWriterDuration(t *testing.T) { var buf bytes.Buffer wr := NewWriter(&buf) - for i := 0; i < 10000; i++ { + for range 10000 { buf.Reset() dur := time.Duration(rand.Int63()) err := wr.WriteDuration(dur) @@ -265,7 +265,7 @@ func TestWriteFloat32(t *testing.T) { var buf bytes.Buffer wr := NewWriter(&buf) - for i := 0; i < 10000; i++ { + for range 10000 { buf.Reset() flt := (rand.Float32() - 0.5) * math.MaxFloat32 err := wr.WriteFloat32(flt) @@ -300,7 +300,7 @@ func TestWriteInt64(t *testing.T) { var buf bytes.Buffer wr := NewWriter(&buf) - for i := 0; i < 10000; i++ { + for range 10000 { buf.Reset() num := (rand.Int63n(math.MaxInt64)) - (math.MaxInt64 / 2) @@ -334,7 +334,7 @@ func TestWriteUint64(t *testing.T) { var buf bytes.Buffer wr := NewWriter(&buf) - for i := 0; i < 10000; i++ { + for range 10000 { buf.Reset() num := uint64(rand.Int63n(math.MaxInt64)) diff --git a/parse/directives.go b/parse/directives.go index 1cc26248..dfe56099 100644 --- a/parse/directives.go +++ b/parse/directives.go @@ -64,8 +64,8 @@ func yieldComments(c []*ast.CommentGroup) []string { var out []string for _, cg := range c { for _, line := range cg.List { - if strings.HasPrefix(line.Text, linePrefix) { - out = append(out, strings.TrimPrefix(line.Text, linePrefix)) + if after, ok := strings.CutPrefix(line.Text, linePrefix); ok { + out = append(out, after) } } } diff --git a/parse/getast.go b/parse/getast.go index ac7ed4bd..ec9e1531 100644 --- a/parse/getast.go +++ b/parse/getast.go @@ -785,9 +785,9 @@ func (fs *FileSet) parseExpr(e ast.Expr) gen.Elem { } } -var Logf func(s string, v ...interface{}) +var Logf func(s string, v ...any) -func infof(s string, v ...interface{}) { +func infof(s string, v ...any) { if Logf != nil { pushstate(s) Logf("info: "+strings.Join(logctx, ": "), v...) @@ -795,7 +795,7 @@ func infof(s string, v ...interface{}) { } } -func warnf(s string, v ...interface{}) { +func warnf(s string, v ...any) { if Logf != nil { pushstate(s) Logf("warn: "+strings.Join(logctx, ": "), v...) diff --git a/printer/print.go b/printer/print.go index 47240cd5..a2b48472 100644 --- a/printer/print.go +++ b/printer/print.go @@ -12,7 +12,7 @@ import ( "golang.org/x/tools/imports" ) -var Logf func(s string, v ...interface{}) +var Logf func(s string, v ...any) // PrintFile prints the methods for the provided list // of elements to the given file name and canonical