Skip to content

Commit ad2b312

Browse files
committed
add linter zerologlint
1 parent da04413 commit ad2b312

File tree

9 files changed

+120
-0
lines changed

9 files changed

+120
-0
lines changed

.golangci.reference.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2103,6 +2103,7 @@ linters:
21032103
- whitespace
21042104
- wrapcheck
21052105
- wsl
2106+
- zerologlint
21062107

21072108
# Enable all available linters.
21082109
# Default: false
@@ -2213,6 +2214,7 @@ linters:
22132214
- whitespace
22142215
- wrapcheck
22152216
- wsl
2217+
- zerologlint
22162218

22172219
# Enable presets.
22182220
# https://golangci-lint.run/usage/linters

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ require (
108108
github.com/valyala/quicktemplate v1.7.0
109109
github.com/yagipy/maintidx v1.0.0
110110
github.com/yeya24/promlinter v0.2.0
111+
github.com/ykadowak/zerologlint v0.1.0
111112
gitlab.com/bosi/decorder v0.2.3
112113
golang.org/x/tools v0.7.0
113114
gopkg.in/yaml.v3 v3.0.1

go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/golinters/zerologlint.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package golinters
2+
3+
import (
4+
"github.com/ykadowak/zerologlint"
5+
"golang.org/x/tools/go/analysis"
6+
7+
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
8+
)
9+
10+
func NewZerologLint() *goanalysis.Linter {
11+
return goanalysis.NewLinter(
12+
"zerologlint",
13+
"Detects the wrong usage of `zerolog` that a user forgets to dispatch with `Send` or `Msg`.",
14+
[]*analysis.Analyzer{zerologlint.Analyzer},
15+
nil,
16+
).WithLoadMode(goanalysis.LoadModeTypesInfo)
17+
}

pkg/lint/lintersdb/manager.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -874,6 +874,12 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
874874
WithSince("v1.26.0").
875875
WithPresets(linter.PresetStyle).
876876
WithURL("https://github.com/golangci/golangci-lint/blob/master/pkg/golinters/nolintlint/README.md"),
877+
878+
linter.NewConfig(golinters.NewZerologLint()).
879+
WithSince("v1.53.0").
880+
WithPresets(linter.PresetBugs).
881+
WithLoadForGoAnalysis().
882+
WithURL("https://github.com/ykadowak/zerologlint"),
877883
}
878884

879885
enabledByDefault := map[string]bool{

test/linters_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func TestSourcesFromTestdataSubDir(t *testing.T) {
3131
subDirs := []string{
3232
"loggercheck",
3333
"ginkgolinter",
34+
"zerologlint",
3435
}
3536

3637
for _, dir := range subDirs {

test/testdata/zerologlint/go.mod

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module zerologlint
2+
3+
go 1.19
4+
5+
require (
6+
github.com/mattn/go-colorable v0.1.12 // indirect
7+
github.com/mattn/go-isatty v0.0.14 // indirect
8+
github.com/rs/zerolog v1.29.0 // indirect
9+
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 // indirect
10+
)

test/testdata/zerologlint/go.sum

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
//golangcitest:args -Ezerologlint
2+
package zerologlint
3+
4+
import (
5+
"github.com/rs/zerolog"
6+
"github.com/rs/zerolog/log"
7+
)
8+
9+
func bad() {
10+
log.Error() // want "must be dispatched by Msg or Send method"
11+
log.Info() // want "must be dispatched by Msg or Send method"
12+
log.Fatal() // want "must be dispatched by Msg or Send method"
13+
log.Debug() // want "must be dispatched by Msg or Send method"
14+
log.Warn() // want "must be dispatched by Msg or Send method"
15+
16+
var err error
17+
log.Error().Err(err) // want "must be dispatched by Msg or Send method"
18+
log.Error().Err(err).Str("foo", "bar").Int("foo", 1) // want "must be dispatched by Msg or Send method"
19+
20+
logger := log.Error() // want "must be dispatched by Msg or Send method"
21+
logger.Err(err).Str("foo", "bar").Int("foo", 1)
22+
23+
// include zerolog.Dict()
24+
log.Info(). // want "must be dispatched by Msg or Send method"
25+
Str("foo", "bar").
26+
Dict("dict", zerolog.Dict().
27+
Str("bar", "baz").
28+
Int("n", 1),
29+
)
30+
31+
// conditional
32+
logger2 := log.Info() // want "must be dispatched by Msg or Send method"
33+
if err != nil {
34+
logger2 = log.Error() // want "must be dispatched by Msg or Send method"
35+
}
36+
logger2.Str("foo", "bar")
37+
}
38+
39+
func ok() {
40+
log.Fatal().Send()
41+
log.Panic().Msg("")
42+
log.Debug().Send()
43+
log.Info().Msg("")
44+
log.Warn().Send()
45+
log.Error().Msg("")
46+
47+
log.Error().Str("foo", "bar").Send()
48+
var err error
49+
log.Error().Err(err).Str("foo", "bar").Int("foo", 1).Msg("")
50+
51+
logger := log.Error()
52+
logger.Send()
53+
54+
// include zerolog.Dict()
55+
log.Info().
56+
Str("foo", "bar").
57+
Dict("dict", zerolog.Dict().
58+
Str("bar", "baz").
59+
Int("n", 1),
60+
).Send()
61+
62+
// conditional
63+
logger2 := log.Info()
64+
if err != nil {
65+
logger2 = log.Error()
66+
}
67+
logger2.Send()
68+
}

0 commit comments

Comments
 (0)