aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/timonwong
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-11-11 11:41:38 +0100
committerTaras Madan <tarasmadan@google.com>2024-11-11 11:10:48 +0000
commit27e76fae2ee2d84dc7db63af1d9ed7358ba35b7a (patch)
treeed19c0e35e272b3c4cc5a2f2c595e035b2428337 /vendor/github.com/timonwong
parent621e84e063b0e15b23e17780338627c509e1b9e8 (diff)
vendor: update
Diffstat (limited to 'vendor/github.com/timonwong')
-rw-r--r--vendor/github.com/timonwong/loggercheck/.golangci.yml16
-rw-r--r--vendor/github.com/timonwong/loggercheck/README.md9
-rw-r--r--vendor/github.com/timonwong/loggercheck/internal/bytebufferpool/pool.go22
-rw-r--r--vendor/github.com/timonwong/loggercheck/internal/checkers/checker.go3
-rw-r--r--vendor/github.com/timonwong/loggercheck/internal/checkers/common.go7
-rw-r--r--vendor/github.com/timonwong/loggercheck/internal/checkers/filter.go35
-rw-r--r--vendor/github.com/timonwong/loggercheck/internal/checkers/printf/printf.go2
-rw-r--r--vendor/github.com/timonwong/loggercheck/internal/checkers/slog.go19
-rw-r--r--vendor/github.com/timonwong/loggercheck/internal/checkers/zap.go31
-rw-r--r--vendor/github.com/timonwong/loggercheck/internal/rules/rules.go5
-rw-r--r--vendor/github.com/timonwong/loggercheck/loggercheck.go2
-rw-r--r--vendor/github.com/timonwong/loggercheck/staticrules.go30
12 files changed, 108 insertions, 73 deletions
diff --git a/vendor/github.com/timonwong/loggercheck/.golangci.yml b/vendor/github.com/timonwong/loggercheck/.golangci.yml
index 287327893..6d5e17bef 100644
--- a/vendor/github.com/timonwong/loggercheck/.golangci.yml
+++ b/vendor/github.com/timonwong/loggercheck/.golangci.yml
@@ -20,7 +20,7 @@ linters-settings:
min-complexity: 15
goimports:
local-prefixes: github.com/timonwong/loggercheck
- gomnd:
+ mnd:
# don't include the "operation" and "assign"
checks:
- argument
@@ -36,7 +36,7 @@ linters-settings:
- strings.SplitN
- strconv.ParseInt
govet:
- check-shadowing: true
+ shadow: true
lll:
line-length: 140
misspell:
@@ -52,7 +52,7 @@ linters:
- dogsled
- dupl
- errcheck
- - exportloopref
+ - copyloopvar
- funlen
- gochecknoinits
- goconst
@@ -60,7 +60,7 @@ linters:
- gocyclo
- gofumpt
- goimports
- - gomnd
+ - mnd
- goprintffuncname
- gosec
- gosimple
@@ -85,10 +85,10 @@ issues:
exclude-rules:
- path: _test\.go
linters:
- - gomnd
+ - mnd
+ exclude-dirs:
+ - testdata
run:
timeout: 5m
- go: '1.17'
- skip-dirs:
- - testdata \ No newline at end of file
+ go: '1.23' \ No newline at end of file
diff --git a/vendor/github.com/timonwong/loggercheck/README.md b/vendor/github.com/timonwong/loggercheck/README.md
index 14aeca371..d8f86fc41 100644
--- a/vendor/github.com/timonwong/loggercheck/README.md
+++ b/vendor/github.com/timonwong/loggercheck/README.md
@@ -7,6 +7,9 @@ A linter checks the odd number of key and value pairs for common logger librarie
- [klog](https://github.com/kubernetes/klog)
- [logr](https://github.com/go-logr/logr)
- [zap](https://github.com/uber-go/zap)
+- [log/slog](https://pkg.go.dev/log/slog)
+
+It's recommended to use loggercheck with [golangci-lint](https://golangci-lint.run/usage/linters/#loggercheck).
## Badges
@@ -80,14 +83,14 @@ import (
func Example() {
log := logr.Discard()
- log = log.WithValues("key")
- log.Info("message", "key1", "value1", "key2", "value2", "key3")
+ log = log.WithValues("key")
+ log.Info("message", "key1", "value1", "key2", "value2", "key3")
log.Error(fmt.Errorf("error"), "message", "key1", "value1", "key2")
log.Error(fmt.Errorf("error"), "message", "key1", "value1", "key2", "value2")
var log2 logr.Logger
log2 = log
- log2.Info("message", "key1")
+ log2.Info("message", "key1")
log3 := logr.FromContextOrDiscard(context.TODO())
log3.Error(fmt.Errorf("error"), "message", "key1")
diff --git a/vendor/github.com/timonwong/loggercheck/internal/bytebufferpool/pool.go b/vendor/github.com/timonwong/loggercheck/internal/bytebufferpool/pool.go
deleted file mode 100644
index 9d88d21c4..000000000
--- a/vendor/github.com/timonwong/loggercheck/internal/bytebufferpool/pool.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package bytebufferpool
-
-import (
- "bytes"
- "sync"
-)
-
-var pool = sync.Pool{
- New: func() interface{} {
- return new(bytes.Buffer)
- },
-}
-
-func Get() *bytes.Buffer {
- buf := pool.Get().(*bytes.Buffer)
- buf.Reset()
- return buf
-}
-
-func Put(buf *bytes.Buffer) {
- pool.Put(buf)
-}
diff --git a/vendor/github.com/timonwong/loggercheck/internal/checkers/checker.go b/vendor/github.com/timonwong/loggercheck/internal/checkers/checker.go
index 5615636ef..5fa1cfb2c 100644
--- a/vendor/github.com/timonwong/loggercheck/internal/checkers/checker.go
+++ b/vendor/github.com/timonwong/loggercheck/internal/checkers/checker.go
@@ -29,8 +29,7 @@ func ExecuteChecker(c Checker, pass *analysis.Pass, call CallContext, cfg Config
nparams := params.Len() // variadic => nonzero
startIndex := nparams - 1
- lastArg := params.At(nparams - 1)
- iface, ok := lastArg.Type().(*types.Slice).Elem().(*types.Interface)
+ iface, ok := types.Unalias(params.At(startIndex).Type().(*types.Slice).Elem()).(*types.Interface)
if !ok || !iface.Empty() {
return // final (args) param is not ...interface{}
}
diff --git a/vendor/github.com/timonwong/loggercheck/internal/checkers/common.go b/vendor/github.com/timonwong/loggercheck/internal/checkers/common.go
index 42cbd0193..977f5d70c 100644
--- a/vendor/github.com/timonwong/loggercheck/internal/checkers/common.go
+++ b/vendor/github.com/timonwong/loggercheck/internal/checkers/common.go
@@ -6,11 +6,10 @@ import (
"go/printer"
"go/token"
"go/types"
+ "strings"
"unicode/utf8"
"golang.org/x/tools/go/analysis"
-
- "github.com/timonwong/loggercheck/internal/bytebufferpool"
)
const (
@@ -31,9 +30,7 @@ func extractValueFromStringArg(pass *analysis.Pass, arg ast.Expr) (value string,
func renderNodeEllipsis(fset *token.FileSet, v interface{}) string {
const maxLen = 20
- buf := bytebufferpool.Get()
- defer bytebufferpool.Put(buf)
-
+ buf := &strings.Builder{}
_ = printer.Fprint(buf, fset, v)
s := buf.String()
if utf8.RuneCountInString(s) > maxLen {
diff --git a/vendor/github.com/timonwong/loggercheck/internal/checkers/filter.go b/vendor/github.com/timonwong/loggercheck/internal/checkers/filter.go
new file mode 100644
index 000000000..a09a54f99
--- /dev/null
+++ b/vendor/github.com/timonwong/loggercheck/internal/checkers/filter.go
@@ -0,0 +1,35 @@
+package checkers
+
+import (
+ "go/ast"
+ "go/types"
+
+ "golang.org/x/tools/go/analysis"
+)
+
+func filterKeyAndValues(pass *analysis.Pass, keyAndValues []ast.Expr, objName string) []ast.Expr {
+ // Check the argument count
+ filtered := make([]ast.Expr, 0, len(keyAndValues))
+ for _, arg := range keyAndValues {
+ // Skip any object type field we found
+ switch arg := arg.(type) {
+ case *ast.CallExpr, *ast.Ident:
+ typ := types.Unalias(pass.TypesInfo.TypeOf(arg))
+
+ switch typ := typ.(type) {
+ case *types.Named:
+ obj := typ.Obj()
+ if obj != nil && obj.Name() == objName {
+ continue
+ }
+
+ default:
+ // pass
+ }
+ }
+
+ filtered = append(filtered, arg)
+ }
+
+ return filtered
+}
diff --git a/vendor/github.com/timonwong/loggercheck/internal/checkers/printf/printf.go b/vendor/github.com/timonwong/loggercheck/internal/checkers/printf/printf.go
index b38f46f20..926b57e04 100644
--- a/vendor/github.com/timonwong/loggercheck/internal/checkers/printf/printf.go
+++ b/vendor/github.com/timonwong/loggercheck/internal/checkers/printf/printf.go
@@ -157,7 +157,7 @@ func (s *formatState) parsePrecision() bool {
func parsePrintfVerb(format string) *formatState {
state := &formatState{
format: format,
- flags: make([]byte, 0, 5), //nolint:gomnd
+ flags: make([]byte, 0, 5), //nolint:mnd
nbytes: 1, // There's guaranteed to be a percent sign.
}
diff --git a/vendor/github.com/timonwong/loggercheck/internal/checkers/slog.go b/vendor/github.com/timonwong/loggercheck/internal/checkers/slog.go
new file mode 100644
index 000000000..5812e6660
--- /dev/null
+++ b/vendor/github.com/timonwong/loggercheck/internal/checkers/slog.go
@@ -0,0 +1,19 @@
+package checkers
+
+import (
+ "go/ast"
+
+ "golang.org/x/tools/go/analysis"
+)
+
+type Slog struct {
+ General
+}
+
+func (z Slog) FilterKeyAndValues(pass *analysis.Pass, keyAndValues []ast.Expr) []ast.Expr {
+ // check slog.Group() constructed group slog.Attr
+ // since we also check `slog.Group` so it is OK skip here
+ return filterKeyAndValues(pass, keyAndValues, "Attr")
+}
+
+var _ Checker = (*Slog)(nil)
diff --git a/vendor/github.com/timonwong/loggercheck/internal/checkers/zap.go b/vendor/github.com/timonwong/loggercheck/internal/checkers/zap.go
index 2356f8348..4dac21f78 100644
--- a/vendor/github.com/timonwong/loggercheck/internal/checkers/zap.go
+++ b/vendor/github.com/timonwong/loggercheck/internal/checkers/zap.go
@@ -2,7 +2,6 @@ package checkers
import (
"go/ast"
- "go/types"
"golang.org/x/tools/go/analysis"
)
@@ -12,31 +11,11 @@ type Zap struct {
}
func (z Zap) FilterKeyAndValues(pass *analysis.Pass, keyAndValues []ast.Expr) []ast.Expr {
- // Check the argument count
- filtered := make([]ast.Expr, 0, len(keyAndValues))
- for _, arg := range keyAndValues {
- // Skip any zapcore.Field we found
- switch arg := arg.(type) {
- case *ast.CallExpr, *ast.Ident:
- typ := pass.TypesInfo.TypeOf(arg)
- switch typ := typ.(type) {
- case *types.Named:
- obj := typ.Obj()
- // This is a strongly-typed field. Consume it and move on.
- // Actually it's go.uber.org/zap/zapcore.Field, however for simplicity
- // we don't check the import path
- if obj != nil && obj.Name() == "Field" {
- continue
- }
- default:
- // pass
- }
- }
-
- filtered = append(filtered, arg)
- }
-
- return filtered
+ // Skip any zapcore.Field we found
+ // This is a strongly-typed field. Consume it and move on.
+ // Actually it's go.uber.org/zap/zapcore.Field, however for simplicity
+ // we don't check the import path
+ return filterKeyAndValues(pass, keyAndValues, "Field")
}
var _ Checker = (*Zap)(nil)
diff --git a/vendor/github.com/timonwong/loggercheck/internal/rules/rules.go b/vendor/github.com/timonwong/loggercheck/internal/rules/rules.go
index 27d6ebb27..3ed69b5bd 100644
--- a/vendor/github.com/timonwong/loggercheck/internal/rules/rules.go
+++ b/vendor/github.com/timonwong/loggercheck/internal/rules/rules.go
@@ -7,8 +7,6 @@ import (
"go/types"
"io"
"strings"
-
- "github.com/timonwong/loggercheck/internal/bytebufferpool"
)
var ErrInvalidRule = errors.New("invalid rule format")
@@ -44,8 +42,7 @@ func (rs *Ruleset) Match(fn *types.Func) bool {
}
func receiverTypeOf(recvType types.Type) string {
- buf := bytebufferpool.Get()
- defer bytebufferpool.Put(buf)
+ buf := &strings.Builder{}
var recvNamed *types.Named
switch recvType := recvType.(type) {
diff --git a/vendor/github.com/timonwong/loggercheck/loggercheck.go b/vendor/github.com/timonwong/loggercheck/loggercheck.go
index 8bd10aee8..d418c7629 100644
--- a/vendor/github.com/timonwong/loggercheck/loggercheck.go
+++ b/vendor/github.com/timonwong/loggercheck/loggercheck.go
@@ -54,7 +54,7 @@ func newLoggerCheck(opts ...Option) *loggercheck {
}
fs.StringVar(&l.ruleFile, "rulefile", "", "path to a file contains a list of rules")
- fs.Var(&l.disable, "disable", "comma-separated list of disabled logger checker (kitlog,klog,logr,zap)")
+ fs.Var(&l.disable, "disable", "comma-separated list of disabled logger checker (kitlog,klog,logr,zap,slog)")
fs.BoolVar(&l.requireStringKey, "requirestringkey", false, "require all logging keys to be inlined constant strings")
fs.BoolVar(&l.noPrintfLike, "noprintflike", false, "require printf-like format specifier not present in args")
diff --git a/vendor/github.com/timonwong/loggercheck/staticrules.go b/vendor/github.com/timonwong/loggercheck/staticrules.go
index f955b3434..1398e47b2 100644
--- a/vendor/github.com/timonwong/loggercheck/staticrules.go
+++ b/vendor/github.com/timonwong/loggercheck/staticrules.go
@@ -39,10 +39,38 @@ var (
"github.com/go-kit/log.WithSuffix",
"(github.com/go-kit/log.Logger).Log",
}),
+ mustNewStaticRuleSet("slog", []string{
+ "log/slog.Group",
+
+ "log/slog.With",
+
+ "log/slog.Debug",
+ "log/slog.Info",
+ "log/slog.Warn",
+ "log/slog.Error",
+
+ "log/slog.DebugContext",
+ "log/slog.InfoContext",
+ "log/slog.WarnContext",
+ "log/slog.ErrorContext",
+
+ "(*log/slog.Logger).With",
+
+ "(*log/slog.Logger).Debug",
+ "(*log/slog.Logger).Info",
+ "(*log/slog.Logger).Warn",
+ "(*log/slog.Logger).Error",
+
+ "(*log/slog.Logger).DebugContext",
+ "(*log/slog.Logger).InfoContext",
+ "(*log/slog.Logger).WarnContext",
+ "(*log/slog.Logger).ErrorContext",
+ }),
}
checkerByRulesetName = map[string]checkers.Checker{
// by default, checkers.General will be used.
- "zap": checkers.Zap{},
+ "zap": checkers.Zap{},
+ "slog": checkers.Slog{},
}
)