add linter zerologlint (#3726)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
This commit is contained in:
parent
51955752fe
commit
8674597b84
@ -2173,6 +2173,7 @@ linters:
|
|||||||
- whitespace
|
- whitespace
|
||||||
- wrapcheck
|
- wrapcheck
|
||||||
- wsl
|
- wsl
|
||||||
|
- zerologlint
|
||||||
|
|
||||||
# Enable all available linters.
|
# Enable all available linters.
|
||||||
# Default: false
|
# Default: false
|
||||||
@ -2285,6 +2286,7 @@ linters:
|
|||||||
- whitespace
|
- whitespace
|
||||||
- wrapcheck
|
- wrapcheck
|
||||||
- wsl
|
- wsl
|
||||||
|
- zerologlint
|
||||||
|
|
||||||
# Enable presets.
|
# Enable presets.
|
||||||
# https://golangci-lint.run/usage/linters
|
# https://golangci-lint.run/usage/linters
|
||||||
|
1
go.mod
1
go.mod
@ -111,6 +111,7 @@ require (
|
|||||||
github.com/xen0n/gosmopolitan v1.2.1
|
github.com/xen0n/gosmopolitan v1.2.1
|
||||||
github.com/yagipy/maintidx v1.0.0
|
github.com/yagipy/maintidx v1.0.0
|
||||||
github.com/yeya24/promlinter v0.2.0
|
github.com/yeya24/promlinter v0.2.0
|
||||||
|
github.com/ykadowak/zerologlint v0.1.1
|
||||||
gitlab.com/bosi/decorder v0.2.3
|
gitlab.com/bosi/decorder v0.2.3
|
||||||
golang.org/x/tools v0.8.0
|
golang.org/x/tools v0.8.0
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
|
2
go.sum
generated
2
go.sum
generated
@ -562,6 +562,8 @@ github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM
|
|||||||
github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk=
|
github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk=
|
||||||
github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o=
|
github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o=
|
||||||
github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA=
|
github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA=
|
||||||
|
github.com/ykadowak/zerologlint v0.1.1 h1:CA1+RsGS1DbBn3jJP2jpWfiMJipWdeqJfSY0GpNgqaY=
|
||||||
|
github.com/ykadowak/zerologlint v0.1.1/go.mod h1:KaUskqF3e/v59oPmdq1U1DnKcuHokl2/K1U4pmIELKg=
|
||||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
17
pkg/golinters/zerologlint.go
Normal file
17
pkg/golinters/zerologlint.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package golinters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ykadowak/zerologlint"
|
||||||
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
|
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewZerologLint() *goanalysis.Linter {
|
||||||
|
return goanalysis.NewLinter(
|
||||||
|
"zerologlint",
|
||||||
|
"Detects the wrong usage of `zerolog` that a user forgets to dispatch with `Send` or `Msg`.",
|
||||||
|
[]*analysis.Analyzer{zerologlint.Analyzer},
|
||||||
|
nil,
|
||||||
|
).WithLoadMode(goanalysis.LoadModeTypesInfo)
|
||||||
|
}
|
@ -890,6 +890,12 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
|
|||||||
WithSince("v1.26.0").
|
WithSince("v1.26.0").
|
||||||
WithPresets(linter.PresetStyle).
|
WithPresets(linter.PresetStyle).
|
||||||
WithURL("https://github.com/golangci/golangci-lint/blob/master/pkg/golinters/nolintlint/README.md"),
|
WithURL("https://github.com/golangci/golangci-lint/blob/master/pkg/golinters/nolintlint/README.md"),
|
||||||
|
|
||||||
|
linter.NewConfig(golinters.NewZerologLint()).
|
||||||
|
WithSince("v1.53.0").
|
||||||
|
WithPresets(linter.PresetBugs).
|
||||||
|
WithLoadForGoAnalysis().
|
||||||
|
WithURL("https://github.com/ykadowak/zerologlint"),
|
||||||
}
|
}
|
||||||
|
|
||||||
enabledByDefault := map[string]bool{
|
enabledByDefault := map[string]bool{
|
||||||
|
@ -31,6 +31,7 @@ func TestSourcesFromTestdataSubDir(t *testing.T) {
|
|||||||
subDirs := []string{
|
subDirs := []string{
|
||||||
"loggercheck",
|
"loggercheck",
|
||||||
"ginkgolinter",
|
"ginkgolinter",
|
||||||
|
"zerologlint",
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, dir := range subDirs {
|
for _, dir := range subDirs {
|
||||||
|
14
test/testdata/zerologlint/go.mod
vendored
Normal file
14
test/testdata/zerologlint/go.mod
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
module zerologlint
|
||||||
|
|
||||||
|
go 1.19
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/rs/zerolog v1.29.1
|
||||||
|
golang.org/x/exp v0.0.0-20230321023759-10a507213a29
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.18 // indirect
|
||||||
|
golang.org/x/sys v0.7.0 // indirect
|
||||||
|
)
|
21
test/testdata/zerologlint/go.sum
generated
vendored
Normal file
21
test/testdata/zerologlint/go.sum
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||||
|
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
|
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
|
||||||
|
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||||
|
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||||
|
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||||
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
|
github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98=
|
||||||
|
github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
||||||
|
github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc=
|
||||||
|
github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU=
|
||||||
|
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
|
||||||
|
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
||||||
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
|
||||||
|
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
77
test/testdata/zerologlint/zerologlint.go
vendored
Normal file
77
test/testdata/zerologlint/zerologlint.go
vendored
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
//golangcitest:args -Ezerologlint
|
||||||
|
package zerologlint
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog"
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
"golang.org/x/exp/slices"
|
||||||
|
)
|
||||||
|
|
||||||
|
func expectWarnings() {
|
||||||
|
log.Error() // want "must be dispatched by Msg or Send method"
|
||||||
|
log.Info() // want "must be dispatched by Msg or Send method"
|
||||||
|
log.Fatal() // want "must be dispatched by Msg or Send method"
|
||||||
|
log.Debug() // want "must be dispatched by Msg or Send method"
|
||||||
|
log.Warn() // want "must be dispatched by Msg or Send method"
|
||||||
|
|
||||||
|
err := fmt.Errorf("foobarerror")
|
||||||
|
log.Error().Err(err) // want "must be dispatched by Msg or Send method"
|
||||||
|
log.Error().Err(err).Str("foo", "bar").Int("foo", 1) // want "must be dispatched by Msg or Send method"
|
||||||
|
|
||||||
|
logger := log.Error() // want "must be dispatched by Msg or Send method"
|
||||||
|
logger.Err(err).Str("foo", "bar").Int("foo", 1)
|
||||||
|
|
||||||
|
// include zerolog.Dict()
|
||||||
|
log.Info(). // want "must be dispatched by Msg or Send method"
|
||||||
|
Str("foo", "bar").
|
||||||
|
Dict("dict", zerolog.Dict().
|
||||||
|
Str("bar", "baz").
|
||||||
|
Int("n", 1),
|
||||||
|
)
|
||||||
|
|
||||||
|
// conditional
|
||||||
|
logger2 := log.Info() // want "must be dispatched by Msg or Send method"
|
||||||
|
if err != nil {
|
||||||
|
logger2 = log.Error() // want "must be dispatched by Msg or Send method"
|
||||||
|
}
|
||||||
|
logger2.Str("foo", "bar")
|
||||||
|
}
|
||||||
|
|
||||||
|
func expectNoWarnings() {
|
||||||
|
log.Fatal().Send()
|
||||||
|
log.Panic().Msg("")
|
||||||
|
log.Debug().Send()
|
||||||
|
log.Info().Msg("")
|
||||||
|
log.Warn().Send()
|
||||||
|
log.Error().Msg("")
|
||||||
|
|
||||||
|
log.Error().Str("foo", "bar").Send()
|
||||||
|
err := fmt.Errorf("foobarerror")
|
||||||
|
log.Error().Err(err).Str("foo", "bar").Int("foo", 1).Msg("")
|
||||||
|
|
||||||
|
logger := log.Error()
|
||||||
|
logger.Send()
|
||||||
|
|
||||||
|
// include zerolog.Dict()
|
||||||
|
log.Info().
|
||||||
|
Str("foo", "bar").
|
||||||
|
Dict("dict", zerolog.Dict().
|
||||||
|
Str("bar", "baz").
|
||||||
|
Int("n", 1),
|
||||||
|
).Send()
|
||||||
|
|
||||||
|
// conditional
|
||||||
|
logger2 := log.Info()
|
||||||
|
if err != nil {
|
||||||
|
logger2 = log.Error()
|
||||||
|
}
|
||||||
|
logger2.Send()
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/ykadowak/zerologlint/pull/2
|
||||||
|
func packageNil() {
|
||||||
|
s := []int{1, 2, 3}
|
||||||
|
slices.Sort(s)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user