From c79ddb362b04bdd499c164077bd87e4989376ac1 Mon Sep 17 00:00:00 2001 From: Tim Hockin <thockin@google.com> Date: Sat, 5 Apr 2025 10:32:33 +0100 Subject: [PATCH] Update to support golangci-lint v2 --- .github/workflows/lint.yaml | 2 +- .golangci.yaml | 16 +++++----- benchmark/benchmark_slog_test.go | 40 ++++++++++++------------ benchmark/benchmark_test.go | 52 ++++++++++++++++---------------- examples/tab_logger.go | 22 ++++++++------ examples/usage_example.go | 4 +-- funcr/example_formatter_test.go | 6 ++-- funcr/example_test.go | 19 ++++++------ funcr/funcr.go | 8 ++--- testr/testr.go | 4 +-- 10 files changed, 89 insertions(+), 84 deletions(-) diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 00b4c90..537fc2c 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -17,7 +17,7 @@ jobs: go-version: '>=1.21.0' cache: false - name: Lint - uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2 + uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0 with: # version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version version: latest diff --git a/.golangci.yaml b/.golangci.yaml index 0cffafa..0ed62c1 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -1,26 +1,28 @@ +version: "2" + run: timeout: 1m tests: true linters: - disable-all: true - enable: + default: none + enable: # please keep this alphabetized + - asasalint - asciicheck + - copyloopvar + - dupl - errcheck - forcetypeassert + - goconst - gocritic - - gofmt - - goimports - - gosimple - govet - ineffassign - misspell + - musttag - revive - staticcheck - - typecheck - unused issues: - exclude-use-default: false max-issues-per-linter: 0 max-same-issues: 10 diff --git a/benchmark/benchmark_slog_test.go b/benchmark/benchmark_slog_test.go index 6f115fd..7a47b7d 100644 --- a/benchmark/benchmark_slog_test.go +++ b/benchmark/benchmark_slog_test.go @@ -32,42 +32,42 @@ import ( // func BenchmarkSlogSinkLogInfoOneArg(b *testing.B) { - var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) + var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) //nolint:staticcheck doInfoOneArg(b, log) } func BenchmarkSlogSinkLogInfoSeveralArgs(b *testing.B) { - var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) + var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) //nolint:staticcheck doInfoSeveralArgs(b, log) } func BenchmarkSlogSinkLogInfoWithValues(b *testing.B) { - var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) + var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) //nolint:staticcheck doInfoWithValues(b, log) } func BenchmarkSlogSinkLogV0Info(b *testing.B) { - var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) + var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) //nolint:staticcheck doV0Info(b, log) } func BenchmarkSlogSinkLogV9Info(b *testing.B) { - var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) + var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) //nolint:staticcheck doV9Info(b, log) } func BenchmarkSlogSinkLogError(b *testing.B) { - var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) + var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) //nolint:staticcheck doError(b, log) } func BenchmarkSlogSinkWithValues(b *testing.B) { - var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) + var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) //nolint:staticcheck doWithValues(b, log) } func BenchmarkSlogSinkWithName(b *testing.B) { - var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) + var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard())) //nolint:staticcheck doWithName(b, log) } @@ -82,61 +82,61 @@ func makeSlogJSONLogger() logr.Logger { } func BenchmarkSlogJSONLogInfoOneArg(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doInfoOneArg(b, log) } func BenchmarkSlogJSONLogInfoSeveralArgs(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doInfoSeveralArgs(b, log) } func BenchmarkSlogJSONLogInfoWithValues(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doInfoWithValues(b, log) } func BenchmarkSlogJSONLogV0Info(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doV0Info(b, log) } func BenchmarkSlogJSONLogV9Info(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doV9Info(b, log) } func BenchmarkSlogJSONLogError(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doError(b, log) } func BenchmarkSlogJSONLogWithValues(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doWithValues(b, log) } func BenchmarkSlogJSONWithName(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doWithName(b, log) } func BenchmarkSlogJSONWithCallDepth(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doWithCallDepth(b, log) } func BenchmarkSlogJSONLogInfoStringerValue(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doStringerValue(b, log) } func BenchmarkSlogJSONLogInfoErrorValue(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doErrorValue(b, log) } func BenchmarkSlogJSONLogInfoMarshalerValue(b *testing.B) { - var log logr.Logger = makeSlogJSONLogger() + var log logr.Logger = makeSlogJSONLogger() //nolint:staticcheck doMarshalerValue(b, log) } diff --git a/benchmark/benchmark_test.go b/benchmark/benchmark_test.go index 35c7dd0..06553fc 100644 --- a/benchmark/benchmark_test.go +++ b/benchmark/benchmark_test.go @@ -146,42 +146,42 @@ func doMarshalerValue(b *testing.B, log logr.Logger) { // func BenchmarkDiscardLogInfoOneArg(b *testing.B) { - var log logr.Logger = logr.Discard() + var log logr.Logger = logr.Discard() //nolint:staticcheck doInfoOneArg(b, log) } func BenchmarkDiscardLogInfoSeveralArgs(b *testing.B) { - var log logr.Logger = logr.Discard() + var log logr.Logger = logr.Discard() //nolint:staticcheck doInfoSeveralArgs(b, log) } func BenchmarkDiscardLogInfoWithValues(b *testing.B) { - var log logr.Logger = logr.Discard() + var log logr.Logger = logr.Discard() //nolint:staticcheck doInfoWithValues(b, log) } func BenchmarkDiscardLogV0Info(b *testing.B) { - var log logr.Logger = logr.Discard() + var log logr.Logger = logr.Discard() //nolint:staticcheck doV0Info(b, log) } func BenchmarkDiscardLogV9Info(b *testing.B) { - var log logr.Logger = logr.Discard() + var log logr.Logger = logr.Discard() //nolint:staticcheck doV9Info(b, log) } func BenchmarkDiscardLogError(b *testing.B) { - var log logr.Logger = logr.Discard() + var log logr.Logger = logr.Discard() //nolint:staticcheck doError(b, log) } func BenchmarkDiscardWithValues(b *testing.B) { - var log logr.Logger = logr.Discard() + var log logr.Logger = logr.Discard() //nolint:staticcheck doWithValues(b, log) } func BenchmarkDiscardWithName(b *testing.B) { - var log logr.Logger = logr.Discard() + var log logr.Logger = logr.Discard() //nolint:staticcheck doWithName(b, log) } @@ -193,91 +193,91 @@ func noopKV(_, _ string) {} func noopJSON(_ string) {} func BenchmarkFuncrLogInfoOneArg(b *testing.B) { - var log logr.Logger = funcr.New(noopKV, funcr.Options{}) + var log logr.Logger = funcr.New(noopKV, funcr.Options{}) //nolint:staticcheck doInfoOneArg(b, log) } func BenchmarkFuncrJSONLogInfoOneArg(b *testing.B) { - var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) + var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) //nolint:staticcheck doInfoOneArg(b, log) } func BenchmarkFuncrLogInfoSeveralArgs(b *testing.B) { - var log logr.Logger = funcr.New(noopKV, funcr.Options{}) + var log logr.Logger = funcr.New(noopKV, funcr.Options{}) //nolint:staticcheck doInfoSeveralArgs(b, log) } func BenchmarkFuncrJSONLogInfoSeveralArgs(b *testing.B) { - var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) + var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) //nolint:staticcheck doInfoSeveralArgs(b, log) } func BenchmarkFuncrLogInfoWithValues(b *testing.B) { - var log logr.Logger = funcr.New(noopKV, funcr.Options{}) + var log logr.Logger = funcr.New(noopKV, funcr.Options{}) //nolint:staticcheck doInfoWithValues(b, log) } func BenchmarkFuncrJSONLogInfoWithValues(b *testing.B) { - var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) + var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) //nolint:staticcheck doInfoWithValues(b, log) } func BenchmarkFuncrLogV0Info(b *testing.B) { - var log logr.Logger = funcr.New(noopKV, funcr.Options{}) + var log logr.Logger = funcr.New(noopKV, funcr.Options{}) //nolint:staticcheck doV0Info(b, log) } func BenchmarkFuncrJSONLogV0Info(b *testing.B) { - var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) + var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) //nolint:staticcheck doV0Info(b, log) } func BenchmarkFuncrLogV9Info(b *testing.B) { - var log logr.Logger = funcr.New(noopKV, funcr.Options{}) + var log logr.Logger = funcr.New(noopKV, funcr.Options{}) //nolint:staticcheck doV9Info(b, log) } func BenchmarkFuncrJSONLogV9Info(b *testing.B) { - var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) + var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) //nolint:staticcheck doV9Info(b, log) } func BenchmarkFuncrLogError(b *testing.B) { - var log logr.Logger = funcr.New(noopKV, funcr.Options{}) + var log logr.Logger = funcr.New(noopKV, funcr.Options{}) //nolint:staticcheck doError(b, log) } func BenchmarkFuncrJSONLogError(b *testing.B) { - var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) + var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) //nolint:staticcheck doError(b, log) } func BenchmarkFuncrWithValues(b *testing.B) { - var log logr.Logger = funcr.New(noopKV, funcr.Options{}) + var log logr.Logger = funcr.New(noopKV, funcr.Options{}) //nolint:staticcheck doWithValues(b, log) } func BenchmarkFuncrWithName(b *testing.B) { - var log logr.Logger = funcr.New(noopKV, funcr.Options{}) + var log logr.Logger = funcr.New(noopKV, funcr.Options{}) //nolint:staticcheck doWithName(b, log) } func BenchmarkFuncrWithCallDepth(b *testing.B) { - var log logr.Logger = funcr.New(noopKV, funcr.Options{}) + var log logr.Logger = funcr.New(noopKV, funcr.Options{}) //nolint:staticcheck doWithCallDepth(b, log) } func BenchmarkFuncrJSONLogInfoStringerValue(b *testing.B) { - var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) + var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) //nolint:staticcheck doStringerValue(b, log) } func BenchmarkFuncrJSONLogInfoErrorValue(b *testing.B) { - var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) + var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) //nolint:staticcheck doErrorValue(b, log) } func BenchmarkFuncrJSONLogInfoMarshalerValue(b *testing.B) { - var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) + var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{}) //nolint:staticcheck doMarshalerValue(b, log) } diff --git a/examples/tab_logger.go b/examples/tab_logger.go index 4e00598..76ccc79 100644 --- a/examples/tab_logger.go +++ b/examples/tab_logger.go @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Package main implements a simple example of a logr.LogSink that logs to +// stderr in a tabular format. It is not intended to be a production logger. package main import ( @@ -36,23 +38,23 @@ var _ logr.LogSink = &tabLogSink{} // Note that Init usually takes a pointer so it can modify the receiver to save // runtime info. -func (*tabLogSink) Init(info logr.RuntimeInfo) { +func (*tabLogSink) Init(_ logr.RuntimeInfo) { } -func (tabLogSink) Enabled(level int) bool { +func (tabLogSink) Enabled(_ int) bool { return true } -func (l tabLogSink) Info(level int, msg string, kvs ...any) { - fmt.Fprintf(l.writer, "%s\t%s\t", l.name, msg) +func (l tabLogSink) Info(_ int, msg string, kvs ...any) { + _, _ = fmt.Fprintf(l.writer, "%s\t%s\t", l.name, msg) for k, v := range l.keyValues { - fmt.Fprintf(l.writer, "%s: %+v ", k, v) + _, _ = fmt.Fprintf(l.writer, "%s: %+v ", k, v) } for i := 0; i < len(kvs); i += 2 { - fmt.Fprintf(l.writer, "%s: %+v ", kvs[i], kvs[i+1]) + _, _ = fmt.Fprintf(l.writer, "%s: %+v ", kvs[i], kvs[i+1]) } - fmt.Fprintf(l.writer, "\n") - l.writer.Flush() + _, _ = fmt.Fprintf(l.writer, "\n") + _ = l.writer.Flush() } func (l tabLogSink) Error(err error, msg string, kvs ...any) { @@ -74,7 +76,9 @@ func (l tabLogSink) WithValues(kvs ...any) logr.LogSink { newMap[k] = v } for i := 0; i < len(kvs); i += 2 { - newMap[kvs[i].(string)] = kvs[i+1] + k := kvs[i].(string) //nolint:forcetypeassert + v := kvs[i+1] + newMap[k] = v } return &tabLogSink{ name: l.name, diff --git a/examples/usage_example.go b/examples/usage_example.go index e60db7a..99d464d 100644 --- a/examples/usage_example.go +++ b/examples/usage_example.go @@ -51,7 +51,7 @@ var objectMap = map[string]Object{ }, } -// Object is an app contruct that might want to be logged. +// Object is an app construct that might want to be logged. type Object struct { Name string Kind string @@ -136,7 +136,7 @@ func (c *Controller) Run() { log.V(1).Info("reconciling object for key") // Do some complicated updates updates - obj.Details = obj.Details.(int) * 2 + obj.Details = obj.Details.(int) * 2 //nolint:forcetypeassert // actually save the updates log.V(1).Info("updating object", "details", obj.Details) diff --git a/funcr/example_formatter_test.go b/funcr/example_formatter_test.go index 474e510..0bac4bd 100644 --- a/funcr/example_formatter_test.go +++ b/funcr/example_formatter_test.go @@ -41,17 +41,17 @@ type stdoutlogger struct { } func (l stdoutlogger) WithName(name string) logr.LogSink { - l.Formatter.AddName(name) + l.AddName(name) return &l } func (l stdoutlogger) WithValues(kvList ...any) logr.LogSink { - l.Formatter.AddValues(kvList) + l.AddValues(kvList) return &l } func (l stdoutlogger) WithCallDepth(depth int) logr.LogSink { - l.Formatter.AddCallDepth(depth) + l.AddCallDepth(depth) return &l } diff --git a/funcr/example_test.go b/funcr/example_test.go index 4918154..c8e47a3 100644 --- a/funcr/example_test.go +++ b/funcr/example_test.go @@ -19,12 +19,11 @@ package funcr_test import ( "fmt" - "github.com/go-logr/logr" "github.com/go-logr/logr/funcr" ) func ExampleNew() { - var log logr.Logger = funcr.New(func(prefix, args string) { + log := funcr.New(func(prefix, args string) { fmt.Println(prefix, args) }, funcr.Options{}) @@ -35,7 +34,7 @@ func ExampleNew() { } func ExampleNewJSON() { - var log logr.Logger = funcr.NewJSON(func(obj string) { + log := funcr.NewJSON(func(obj string) { fmt.Println(obj) }, funcr.Options{}) @@ -46,7 +45,7 @@ func ExampleNewJSON() { } func ExampleUnderlier() { - var log logr.Logger = funcr.New(func(prefix, args string) { + log := funcr.New(func(prefix, args string) { fmt.Println(prefix, args) }, funcr.Options{}) @@ -58,7 +57,7 @@ func ExampleUnderlier() { } func ExampleOptions() { - var log logr.Logger = funcr.NewJSON( + log := funcr.NewJSON( func(obj string) { fmt.Println(obj) }, funcr.Options{ LogCaller: funcr.All, @@ -68,8 +67,8 @@ func ExampleOptions() { log.V(1).Info("V(1) message", "key", "value") log.V(2).Info("V(2) message", "key", "value") // Output: - // {"logger":"","caller":{"file":"example_test.go","line":67},"level":0,"msg":"V(0) message","key":"value"} - // {"logger":"","caller":{"file":"example_test.go","line":68},"level":1,"msg":"V(1) message","key":"value"} + // {"logger":"","caller":{"file":"example_test.go","line":66},"level":0,"msg":"V(0) message","key":"value"} + // {"logger":"","caller":{"file":"example_test.go","line":67},"level":1,"msg":"V(1) message","key":"value"} } func ExampleOptions_renderHooks() { @@ -87,7 +86,7 @@ func ExampleOptions_renderHooks() { return []any{"labels", funcr.PseudoStruct(kvList)} } - var log logr.Logger = funcr.NewJSON( + log := funcr.NewJSON( func(obj string) { fmt.Println(obj) }, funcr.Options{ RenderBuiltinsHook: prefixSpecialKeys, @@ -101,7 +100,7 @@ func ExampleOptions_renderHooks() { } func ExamplePseudoStruct() { - var log logr.Logger = funcr.NewJSON( + log := funcr.NewJSON( func(obj string) { fmt.Println(obj) }, funcr.Options{}) kv := []any{ @@ -119,7 +118,7 @@ func ExampleOptions_maxLogDepth() { l := List{} l.Next = &l // recursive - var log logr.Logger = funcr.NewJSON( + log := funcr.NewJSON( func(obj string) { fmt.Println(obj) }, funcr.Options{MaxLogDepth: 4}) log.Info("recursive", "list", l) diff --git a/funcr/funcr.go b/funcr/funcr.go index 30568e7..b22c57d 100644 --- a/funcr/funcr.go +++ b/funcr/funcr.go @@ -77,7 +77,7 @@ func newSink(fn func(prefix, args string), formatter Formatter) logr.LogSink { write: fn, } // For skipping fnlogger.Info and fnlogger.Error. - l.Formatter.AddCallDepth(1) + l.AddCallDepth(1) // via Formatter return l } @@ -164,17 +164,17 @@ type fnlogger struct { } func (l fnlogger) WithName(name string) logr.LogSink { - l.Formatter.AddName(name) + l.AddName(name) // via Formatter return &l } func (l fnlogger) WithValues(kvList ...any) logr.LogSink { - l.Formatter.AddValues(kvList) + l.AddValues(kvList) // via Formatter return &l } func (l fnlogger) WithCallDepth(depth int) logr.LogSink { - l.Formatter.AddCallDepth(depth) + l.AddCallDepth(depth) // via Formatter return &l } diff --git a/testr/testr.go b/testr/testr.go index 5eabe2b..28168e0 100644 --- a/testr/testr.go +++ b/testr/testr.go @@ -130,12 +130,12 @@ type testloggerInterface struct { } func (l testloggerInterface) WithName(name string) logr.LogSink { - l.Formatter.AddName(name) + l.AddName(name) // via Formatter return &l } func (l testloggerInterface) WithValues(kvList ...any) logr.LogSink { - l.Formatter.AddValues(kvList) + l.AddValues(kvList) // via Formatter return &l }