From 80dc3cf72aa29bdb55dc3d012efa21ca23ceb346 Mon Sep 17 00:00:00 2001 From: Timon Wong Date: Fri, 26 Aug 2022 11:05:13 +0800 Subject: [PATCH] feat: rename logrlint to loggercheck Signed-off-by: Timon Wong --- .golangci.reference.yml | 9 ++- go.mod | 1 + go.sum | 2 + pkg/config/linters_settings.go | 12 ++++ pkg/golinters/loggercheck.go | 39 +++++++++++ pkg/lint/lintersdb/manager.go | 12 +++- test/linters_test.go | 3 +- .../configs/loggercheck_logronly.yml | 5 ++ .../configs/loggercheck_zaponly.yml | 5 ++ test/testdata/loggercheck/go.mod | 11 ++++ test/testdata/loggercheck/go.sum | 66 +++++++++++++++++++ test/testdata/loggercheck/loggercheck_all.go | 24 +++++++ .../loggercheck/loggercheck_logronly.go | 15 +++++ .../loggercheck/loggercheck_zaponly.go | 13 ++++ test/testdata/logrlint/go.mod | 2 +- test/testdata/logrlint/logrlint.go | 2 +- 16 files changed, 215 insertions(+), 6 deletions(-) create mode 100644 pkg/golinters/loggercheck.go create mode 100644 test/testdata/loggercheck/configs/loggercheck_logronly.yml create mode 100644 test/testdata/loggercheck/configs/loggercheck_zaponly.yml create mode 100644 test/testdata/loggercheck/go.mod create mode 100644 test/testdata/loggercheck/go.sum create mode 100644 test/testdata/loggercheck/loggercheck_all.go create mode 100644 test/testdata/loggercheck/loggercheck_logronly.go create mode 100644 test/testdata/loggercheck/loggercheck_zaponly.go diff --git a/.golangci.reference.yml b/.golangci.reference.yml index 1003fc111626..308f778791fc 100644 --- a/.golangci.reference.yml +++ b/.golangci.reference.yml @@ -1111,6 +1111,11 @@ linters-settings: # Default: 1 tab-width: 1 + loggercheck: + logr: true + klog: true + zap: true + maintidx: # Show functions with maintainability index lower than N. # A high index indicates better maintainability (it's kind of the opposite of complexity). @@ -1939,7 +1944,7 @@ linters: - interfacer - ireturn - lll - - logrlint + - loggercheck - maintidx - makezero - maligned @@ -2044,7 +2049,7 @@ linters: - interfacer - ireturn - lll - - logrlint + - loggercheck - maintidx - makezero - maligned diff --git a/go.mod b/go.mod index cff3b89fc920..25f603539d51 100644 --- a/go.mod +++ b/go.mod @@ -95,6 +95,7 @@ require ( github.com/tdakkota/asciicheck v0.1.1 github.com/tetafro/godot v1.4.11 github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 + github.com/timonwong/loggercheck v0.5.0 github.com/timonwong/logrlint v0.1.0 github.com/tomarrell/wrapcheck/v2 v2.6.2 github.com/tommy-muehle/go-mnd/v2 v2.5.0 diff --git a/go.sum b/go.sum index cb8bbdd72363..8aa0699e66b1 100644 --- a/go.sum +++ b/go.sum @@ -532,6 +532,8 @@ github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timonwong/loggercheck v0.5.0 h1:xjH7j/C4KHWl0j+iCWjCrsbY164ZYhdxjz5gdafsjKQ= +github.com/timonwong/loggercheck v0.5.0/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= github.com/timonwong/logrlint v0.1.0 h1:phZCcypL/vtx6cGxObJgWZ5wexZF5SXFPLOM+ru0e/M= github.com/timonwong/logrlint v0.1.0/go.mod h1:Zleg4Gw+kRxNej+Ra7o+tEaW5k1qthTaYKU7rSD39LU= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= diff --git a/pkg/config/linters_settings.go b/pkg/config/linters_settings.go index f1c36c380d60..6f3039b6e837 100644 --- a/pkg/config/linters_settings.go +++ b/pkg/config/linters_settings.go @@ -66,6 +66,11 @@ var defaultLintersSettings = LintersSettings{ LineLength: 120, TabWidth: 1, }, + LoggerCheck: LoggerCheckSettings{ + Logr: true, + Klog: true, + Zap: true, + }, MaintIdx: MaintIdxSettings{ Under: 20, }, @@ -154,6 +159,7 @@ type LintersSettings struct { InterfaceBloat InterfaceBloatSettings Ireturn IreturnSettings Lll LllSettings + LoggerCheck LoggerCheckSettings MaintIdx MaintIdxSettings Makezero MakezeroSettings Maligned MalignedSettings @@ -470,6 +476,12 @@ type LllSettings struct { TabWidth int `mapstructure:"tab-width"` } +type LoggerCheckSettings struct { + Logr bool `mapstructure:"logr"` + Klog bool `mapstructure:"klog"` + Zap bool `mapstructure:"zap"` +} + type MaintIdxSettings struct { Under int `mapstructure:"under"` } diff --git a/pkg/golinters/loggercheck.go b/pkg/golinters/loggercheck.go new file mode 100644 index 000000000000..a6ad25c85a52 --- /dev/null +++ b/pkg/golinters/loggercheck.go @@ -0,0 +1,39 @@ +package golinters + +import ( + "strings" + + "github.com/timonwong/loggercheck" + "golang.org/x/tools/go/analysis" + + "github.com/golangci/golangci-lint/pkg/config" + "github.com/golangci/golangci-lint/pkg/golinters/goanalysis" +) + +func NewLoggerCheck(settings *config.LoggerCheckSettings) *goanalysis.Linter { + analyzer := loggercheck.NewAnalyzer() + cfg := map[string]map[string]interface{}{} + if settings != nil { + var disabled []string + if !settings.Logr { + disabled = append(disabled, "logr") + } + if !settings.Klog { + disabled = append(disabled, "klog") + } + if !settings.Logr { + disabled = append(disabled, "zap") + } + linterCfg := map[string]interface{}{ + "disable": strings.Join(disabled, ","), + } + cfg[analyzer.Name] = linterCfg + } + + return goanalysis.NewLinter( + analyzer.Name, + analyzer.Doc, + []*analysis.Analyzer{analyzer}, + cfg, + ).WithLoadMode(goanalysis.LoadModeTypesInfo) +} diff --git a/pkg/lint/lintersdb/manager.go b/pkg/lint/lintersdb/manager.go index b17ce3befd79..36476962b345 100644 --- a/pkg/lint/lintersdb/manager.go +++ b/pkg/lint/lintersdb/manager.go @@ -140,6 +140,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { interfaceBloatCfg *config.InterfaceBloatSettings ireturnCfg *config.IreturnSettings lllCfg *config.LllSettings + loggerCheckCfg *config.LoggerCheckSettings maintIdxCfg *config.MaintIdxSettings makezeroCfg *config.MakezeroSettings malignedCfg *config.MalignedSettings @@ -214,6 +215,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { interfaceBloatCfg = &m.cfg.LintersSettings.InterfaceBloat ireturnCfg = &m.cfg.LintersSettings.Ireturn lllCfg = &m.cfg.LintersSettings.Lll + loggerCheckCfg = &m.cfg.LintersSettings.LoggerCheck maintIdxCfg = &m.cfg.LintersSettings.MaintIdx makezeroCfg = &m.cfg.LintersSettings.Makezero malignedCfg = &m.cfg.LintersSettings.Maligned @@ -583,11 +585,19 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { WithSince("v1.8.0"). WithPresets(linter.PresetStyle), + linter.NewConfig(golinters.NewLoggerCheck(loggerCheckCfg)). + WithSince("v1.50.0"). + WithLoadForGoAnalysis(). + WithPresets(linter.PresetBugs). + WithAlternativeNames("logrlint"). + WithURL("https://github.com/timonwong/loggercheck"), + linter.NewConfig(golinters.NewLogrLint()). WithSince("v1.49.0"). WithLoadForGoAnalysis(). WithPresets(linter.PresetBugs). - WithURL("https://github.com/timonwong/logrlint"), + WithURL("https://github.com/timonwong/logrlint"). + Deprecated("The repository of the linter has been archived by the owner.", "v1.50.0", "loggercheck"), linter.NewConfig(golinters.NewMaintIdx(maintIdxCfg)). WithSince("v1.44.0"). diff --git a/test/linters_test.go b/test/linters_test.go index 466e983e50e0..7108dcc60f66 100644 --- a/test/linters_test.go +++ b/test/linters_test.go @@ -29,7 +29,8 @@ func TestTypecheck(t *testing.T) { func TestSourcesFromTestdataSubDir(t *testing.T) { subDirs := []string{ - "logrlint", + "loggercheck", + "logrlint", // deprecated linter } for _, dir := range subDirs { diff --git a/test/testdata/loggercheck/configs/loggercheck_logronly.yml b/test/testdata/loggercheck/configs/loggercheck_logronly.yml new file mode 100644 index 000000000000..001666b7a268 --- /dev/null +++ b/test/testdata/loggercheck/configs/loggercheck_logronly.yml @@ -0,0 +1,5 @@ +linters-settings: + loggercheck: + logr: true + klog: false + zap: false diff --git a/test/testdata/loggercheck/configs/loggercheck_zaponly.yml b/test/testdata/loggercheck/configs/loggercheck_zaponly.yml new file mode 100644 index 000000000000..af5e43ddfd8f --- /dev/null +++ b/test/testdata/loggercheck/configs/loggercheck_zaponly.yml @@ -0,0 +1,5 @@ +linters-settings: + loggercheck: + logr: false + klog: false + zap: zap diff --git a/test/testdata/loggercheck/go.mod b/test/testdata/loggercheck/go.mod new file mode 100644 index 000000000000..ccf163914ce7 --- /dev/null +++ b/test/testdata/loggercheck/go.mod @@ -0,0 +1,11 @@ +module loggercheck + +go 1.16 + +require ( + github.com/go-logr/logr v1.2.3 + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + go.uber.org/zap v1.23.0 + k8s.io/klog/v2 v2.70.1 +) diff --git a/test/testdata/loggercheck/go.sum b/test/testdata/loggercheck/go.sum new file mode 100644 index 000000000000..6efc35dd4539 --- /dev/null +++ b/test/testdata/loggercheck/go.sum @@ -0,0 +1,66 @@ +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= +go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= +k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= diff --git a/test/testdata/loggercheck/loggercheck_all.go b/test/testdata/loggercheck/loggercheck_all.go new file mode 100644 index 000000000000..e99f3b140d34 --- /dev/null +++ b/test/testdata/loggercheck/loggercheck_all.go @@ -0,0 +1,24 @@ +//golangcitest:args -Eloggercheck +package loggercheck + +import ( + "fmt" + + "github.com/go-logr/logr" + "go.uber.org/zap" + "k8s.io/klog/v2" +) + +func ExampleAll() { + log := logr.Discard() + log = log.WithValues("key") // want `odd number of arguments passed as key-value pairs for logging` + log.Info("message", "key1", "value1", "key2", "value2", "key3") // want `odd number of arguments passed as key-value pairs for logging` + log.Error(fmt.Errorf("error"), "message", "key1", "value1", "key2") // want `odd number of arguments passed as key-value pairs for logging` + log.Error(fmt.Errorf("error"), "message", "key1", "value1", "key2", "value2") + + klog.InfoS("message", "key1") // want `odd number of arguments passed as key-value pairs for logging` + + sugar := zap.NewExample().Sugar() + defer sugar.Sync() + sugar.Infow("message", "key1", "value1", "key2") // want `odd number of arguments passed as key-value pairs for logging` +} diff --git a/test/testdata/loggercheck/loggercheck_logronly.go b/test/testdata/loggercheck/loggercheck_logronly.go new file mode 100644 index 000000000000..f06d0ba38540 --- /dev/null +++ b/test/testdata/loggercheck/loggercheck_logronly.go @@ -0,0 +1,15 @@ +//golangcitest:args -Eloggercheck +//golangcitest:config_path configs/loggercheck_logronly.yml +package loggercheck + +import ( + "github.com/go-logr/logr" + "k8s.io/klog/v2" +) + +func ExampleLogrOnly() { + log := logr.Discard() + log.Info("message", "key1", "value1", "key2", "value2", "key3") // want `odd number of arguments passed as key-value pairs for logging` + + klog.InfoS("message", "key1") +} diff --git a/test/testdata/loggercheck/loggercheck_zaponly.go b/test/testdata/loggercheck/loggercheck_zaponly.go new file mode 100644 index 000000000000..53145210b12b --- /dev/null +++ b/test/testdata/loggercheck/loggercheck_zaponly.go @@ -0,0 +1,13 @@ +//golangcitest:args -Eloggercheck +//golangcitest:config_path configs/loggercheck_zaponly.yml +package loggercheck + +import "go.uber.org/zap" + +func ExampleZapOnly() { + sugar := zap.NewExample().Sugar() + defer sugar.Sync() + + sugar.Infow("message", "key1", "value1", "key2") // want `odd number of arguments passed as key-value pairs for logging` + sugar.Errorw("error message", "key1") // want `odd number of arguments passed as key-value pairs for logging` +} diff --git a/test/testdata/logrlint/go.mod b/test/testdata/logrlint/go.mod index a9d8d16ad374..0e92651d6989 100644 --- a/test/testdata/logrlint/go.mod +++ b/test/testdata/logrlint/go.mod @@ -2,4 +2,4 @@ module logrlint go 1.16 -require github.com/go-logr/logr v1.2.3 +require github.com/go-logr/logr v1.2.3 \ No newline at end of file diff --git a/test/testdata/logrlint/logrlint.go b/test/testdata/logrlint/logrlint.go index 6277dea4e146..db201e68d522 100644 --- a/test/testdata/logrlint/logrlint.go +++ b/test/testdata/logrlint/logrlint.go @@ -1,5 +1,5 @@ //golangcitest:args -Elogrlint -package logrlint +package loggercheck import ( "fmt"