aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/kkHAIKE/contextcheck
diff options
context:
space:
mode:
authordependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2024-04-02 14:37:40 +0000
committerTaras Madan <tarasmadan@google.com>2024-04-03 09:59:40 +0000
commit9d2a90af8850a414d2da20b806d7aa8fd9a297ae (patch)
treeb6ce5a1bc2ecaed9f94b06b36eca20b98929970c /vendor/github.com/kkHAIKE/contextcheck
parentb90978ba49e3321a2d1cd77c07c196b088c97386 (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/.gitignore2
-rw-r--r--vendor/github.com/kkHAIKE/contextcheck/Makefile14
-rw-r--r--vendor/github.com/kkHAIKE/contextcheck/README.md10
-rw-r--r--vendor/github.com/kkHAIKE/contextcheck/contextcheck.go68
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()