pretty printer: print Class
This commit is contained in:
parent
7c5d20a1b9
commit
cbc46cb612
@ -294,6 +294,8 @@ func getPrintFuncByNode(n node.Node) func(o io.Writer, n node.Node) {
|
|||||||
return printStmtClassConstList
|
return printStmtClassConstList
|
||||||
case *stmt.ClassMethod:
|
case *stmt.ClassMethod:
|
||||||
return printStmtClassMethod
|
return printStmtClassMethod
|
||||||
|
case *stmt.Class:
|
||||||
|
return printStmtClass
|
||||||
|
|
||||||
case *stmt.Constant:
|
case *stmt.Constant:
|
||||||
return printStmtConstant
|
return printStmtConstant
|
||||||
@ -1366,6 +1368,41 @@ func printStmtClassMethod(o io.Writer, n node.Node) {
|
|||||||
io.WriteString(o, "}\n") // TODO: handle indentation
|
io.WriteString(o, "}\n") // TODO: handle indentation
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func printStmtClass(o io.Writer, n node.Node) {
|
||||||
|
nn := n.(*stmt.Class)
|
||||||
|
|
||||||
|
if nn.Modifiers != nil {
|
||||||
|
joinPrint(" ", o, nn.Modifiers)
|
||||||
|
io.WriteString(o, " ")
|
||||||
|
}
|
||||||
|
io.WriteString(o, "class")
|
||||||
|
|
||||||
|
if nn.ClassName != nil {
|
||||||
|
io.WriteString(o, " ")
|
||||||
|
Print(o, nn.ClassName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if nn.Args != nil {
|
||||||
|
io.WriteString(o, "(")
|
||||||
|
joinPrint(", ", o, nn.Args)
|
||||||
|
io.WriteString(o, ")")
|
||||||
|
}
|
||||||
|
|
||||||
|
if nn.Extends != nil {
|
||||||
|
io.WriteString(o, " extends ")
|
||||||
|
Print(o, nn.Extends)
|
||||||
|
}
|
||||||
|
|
||||||
|
if nn.Implements != nil {
|
||||||
|
io.WriteString(o, " implements ")
|
||||||
|
joinPrint(", ", o, nn.Implements)
|
||||||
|
}
|
||||||
|
|
||||||
|
io.WriteString(o, "\n{\n") // TODO: handle indentation
|
||||||
|
printNodes(o, nn.Stmts)
|
||||||
|
io.WriteString(o, "}\n") // TODO: handle indentation
|
||||||
|
}
|
||||||
|
|
||||||
func printStmtConstant(o io.Writer, n node.Node) {
|
func printStmtConstant(o io.Writer, n node.Node) {
|
||||||
nn := n.(*stmt.Constant)
|
nn := n.(*stmt.Constant)
|
||||||
|
|
||||||
|
@ -2149,6 +2149,85 @@ $a;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPrintStmtClass(t *testing.T) {
|
||||||
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
printer.Print(o, &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"}}},
|
||||||
|
},
|
||||||
|
Stmts: []node.Node{
|
||||||
|
&stmt.ClassConstList{
|
||||||
|
Modifiers: []node.Node{&node.Identifier{Value: "public"}},
|
||||||
|
Consts: []node.Node{
|
||||||
|
&stmt.Constant{
|
||||||
|
ConstantName: &node.Identifier{Value: "FOO"},
|
||||||
|
Expr: &scalar.String{Value: "bar"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
expected := `abstract class Foo extends Bar implements Baz, Quuz
|
||||||
|
{
|
||||||
|
public const FOO = 'bar';
|
||||||
|
}
|
||||||
|
`
|
||||||
|
actual := o.String()
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPrintStmtAnonymousClass(t *testing.T) {
|
||||||
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
printer.Print(o, &stmt.Class{
|
||||||
|
Modifiers: []node.Node{&node.Identifier{Value: "abstract"}},
|
||||||
|
Args: []node.Node{
|
||||||
|
&node.Argument{
|
||||||
|
Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
|
||||||
|
},
|
||||||
|
&node.Argument{
|
||||||
|
Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
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"}}},
|
||||||
|
},
|
||||||
|
Stmts: []node.Node{
|
||||||
|
&stmt.ClassConstList{
|
||||||
|
Modifiers: []node.Node{&node.Identifier{Value: "public"}},
|
||||||
|
Consts: []node.Node{
|
||||||
|
&stmt.Constant{
|
||||||
|
ConstantName: &node.Identifier{Value: "FOO"},
|
||||||
|
Expr: &scalar.String{Value: "bar"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
expected := `abstract class($a, $b) extends Bar implements Baz, Quuz
|
||||||
|
{
|
||||||
|
public const FOO = 'bar';
|
||||||
|
}
|
||||||
|
`
|
||||||
|
actual := o.String()
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestPrintStmtConstant(t *testing.T) {
|
func TestPrintStmtConstant(t *testing.T) {
|
||||||
o := bytes.NewBufferString("")
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user