From 737a771450c0a261fe2dd6497d380e2da61a56ae Mon Sep 17 00:00:00 2001 From: sivchari Date: Mon, 29 Nov 2021 02:18:01 +0900 Subject: [PATCH] add containedctx linter --- go.mod | 1 + go.sum | 2 ++ pkg/golinters/containedctx.go | 23 +++++++++++++++++++++++ pkg/lint/lintersdb/manager.go | 5 +++++ test/testdata/containedctx.go | 15 +++++++++++++++ 5 files changed, 46 insertions(+) create mode 100644 pkg/golinters/containedctx.go create mode 100644 test/testdata/containedctx.go diff --git a/go.mod b/go.mod index b79320a2cd5b..a5ff509c7f3e 100644 --- a/go.mod +++ b/go.mod @@ -73,6 +73,7 @@ require ( github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c github.com/shirou/gopsutil/v3 v3.21.10 github.com/sirupsen/logrus v1.8.1 + github.com/sivchari/containedctx v1.0.0 github.com/sivchari/tenv v1.4.7 github.com/sonatard/noctx v0.0.1 github.com/sourcegraph/go-diff v0.6.1 diff --git a/go.sum b/go.sum index 6e1dc88f22b7..e4797312c617 100644 --- a/go.sum +++ b/go.sum @@ -673,6 +673,8 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sivchari/containedctx v1.0.0 h1:xQM7v922emhkPuslBeTH/sMBFyeacXX0MvYoXoTOu/w= +github.com/sivchari/containedctx v1.0.0/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= github.com/sivchari/tenv v1.4.7 h1:FdTpgRlTue5eb5nXIYgS/lyVXSjugU8UUVDwhP1NLU8= github.com/sivchari/tenv v1.4.7/go.mod h1:5nF+bITvkebQVanjU6IuMbvIot/7ReNsUV7I5NbprB0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/golinters/containedctx.go b/pkg/golinters/containedctx.go new file mode 100644 index 000000000000..1d73ad7332d8 --- /dev/null +++ b/pkg/golinters/containedctx.go @@ -0,0 +1,23 @@ +package golinters + +import ( + "github.com/sivchari/containedctx" + "golang.org/x/tools/go/analysis" + + "github.com/golangci/golangci-lint/pkg/golinters/goanalysis" +) + +func NewContainedCtx() *goanalysis.Linter { + a := containedctx.Analyzer + + analyzers := []*analysis.Analyzer{ + a, + } + + return goanalysis.NewLinter( + a.Name, + a.Doc, + analyzers, + nil, + ).WithLoadMode(goanalysis.LoadModeSyntax) +} diff --git a/pkg/lint/lintersdb/manager.go b/pkg/lint/lintersdb/manager.go index b853f3ab6dfa..615792f4055b 100644 --- a/pkg/lint/lintersdb/manager.go +++ b/pkg/lint/lintersdb/manager.go @@ -555,6 +555,11 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { WithPresets(linter.PresetBugs). WithLoadForGoAnalysis(). WithURL("https://github.com/breml/errchkjson"), + linter.NewConfig(golinters.NewContainedCtx()). + WithSince("1.44.0"). + WithPresets(linter.PresetStyle). + WithLoadForGoAnalysis(). + WithURL("https://github.com/sivchari/containedctx"), // nolintlint must be last because it looks at the results of all the previous linters for unused nolint directives linter.NewConfig(golinters.NewNoLintLint()). diff --git a/test/testdata/containedctx.go b/test/testdata/containedctx.go new file mode 100644 index 000000000000..ef8fc9fce6db --- /dev/null +++ b/test/testdata/containedctx.go @@ -0,0 +1,15 @@ +// args: -Econtainedctx +package testdata + +import "context" + +type ok struct { + i int + s string +} + +type ng struct { + ctx context.Context // ERROR "found a struct that contains a context.Context field" +} + +type empty struct{}