feat: add fatcontext linter (#4583)
This commit is contained in:
parent
7e2229aa3a
commit
c00c1a5611
@ -2534,6 +2534,7 @@ linters:
|
|||||||
- exhaustive
|
- exhaustive
|
||||||
- exhaustruct
|
- exhaustruct
|
||||||
- exportloopref
|
- exportloopref
|
||||||
|
- fatcontext
|
||||||
- forbidigo
|
- forbidigo
|
||||||
- forcetypeassert
|
- forcetypeassert
|
||||||
- funlen
|
- funlen
|
||||||
@ -2647,6 +2648,7 @@ linters:
|
|||||||
- exhaustive
|
- exhaustive
|
||||||
- exhaustruct
|
- exhaustruct
|
||||||
- exportloopref
|
- exportloopref
|
||||||
|
- fatcontext
|
||||||
- forbidigo
|
- forbidigo
|
||||||
- forcetypeassert
|
- forcetypeassert
|
||||||
- funlen
|
- funlen
|
||||||
|
1
go.mod
1
go.mod
@ -11,6 +11,7 @@ require (
|
|||||||
github.com/Antonboom/nilnil v0.1.7
|
github.com/Antonboom/nilnil v0.1.7
|
||||||
github.com/Antonboom/testifylint v1.2.0
|
github.com/Antonboom/testifylint v1.2.0
|
||||||
github.com/BurntSushi/toml v1.3.2
|
github.com/BurntSushi/toml v1.3.2
|
||||||
|
github.com/Crocmagnon/fatcontext v0.2.2
|
||||||
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24
|
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24
|
||||||
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0
|
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0
|
||||||
github.com/OpenPeeDeeP/depguard/v2 v2.2.0
|
github.com/OpenPeeDeeP/depguard/v2 v2.2.0
|
||||||
|
2
go.sum
generated
2
go.sum
generated
@ -49,6 +49,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
|
|||||||
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
|
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
|
||||||
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||||
|
github.com/Crocmagnon/fatcontext v0.2.2 h1:OrFlsDdOj9hW/oBEJBNSuH7QWf+E9WPVHw+x52bXVbk=
|
||||||
|
github.com/Crocmagnon/fatcontext v0.2.2/go.mod h1:WSn/c/+MMNiD8Pri0ahRj0o9jVpeowzavOQplBJw6u0=
|
||||||
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM=
|
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM=
|
||||||
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
|
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
|
||||||
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0 h1:sATXp1x6/axKxz2Gjxv8MALP0bXaNRfQinEwyfMcx8c=
|
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0 h1:sATXp1x6/axKxz2Gjxv8MALP0bXaNRfQinEwyfMcx8c=
|
||||||
|
@ -235,6 +235,7 @@
|
|||||||
"exhaustivestruct",
|
"exhaustivestruct",
|
||||||
"exhaustruct",
|
"exhaustruct",
|
||||||
"exportloopref",
|
"exportloopref",
|
||||||
|
"fatcontext",
|
||||||
"forbidigo",
|
"forbidigo",
|
||||||
"forcetypeassert",
|
"forcetypeassert",
|
||||||
"funlen",
|
"funlen",
|
||||||
|
19
pkg/golinters/fatcontext.go
Normal file
19
pkg/golinters/fatcontext.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package golinters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Crocmagnon/fatcontext/pkg/analyzer"
|
||||||
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
|
"github.com/golangci/golangci-lint/pkg/goanalysis"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewFatContext() *goanalysis.Linter {
|
||||||
|
a := analyzer.Analyzer
|
||||||
|
|
||||||
|
return goanalysis.NewLinter(
|
||||||
|
a.Name,
|
||||||
|
a.Doc,
|
||||||
|
[]*analysis.Analyzer{a},
|
||||||
|
nil,
|
||||||
|
).WithLoadMode(goanalysis.LoadModeTypesInfo)
|
||||||
|
}
|
@ -181,6 +181,12 @@ func (LinterBuilder) Build(cfg *config.Config) ([]*linter.Config, error) {
|
|||||||
WithPresets(linter.PresetStyle).
|
WithPresets(linter.PresetStyle).
|
||||||
WithURL("https://github.com/gostaticanalysis/forcetypeassert"),
|
WithURL("https://github.com/gostaticanalysis/forcetypeassert"),
|
||||||
|
|
||||||
|
linter.NewConfig(golinters.NewFatContext()).
|
||||||
|
WithSince("1.58.0").
|
||||||
|
WithPresets(linter.PresetPerformance).
|
||||||
|
WithLoadForGoAnalysis().
|
||||||
|
WithURL("https://github.com/Crocmagnon/fatcontext"),
|
||||||
|
|
||||||
linter.NewConfig(golinters.NewFunlen(&cfg.LintersSettings.Funlen)).
|
linter.NewConfig(golinters.NewFunlen(&cfg.LintersSettings.Funlen)).
|
||||||
WithSince("v1.18.0").
|
WithSince("v1.18.0").
|
||||||
WithPresets(linter.PresetComplexity).
|
WithPresets(linter.PresetComplexity).
|
||||||
|
33
test/testdata/fatcontext.go
vendored
Normal file
33
test/testdata/fatcontext.go
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
//golangcitest:args -Efatcontext
|
||||||
|
package testdata
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
func example() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
ctx := context.WithValue(ctx, "key", i)
|
||||||
|
ctx = context.WithValue(ctx, "other", "val")
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
ctx = context.WithValue(ctx, "key", i) // want "nested context in loop"
|
||||||
|
ctx = context.WithValue(ctx, "other", "val")
|
||||||
|
}
|
||||||
|
|
||||||
|
for item := range []string{"one", "two", "three"} {
|
||||||
|
ctx = wrapContext(ctx) // want "nested context in loop"
|
||||||
|
ctx := context.WithValue(ctx, "key", item)
|
||||||
|
ctx = wrapContext(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
ctx = wrapContext(ctx) // want "nested context in loop"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func wrapContext(ctx context.Context) context.Context {
|
||||||
|
return context.WithoutCancel(ctx)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user