Skip to content

Commit df95ac2

Browse files
committed
chore: improve HasRecursive
1 parent 4da98c7 commit df95ac2

File tree

1 file changed

+9
-21
lines changed

1 file changed

+9
-21
lines changed

shorten/internal/annotation/annotation.go

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,15 @@ func HasTail(node dst.Node) bool {
3838
// HasRecursive determines whether the given node or one of its children has a
3939
// golines annotation on it. It's currently implemented for function declarations, fields,
4040
// call expressions, and selector expressions only.
41-
func HasRecursive(node dst.Node) bool {
41+
func HasRecursive[T dst.Node](node T) bool {
4242
if Has(node) {
4343
return true
4444
}
4545

46-
switch n := node.(type) {
46+
switch n := any(node).(type) {
4747
case *dst.FuncDecl:
48-
if n.Type != nil && n.Type.Params != nil {
49-
for _, item := range n.Type.Params.List {
50-
if HasRecursive(item) {
51-
return true
52-
}
53-
}
54-
}
48+
return n.Type != nil && n.Type.Params != nil &&
49+
HasRecursive(n.Type.Params)
5550

5651
case *dst.Field:
5752
return HasTail(n) || HasRecursive(n.Type)
@@ -60,20 +55,13 @@ func HasRecursive(node dst.Node) bool {
6055
return Has(n.Sel) || Has(n.X)
6156

6257
case *dst.CallExpr:
63-
if HasRecursive(n.Fun) {
64-
return true
65-
}
66-
67-
if slices.ContainsFunc(n.Args, Has) {
68-
return true
69-
}
58+
return HasRecursive(n.Fun) || slices.ContainsFunc(n.Args, Has)
7059

7160
case *dst.InterfaceType:
72-
for _, field := range n.Methods.List {
73-
if HasRecursive(field) {
74-
return true
75-
}
76-
}
61+
return HasRecursive(n.Methods)
62+
63+
case *dst.FieldList:
64+
return slices.ContainsFunc(n.List, HasRecursive)
7765
}
7866

7967
return false

0 commit comments

Comments
 (0)