diff --git a/pkg/visitor/nsresolver/namespace_resolver.go b/pkg/visitor/nsresolver/namespace_resolver.go index db823d5..2a0a208 100644 --- a/pkg/visitor/nsresolver/namespace_resolver.go +++ b/pkg/visitor/nsresolver/namespace_resolver.go @@ -144,6 +144,16 @@ func (namespaceResolver *NamespaceResolver) ExprClosure(node *ast.ExprClosure) { } } +func (namespaceResolver *NamespaceResolver) ExprArrowFunction(node *ast.ExprArrowFunction) { + for _, parameter := range node.Params { + namespaceResolver.ResolveType(parameter.(*ast.Parameter).Type) + } + + if node.ReturnType != nil { + namespaceResolver.ResolveType(node.ReturnType) + } +} + func (namespaceResolver *NamespaceResolver) StmtPropertyList(node *ast.StmtPropertyList) { if node.Type != nil { namespaceResolver.ResolveType(node.Type) diff --git a/pkg/visitor/nsresolver/namespace_resolver_test.go b/pkg/visitor/nsresolver/namespace_resolver_test.go index ad8c0b7..e959b4a 100644 --- a/pkg/visitor/nsresolver/namespace_resolver_test.go +++ b/pkg/visitor/nsresolver/namespace_resolver_test.go @@ -552,6 +552,32 @@ func TestResolveClosureName(test *testing.T) { assert.DeepEqual(test, expected, nsResolver.ResolvedNames) } +func TestResolveArrowFunctionName(test *testing.T) { + nameAB := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("A")}, &ast.NamePart{Value: []byte("B")}}} + nameBC := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("B")}, &ast.NamePart{Value: []byte("C")}}} + + arrowNode := &ast.ExprArrowFunction{ + Params: []ast.Vertex{ + &ast.Parameter{ + Type: nameAB, + Var: &ast.ExprVariable{Name: &ast.Identifier{Value: []byte("foo")}}, + }, + }, + ReturnType: &ast.Nullable{Expr: nameBC}, + Expr: &ast.ExprVariable{Name: &ast.Identifier{Value: []byte("foo")}}, + } + + expected := map[ast.Vertex]string{ + nameAB: "A\\B", + nameBC: "B\\C", + } + + nsResolver := nsresolver.NewNamespaceResolver() + traverser.NewTraverser(nsResolver).Traverse(arrowNode) + + assert.DeepEqual(test, expected, nsResolver.ResolvedNames) +} + func TestResolveConstantsName(test *testing.T) { nameAB := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("A")}, &ast.NamePart{Value: []byte("B")}}}