aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/go-critic
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-11-11 11:41:38 +0100
committerTaras Madan <tarasmadan@google.com>2024-11-11 11:10:48 +0000
commit27e76fae2ee2d84dc7db63af1d9ed7358ba35b7a (patch)
treeed19c0e35e272b3c4cc5a2f2c595e035b2428337 /vendor/github.com/go-critic
parent621e84e063b0e15b23e17780338627c509e1b9e8 (diff)
vendor: update
Diffstat (limited to 'vendor/github.com/go-critic')
-rw-r--r--vendor/github.com/go-critic/go-critic/checkers/caseOrder_checker.go2
-rw-r--r--vendor/github.com/go-critic/go-critic/checkers/internal/astwalk/walk_handler.go2
-rw-r--r--vendor/github.com/go-critic/go-critic/checkers/rangeAppendAll_checker.go100
-rw-r--r--vendor/github.com/go-critic/go-critic/checkers/ruleguard_checker.go2
-rw-r--r--vendor/github.com/go-critic/go-critic/linter/helpers.go2
5 files changed, 104 insertions, 4 deletions
diff --git a/vendor/github.com/go-critic/go-critic/checkers/caseOrder_checker.go b/vendor/github.com/go-critic/go-critic/checkers/caseOrder_checker.go
index 306756834..345274f1c 100644
--- a/vendor/github.com/go-critic/go-critic/checkers/caseOrder_checker.go
+++ b/vendor/github.com/go-critic/go-critic/checkers/caseOrder_checker.go
@@ -82,7 +82,7 @@ func (c *caseOrderChecker) warnUnknownType(cause, concrete ast.Node) {
c.ctx.Warn(cause, "type is not defined %s", concrete)
}
-func (c *caseOrderChecker) checkSwitch(s *ast.SwitchStmt) {
+func (c *caseOrderChecker) checkSwitch(_ *ast.SwitchStmt) {
// TODO(quasilyte): can handle expression cases that overlap.
// Cases that have narrower value range should go before wider ones.
}
diff --git a/vendor/github.com/go-critic/go-critic/checkers/internal/astwalk/walk_handler.go b/vendor/github.com/go-critic/go-critic/checkers/internal/astwalk/walk_handler.go
index 1f6e948d5..96d2dd0e6 100644
--- a/vendor/github.com/go-critic/go-critic/checkers/internal/astwalk/walk_handler.go
+++ b/vendor/github.com/go-critic/go-critic/checkers/internal/astwalk/walk_handler.go
@@ -17,7 +17,7 @@ type WalkHandler struct {
// EnterFile is a default walkerEvents.EnterFile implementation
// that reports every file as accepted candidate for checking.
-func (w *WalkHandler) EnterFile(f *ast.File) bool {
+func (w *WalkHandler) EnterFile(_ *ast.File) bool {
return true
}
diff --git a/vendor/github.com/go-critic/go-critic/checkers/rangeAppendAll_checker.go b/vendor/github.com/go-critic/go-critic/checkers/rangeAppendAll_checker.go
new file mode 100644
index 000000000..f4851d402
--- /dev/null
+++ b/vendor/github.com/go-critic/go-critic/checkers/rangeAppendAll_checker.go
@@ -0,0 +1,100 @@
+package checkers
+
+import (
+ "go/ast"
+ "go/token"
+
+ "github.com/go-critic/go-critic/checkers/internal/astwalk"
+ "github.com/go-critic/go-critic/linter"
+ "github.com/go-toolsmith/astcast"
+ "golang.org/x/tools/go/ast/astutil"
+)
+
+func init() {
+ var info linter.CheckerInfo
+ info.Name = "rangeAppendAll"
+ info.Tags = []string{linter.DiagnosticTag, linter.ExperimentalTag}
+ info.Summary = "Detects append all its data while range it"
+ info.Before = `for _, n := range ns {
+ ...
+ rs = append(rs, ns...) // append all slice data
+ }
+}`
+ info.After = `for _, n := range ns {
+ ...
+ rs = append(rs, n)
+ }
+}`
+
+ collection.AddChecker(&info, func(ctx *linter.CheckerContext) (linter.FileWalker, error) {
+ c := &rangeAppendAllChecker{ctx: ctx}
+ return astwalk.WalkerForStmt(c), nil
+ })
+}
+
+type rangeAppendAllChecker struct {
+ astwalk.WalkHandler
+ ctx *linter.CheckerContext
+}
+
+func (c *rangeAppendAllChecker) VisitStmt(stmt ast.Stmt) {
+ rangeStmt, ok := stmt.(*ast.RangeStmt)
+ if !ok || len(rangeStmt.Body.List) == 0 {
+ return
+ }
+ rangeIdent, ok := rangeStmt.X.(*ast.Ident)
+ if !ok {
+ return
+ }
+ rangeObj := c.ctx.TypesInfo.ObjectOf(rangeIdent)
+
+ astutil.Apply(rangeStmt.Body, nil, func(cur *astutil.Cursor) bool {
+ appendFrom := c.getValidAppendFrom(cur.Node())
+ if appendFrom != nil {
+ appendFromObj := c.ctx.TypesInfo.ObjectOf(appendFrom)
+ if appendFromObj == rangeObj {
+ c.warn(appendFrom)
+ }
+ }
+ return true
+ })
+}
+
+func (c *rangeAppendAllChecker) getValidAppendFrom(expr ast.Node) *ast.Ident {
+ call := astcast.ToCallExpr(expr)
+ if len(call.Args) != 2 || call.Ellipsis == token.NoPos {
+ return nil
+ }
+ if qualifiedName(call.Fun) != "append" {
+ return nil
+ }
+ if c.isSliceLiteral(call.Args[0]) {
+ return nil
+ }
+ appendFrom, ok := call.Args[1].(*ast.Ident)
+ if !ok {
+ return nil
+ }
+ return appendFrom
+}
+
+func (c *rangeAppendAllChecker) isSliceLiteral(arg ast.Expr) bool {
+ switch v := arg.(type) {
+ // []T{}, []T{n}
+ case *ast.CompositeLit:
+ return true
+ // []T(nil)
+ case *ast.CallExpr:
+ if astcast.ToArrayType(v.Fun) != astcast.NilArrayType && len(v.Args) == 1 {
+ id := astcast.ToIdent(v.Args[0])
+ return id.Name == "nil" && id.Obj == nil
+ }
+ return false
+ default:
+ return false
+ }
+}
+
+func (c *rangeAppendAllChecker) warn(appendFrom *ast.Ident) {
+ c.ctx.Warn(appendFrom, "append all `%s` data while range it", appendFrom)
+}
diff --git a/vendor/github.com/go-critic/go-critic/checkers/ruleguard_checker.go b/vendor/github.com/go-critic/go-critic/checkers/ruleguard_checker.go
index 29723a69a..485819842 100644
--- a/vendor/github.com/go-critic/go-critic/checkers/ruleguard_checker.go
+++ b/vendor/github.com/go-critic/go-critic/checkers/ruleguard_checker.go
@@ -87,7 +87,7 @@ func newErrorHandler(failOnErrorFlag string) (*parseErrorHandler, error) {
failOnErrorPredicates := map[string]func(error) bool{
"dsl": func(err error) bool { var e *ruleguard.ImportError; return !errors.As(err, &e) },
"import": func(err error) bool { var e *ruleguard.ImportError; return errors.As(err, &e) },
- "all": func(err error) bool { return true },
+ "all": func(_ error) bool { return true },
}
for _, k := range strings.Split(failOnErrorFlag, ",") {
if k == "" {
diff --git a/vendor/github.com/go-critic/go-critic/linter/helpers.go b/vendor/github.com/go-critic/go-critic/linter/helpers.go
index 0a3fc0292..d5110df64 100644
--- a/vendor/github.com/go-critic/go-critic/linter/helpers.go
+++ b/vendor/github.com/go-critic/go-critic/linter/helpers.go
@@ -116,7 +116,7 @@ func validateCheckerName(info *CheckerInfo) error {
return nil
}
-func validateCheckerDocumentation(info *CheckerInfo) error {
+func validateCheckerDocumentation(_ *CheckerInfo) error {
// TODO(quasilyte): validate documentation.
return nil
}