mirror of
https://github.com/mgechev/revive.git
synced 2025-11-23 22:04:49 +02:00
check param, result, type param of function in redefines-builtin-id rule (#1023)
* check param, result, type param of function in redefines-builtin-id rule * combine the if statements * tiny refactoring to make it more Go idiomatic --------- Co-authored-by: chavacava <salvadorcavadini+github@gmail.com>
This commit is contained in:
@@ -145,6 +145,31 @@ func (w *lintRedefinesBuiltinID) Visit(node ast.Node) ast.Visitor {
|
||||
if ok, bt := w.isBuiltIn(id); ok {
|
||||
w.addFailure(n, fmt.Sprintf("redefinition of the built-in %s %s", bt, id))
|
||||
}
|
||||
case *ast.FuncType:
|
||||
var fields []*ast.Field
|
||||
if n.TypeParams != nil {
|
||||
fields = append(fields, n.TypeParams.List...)
|
||||
}
|
||||
if n.Params != nil {
|
||||
fields = append(fields, n.Params.List...)
|
||||
}
|
||||
if n.Results != nil {
|
||||
fields = append(fields, n.Results.List...)
|
||||
}
|
||||
for _, field := range fields {
|
||||
for _, name := range field.Names {
|
||||
obj := name.Obj
|
||||
isTypeOrName := obj != nil && (obj.Kind == ast.Var || obj.Kind == ast.Typ)
|
||||
if !isTypeOrName {
|
||||
continue
|
||||
}
|
||||
|
||||
id := obj.Name
|
||||
if ok, bt := w.isBuiltIn(id); ok {
|
||||
w.addFailure(name, fmt.Sprintf("redefinition of the built-in %s %s", bt, id))
|
||||
}
|
||||
}
|
||||
}
|
||||
case *ast.AssignStmt:
|
||||
for _, e := range n.Lhs {
|
||||
id, ok := e.(*ast.Ident)
|
||||
|
||||
11
testdata/redefines-builtin-id.go
vendored
11
testdata/redefines-builtin-id.go
vendored
@@ -41,3 +41,14 @@ func foo() {
|
||||
_ = max
|
||||
_ = min
|
||||
}
|
||||
|
||||
func foo1(new int) { // MATCH /redefinition of the built-in function new/
|
||||
_ = new
|
||||
}
|
||||
|
||||
func foo2() (new int) { // MATCH /redefinition of the built-in function new/
|
||||
return
|
||||
}
|
||||
|
||||
func foo3[new any]() { // MATCH /redefinition of the built-in function new/
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user