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
 }