create ClassExtends ClassImplements InterfaceExtends nodes

This commit is contained in:
z7zmey
2018-05-12 23:10:01 +03:00
parent cf4fb26764
commit ac74ae3225
19 changed files with 1720 additions and 1495 deletions

View File

@@ -1553,12 +1553,12 @@ func (p *Printer) printStmtClass(n node.Node) {
if nn.Extends != nil {
io.WriteString(p.w, " extends ")
p.Print(nn.Extends)
p.Print(nn.Extends.ClassName)
}
if nn.Implements != nil {
io.WriteString(p.w, " implements ")
p.joinPrint(", ", nn.Implements)
p.joinPrint(", ", nn.Implements.InterfaceNames)
}
io.WriteString(p.w, "\n")
@@ -1910,7 +1910,7 @@ func (p *Printer) printStmtInterface(n node.Node) {
if nn.Extends != nil {
io.WriteString(p.w, " extends ")
p.joinPrint(", ", nn.Extends)
p.joinPrint(", ", nn.Extends.InterfaceNames)
}
io.WriteString(p.w, "\n")

View File

@@ -35,9 +35,11 @@ func TestPrintFile(t *testing.T) {
&name.NamePart{Value: "Bar"},
},
},
Extends: &name.Name{
Parts: []node.Node{
&name.NamePart{Value: "Baz"},
Extends: &stmt.ClassExtends{
ClassName: &name.Name{
Parts: []node.Node{
&name.NamePart{Value: "Baz"},
},
},
},
Stmts: []node.Node{
@@ -2482,10 +2484,14 @@ func TestPrintStmtClass(t *testing.T) {
&stmt.Class{
Modifiers: []node.Node{&node.Identifier{Value: "abstract"}},
ClassName: &node.Identifier{Value: "Foo"},
Extends: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}},
Implements: []node.Node{
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}},
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}},
Extends: &stmt.ClassExtends{
ClassName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}},
},
Implements: &stmt.ClassImplements{
InterfaceNames: []node.Node{
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}},
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}},
},
},
Stmts: []node.Node{
&stmt.ClassConstList{
@@ -2533,10 +2539,14 @@ func TestPrintStmtAnonymousClass(t *testing.T) {
},
},
},
Extends: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}},
Implements: []node.Node{
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}},
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}},
Extends: &stmt.ClassExtends{
ClassName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}},
},
Implements: &stmt.ClassImplements{
InterfaceNames: []node.Node{
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}},
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}},
},
},
Stmts: []node.Node{
&stmt.ClassConstList{
@@ -3382,9 +3392,11 @@ func TestPrintInterface(t *testing.T) {
Stmts: []node.Node{
&stmt.Interface{
InterfaceName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}},
Extends: []node.Node{
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}},
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}},
Extends: &stmt.InterfaceExtends{
InterfaceNames: []node.Node{
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}},
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}},
},
},
Stmts: []node.Node{
&stmt.ClassMethod{