php8: resolve attributes in NamespaceResolver
This commit is contained in:
parent
6d1eee5a79
commit
5baa28bb27
@ -222,6 +222,10 @@ func (nsr *NamespaceResolver) StmtTraitUse(n *ast.StmtTraitUse) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (nsr *NamespaceResolver) Attribute(n *ast.Attribute) {
|
||||||
|
nsr.ResolveName(n.Name, "")
|
||||||
|
}
|
||||||
|
|
||||||
// LeaveNode is invoked after node process
|
// LeaveNode is invoked after node process
|
||||||
func (nsr *NamespaceResolver) LeaveNode(n ast.Vertex) {
|
func (nsr *NamespaceResolver) LeaveNode(n ast.Vertex) {
|
||||||
switch nn := n.(type) {
|
switch nn := n.(type) {
|
||||||
|
@ -385,6 +385,7 @@ func TestResolveTraitUse(t *testing.T) {
|
|||||||
func TestResolveClassName(t *testing.T) {
|
func TestResolveClassName(t *testing.T) {
|
||||||
nameAB := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("A")}, &ast.NamePart{Value: []byte("B")}}}
|
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")}}}
|
nameBC := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("B")}, &ast.NamePart{Value: []byte("C")}}}
|
||||||
|
nameCD := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("C")}, &ast.NamePart{Value: []byte("D")}}}
|
||||||
|
|
||||||
class := &ast.StmtClass{
|
class := &ast.StmtClass{
|
||||||
Name: &ast.Identifier{Value: []byte("A")},
|
Name: &ast.Identifier{Value: []byte("A")},
|
||||||
@ -392,6 +393,13 @@ func TestResolveClassName(t *testing.T) {
|
|||||||
Implements: []ast.Vertex{
|
Implements: []ast.Vertex{
|
||||||
nameBC,
|
nameBC,
|
||||||
},
|
},
|
||||||
|
AttrGroups: []ast.Vertex{
|
||||||
|
&ast.AttributeGroup{
|
||||||
|
Attrs: []ast.Vertex{
|
||||||
|
&ast.Attribute{Name: nameCD},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
stxTree := &ast.StmtStmtList{
|
stxTree := &ast.StmtStmtList{
|
||||||
@ -404,6 +412,7 @@ func TestResolveClassName(t *testing.T) {
|
|||||||
class: "A",
|
class: "A",
|
||||||
nameAB: "A\\B",
|
nameAB: "A\\B",
|
||||||
nameBC: "B\\C",
|
nameBC: "B\\C",
|
||||||
|
nameCD: "C\\D",
|
||||||
}
|
}
|
||||||
|
|
||||||
nsResolver := nsresolver.NewNamespaceResolver()
|
nsResolver := nsresolver.NewNamespaceResolver()
|
||||||
@ -629,6 +638,19 @@ func TestResolveNamespaces(t *testing.T) {
|
|||||||
nameFG := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("F")}, &ast.NamePart{Value: []byte("G")}}}
|
nameFG := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("F")}, &ast.NamePart{Value: []byte("G")}}}
|
||||||
relativeNameCE := &ast.NameRelative{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("C")}, &ast.NamePart{Value: []byte("E")}}}
|
relativeNameCE := &ast.NameRelative{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("C")}, &ast.NamePart{Value: []byte("E")}}}
|
||||||
|
|
||||||
|
relativeNameCA := &ast.NameRelative{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("C")}, &ast.NamePart{Value: []byte("A")}}}
|
||||||
|
|
||||||
|
classA := &ast.StmtClass{
|
||||||
|
Name: &ast.Identifier{Value: []byte("A")},
|
||||||
|
AttrGroups: []ast.Vertex{
|
||||||
|
&ast.AttributeGroup{
|
||||||
|
Attrs: []ast.Vertex{
|
||||||
|
&ast.Attribute{Name: relativeNameCA},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
constantB := &ast.StmtConstant{
|
constantB := &ast.StmtConstant{
|
||||||
Name: &ast.Identifier{Value: []byte("B")},
|
Name: &ast.Identifier{Value: []byte("B")},
|
||||||
Expr: &ast.ScalarLnumber{Value: []byte("1")},
|
Expr: &ast.ScalarLnumber{Value: []byte("1")},
|
||||||
@ -643,6 +665,9 @@ func TestResolveNamespaces(t *testing.T) {
|
|||||||
&ast.StmtNamespace{
|
&ast.StmtNamespace{
|
||||||
Name: namespaceAB,
|
Name: namespaceAB,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
classA,
|
||||||
|
|
||||||
&ast.StmtConstList{
|
&ast.StmtConstList{
|
||||||
Consts: []ast.Vertex{
|
Consts: []ast.Vertex{
|
||||||
constantB,
|
constantB,
|
||||||
@ -653,6 +678,7 @@ func TestResolveNamespaces(t *testing.T) {
|
|||||||
Class: nameFG,
|
Class: nameFG,
|
||||||
Call: &ast.Identifier{Value: []byte("foo")},
|
Call: &ast.Identifier{Value: []byte("foo")},
|
||||||
},
|
},
|
||||||
|
|
||||||
&ast.StmtNamespace{
|
&ast.StmtNamespace{
|
||||||
Stmts: []ast.Vertex{},
|
Stmts: []ast.Vertex{},
|
||||||
},
|
},
|
||||||
@ -680,6 +706,8 @@ func TestResolveNamespaces(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
expected := map[ast.Vertex]string{
|
expected := map[ast.Vertex]string{
|
||||||
|
classA: "A\\B\\A",
|
||||||
|
relativeNameCA: "A\\B\\C\\A",
|
||||||
constantB: "A\\B\\B",
|
constantB: "A\\B\\B",
|
||||||
constantC: "A\\B\\C",
|
constantC: "A\\B\\C",
|
||||||
nameFG: "A\\B\\F\\G",
|
nameFG: "A\\B\\F\\G",
|
||||||
|
Loading…
Reference in New Issue
Block a user