mirror of
https://github.com/mgechev/revive.git
synced 2025-11-27 22:18:41 +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 {
|
if ok, bt := w.isBuiltIn(id); ok {
|
||||||
w.addFailure(n, fmt.Sprintf("redefinition of the built-in %s %s", bt, id))
|
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:
|
case *ast.AssignStmt:
|
||||||
for _, e := range n.Lhs {
|
for _, e := range n.Lhs {
|
||||||
id, ok := e.(*ast.Ident)
|
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
|
_ = max
|
||||||
_ = min
|
_ = 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