1
0
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:
Shoichi Kaji
2024-08-15 20:29:11 +09:00
committed by GitHub
parent e54773e4b9
commit 05c4801f9b
2 changed files with 36 additions and 0 deletions

View File

@@ -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)

View File

@@ -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/
}