diff options
| author | dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> | 2024-04-02 14:37:40 +0000 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2024-04-03 09:59:40 +0000 |
| commit | 9d2a90af8850a414d2da20b806d7aa8fd9a297ae (patch) | |
| tree | b6ce5a1bc2ecaed9f94b06b36eca20b98929970c /vendor/github.com/kkHAIKE/contextcheck | |
| parent | b90978ba49e3321a2d1cd77c07c196b088c97386 (diff) | |
mod: bump github.com/golangci/golangci-lint from 1.56.2 to 1.57.2
Bumps [github.com/golangci/golangci-lint](https://github.com/golangci/golangci-lint) from 1.56.2 to 1.57.2.
- [Release notes](https://github.com/golangci/golangci-lint/releases)
- [Changelog](https://github.com/golangci/golangci-lint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/golangci/golangci-lint/compare/v1.56.2...v1.57.2)
---
updated-dependencies:
- dependency-name: github.com/golangci/golangci-lint
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Diffstat (limited to 'vendor/github.com/kkHAIKE/contextcheck')
| -rw-r--r-- | vendor/github.com/kkHAIKE/contextcheck/.gitignore | 2 | ||||
| -rw-r--r-- | vendor/github.com/kkHAIKE/contextcheck/Makefile | 14 | ||||
| -rw-r--r-- | vendor/github.com/kkHAIKE/contextcheck/README.md | 10 | ||||
| -rw-r--r-- | vendor/github.com/kkHAIKE/contextcheck/contextcheck.go | 68 |
4 files changed, 48 insertions, 46 deletions
diff --git a/vendor/github.com/kkHAIKE/contextcheck/.gitignore b/vendor/github.com/kkHAIKE/contextcheck/.gitignore index fc1b400c8..1c2ffa5f4 100644 --- a/vendor/github.com/kkHAIKE/contextcheck/.gitignore +++ b/vendor/github.com/kkHAIKE/contextcheck/.gitignore @@ -16,3 +16,5 @@ .idea .DS_Store + +/contextcheck diff --git a/vendor/github.com/kkHAIKE/contextcheck/Makefile b/vendor/github.com/kkHAIKE/contextcheck/Makefile index 9321e9de3..613d35e93 100644 --- a/vendor/github.com/kkHAIKE/contextcheck/Makefile +++ b/vendor/github.com/kkHAIKE/contextcheck/Makefile @@ -1,5 +1,15 @@ +.PHONY: clean test build + +default: test build + +clean: + rm -rf dist/ cover.out + +test: clean + go test -v -cover ./... + build: - @GO111MODULE=on go build -ldflags '-s -w' -o contextcheck ./cmd/contextcheck/main.go + go build -ldflags '-s -w' -o contextcheck ./cmd/contextcheck/main.go install: - @GO111MODULE=on go install -ldflags '-s -w' ./cmd/contextcheck + go install -ldflags '-s -w' ./cmd/contextcheck diff --git a/vendor/github.com/kkHAIKE/contextcheck/README.md b/vendor/github.com/kkHAIKE/contextcheck/README.md index 2cc7b2e48..105b2de5a 100644 --- a/vendor/github.com/kkHAIKE/contextcheck/README.md +++ b/vendor/github.com/kkHAIKE/contextcheck/README.md @@ -3,7 +3,7 @@ # contextcheck -`contextcheck` is a static analysis tool, it is used to check whether the function uses a non-inherited context, which will result in a broken call link. +`contextcheck` is a static analysis tool used to check whether a function uses a non-inherited context that could result in a broken call link. For example: @@ -94,8 +94,8 @@ func NoInheritCancel(_ context.Context) (context.Context,context.CancelFunc) { } ``` -### skip check specify function -You can add `// nolint: contextcheck` in function decl doc comment, to skip this linter in some false-positive case. +### skip the check for the specified function +To skip this linter in some false-positive cases, you can add // nolint: contextcheck to the function declaration's comment. ```go // nolint: contextcheck @@ -112,8 +112,8 @@ func call3() { } ``` -### force mark specify function have server-side http.Request parameter -default behavior is mark http.HandlerFunc or a function use r.Context(). +### force the marking of a specified function as having a server-side http.Request parameter +The default behavior is to mark `http.HandlerFunc` or any function that uses `r.Context()`. ```go // @contextcheck(req_has_ctx) diff --git a/vendor/github.com/kkHAIKE/contextcheck/contextcheck.go b/vendor/github.com/kkHAIKE/contextcheck/contextcheck.go index c9ad0101f..62696351a 100644 --- a/vendor/github.com/kkHAIKE/contextcheck/contextcheck.go +++ b/vendor/github.com/kkHAIKE/contextcheck/contextcheck.go @@ -2,9 +2,9 @@ package contextcheck import ( "go/ast" + "go/token" "go/types" "regexp" - "strconv" "strings" "sync" @@ -68,6 +68,11 @@ var ( pkgFactMu sync.RWMutex ) +type element interface { + Pos() token.Pos + Parent() *ssa.Function +} + type resInfo struct { Valid bool Funcs []string @@ -216,37 +221,6 @@ func (r *runner) collectHttpTyps(pssa *buildssa.SSA) { } } -func (r *runner) noImportedContextAndHttp(f *ssa.Function) (ret bool) { - if !f.Pos().IsValid() { - return false - } - - file := analysisutil.File(r.pass, f.Pos()) - if file == nil { - return false - } - - if skip, has := r.skipFile[file]; has { - return skip - } - defer func() { - r.skipFile[file] = ret - }() - - for _, impt := range file.Imports { - path, err := strconv.Unquote(impt.Path.Value) - if err != nil { - continue - } - path = analysisutil.RemoveVendor(path) - if path == ctxPkg || path == httpPkg { - return false - } - } - - return true -} - func (r *runner) checkIsEntry(f *ssa.Function) (ret entryType) { // if r.noImportedContextAndHttp(f) { // return EntryNormal @@ -456,7 +430,7 @@ func (r *runner) collectCtxRef(f *ssa.Function, isHttpHandler bool) (refMap map[ for instr := range storeInstrs { if !checkedRefMap[instr.Val] { - r.pass.Reportf(instr.Pos(), "Non-inherited new context, use function like `context.WithXXX` instead") + r.Reportf(instr, "Non-inherited new context, use function like `context.WithXXX` instead") ok = false } } @@ -464,7 +438,7 @@ func (r *runner) collectCtxRef(f *ssa.Function, isHttpHandler bool) (refMap map[ for instr := range phiInstrs { for _, v := range instr.Edges { if !checkedRefMap[v] { - r.pass.Reportf(instr.Pos(), "Non-inherited new context, use function like `context.WithXXX` instead") + r.Reportf(instr, "Non-inherited new context, use function like `context.WithXXX` instead") ok = false } } @@ -564,9 +538,9 @@ func (r *runner) checkFuncWithCtx(f *ssa.Function, tp entryType) { if tp&CtxIn != 0 { if !refMap[instr] { if isHttpHandler { - r.pass.Reportf(instr.Pos(), "Non-inherited new context, use function like `context.WithXXX` or `r.Context` instead") + r.Reportf(instr, "Non-inherited new context, use function like `context.WithXXX` or `r.Context` instead") } else { - r.pass.Reportf(instr.Pos(), "Non-inherited new context, use function like `context.WithXXX` instead") + r.Reportf(instr, "Non-inherited new context, use function like `context.WithXXX` instead") } } } @@ -578,9 +552,11 @@ func (r *runner) checkFuncWithCtx(f *ssa.Function, tp entryType) { key := ff.RelString(nil) res, ok := r.getValue(key, ff) - if ok { - if !res.Valid { - r.pass.Reportf(instr.Pos(), "Function `%s` should pass the context parameter", strings.Join(reverse(res.Funcs), "->")) + if ok && !res.Valid { + if instr.Pos().IsValid() { + r.Reportf(instr, "Function `%s` should pass the context parameter", strings.Join(reverse(res.Funcs), "->")) + } else { + r.Reportf(ff, "Function `%s` should pass the context parameter", strings.Join(reverse(res.Funcs), "->")) } } } @@ -806,6 +782,20 @@ func (r *runner) setFact(key string, valid bool, funcs ...string) { } } +func (r *runner) Reportf(instr element, format string, args ...interface{}) { + pos := instr.Pos() + + if !pos.IsValid() && instr.Parent() != nil { + pos = instr.Parent().Pos() + } + + if !pos.IsValid() { + return + } + + r.pass.Reportf(pos, format, args...) +} + // setPkgFact save fact to mem func setPkgFact(pkg *types.Package, fact ctxFact) { pkgFactMu.Lock() |
