pretty printer: print Break, Catch, ClassConstList, Constant nodes
This commit is contained in:
parent
240efb20e5
commit
c826d26edf
@ -19,10 +19,10 @@ func Print(o io.Writer, n node.Node) {
|
|||||||
fn(o, n)
|
fn(o, n)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printComaSeparated(o io.Writer, nn []node.Node) {
|
func joinPrint(glue string, o io.Writer, nn []node.Node) {
|
||||||
for k, n := range nn {
|
for k, n := range nn {
|
||||||
if k > 0 {
|
if k > 0 {
|
||||||
io.WriteString(o, ", ")
|
io.WriteString(o, glue)
|
||||||
}
|
}
|
||||||
|
|
||||||
Print(o, n)
|
Print(o, n)
|
||||||
@ -33,7 +33,6 @@ func printNodes(o io.Writer, nn []node.Node) {
|
|||||||
// TODO: handle indentations
|
// TODO: handle indentations
|
||||||
for _, n := range nn {
|
for _, n := range nn {
|
||||||
Print(o, n)
|
Print(o, n)
|
||||||
io.WriteString(o, ";\n")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,8 +282,16 @@ func getPrintFuncByNode(n node.Node) func(o io.Writer, n node.Node) {
|
|||||||
return printStmtAltSwitch
|
return printStmtAltSwitch
|
||||||
case *stmt.AltWhile:
|
case *stmt.AltWhile:
|
||||||
return printStmtAltWhile
|
return printStmtAltWhile
|
||||||
|
case *stmt.Break:
|
||||||
|
return printStmtBreak
|
||||||
case *stmt.Case:
|
case *stmt.Case:
|
||||||
return printStmtCase
|
return printStmtCase
|
||||||
|
case *stmt.Catch:
|
||||||
|
return printStmtCatch
|
||||||
|
case *stmt.ClassConstList:
|
||||||
|
return printStmtClassConstList
|
||||||
|
case *stmt.Constant:
|
||||||
|
return printStmtConstant
|
||||||
case *stmt.StmtList:
|
case *stmt.StmtList:
|
||||||
return printStmtStmtList
|
return printStmtStmtList
|
||||||
case *stmt.Expression:
|
case *stmt.Expression:
|
||||||
@ -822,7 +829,7 @@ func printExprArray(o io.Writer, n node.Node) {
|
|||||||
nn := n.(*expr.Array)
|
nn := n.(*expr.Array)
|
||||||
|
|
||||||
io.WriteString(o, "array(")
|
io.WriteString(o, "array(")
|
||||||
printComaSeparated(o, nn.Items)
|
joinPrint(", ", o, nn.Items)
|
||||||
io.WriteString(o, ")")
|
io.WriteString(o, ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -877,12 +884,12 @@ func printExprClosure(o io.Writer, n node.Node) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
io.WriteString(o, "(")
|
io.WriteString(o, "(")
|
||||||
printComaSeparated(o, nn.Params)
|
joinPrint(", ", o, nn.Params)
|
||||||
io.WriteString(o, ")")
|
io.WriteString(o, ")")
|
||||||
|
|
||||||
if nn.Uses != nil {
|
if nn.Uses != nil {
|
||||||
io.WriteString(o, " use (")
|
io.WriteString(o, " use (")
|
||||||
printComaSeparated(o, nn.Uses)
|
joinPrint(", ", o, nn.Uses)
|
||||||
io.WriteString(o, ")")
|
io.WriteString(o, ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -942,7 +949,7 @@ func printExprFunctionCall(o io.Writer, n node.Node) {
|
|||||||
|
|
||||||
Print(o, nn.Function)
|
Print(o, nn.Function)
|
||||||
io.WriteString(o, "(")
|
io.WriteString(o, "(")
|
||||||
printComaSeparated(o, nn.Arguments)
|
joinPrint(", ", o, nn.Arguments)
|
||||||
io.WriteString(o, ")")
|
io.WriteString(o, ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -972,7 +979,7 @@ func printExprIsset(o io.Writer, n node.Node) {
|
|||||||
nn := n.(*expr.Isset)
|
nn := n.(*expr.Isset)
|
||||||
|
|
||||||
io.WriteString(o, "isset(")
|
io.WriteString(o, "isset(")
|
||||||
printComaSeparated(o, nn.Variables)
|
joinPrint(", ", o, nn.Variables)
|
||||||
io.WriteString(o, ")")
|
io.WriteString(o, ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -980,7 +987,7 @@ func printExprList(o io.Writer, n node.Node) {
|
|||||||
nn := n.(*expr.List)
|
nn := n.(*expr.List)
|
||||||
|
|
||||||
io.WriteString(o, "list(")
|
io.WriteString(o, "list(")
|
||||||
printComaSeparated(o, nn.Items)
|
joinPrint(", ", o, nn.Items)
|
||||||
io.WriteString(o, ")")
|
io.WriteString(o, ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -991,7 +998,7 @@ func printExprMethodCall(o io.Writer, n node.Node) {
|
|||||||
io.WriteString(o, "->")
|
io.WriteString(o, "->")
|
||||||
Print(o, nn.Method)
|
Print(o, nn.Method)
|
||||||
io.WriteString(o, "(")
|
io.WriteString(o, "(")
|
||||||
printComaSeparated(o, nn.Arguments)
|
joinPrint(", ", o, nn.Arguments)
|
||||||
io.WriteString(o, ")")
|
io.WriteString(o, ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1003,7 +1010,7 @@ func printExprNew(o io.Writer, n node.Node) {
|
|||||||
|
|
||||||
if nn.Arguments != nil {
|
if nn.Arguments != nil {
|
||||||
io.WriteString(o, "(")
|
io.WriteString(o, "(")
|
||||||
printComaSeparated(o, nn.Arguments)
|
joinPrint(", ", o, nn.Arguments)
|
||||||
io.WriteString(o, ")")
|
io.WriteString(o, ")")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1080,7 +1087,7 @@ func printExprShortArray(o io.Writer, n node.Node) {
|
|||||||
nn := n.(*expr.ShortArray)
|
nn := n.(*expr.ShortArray)
|
||||||
|
|
||||||
io.WriteString(o, "[")
|
io.WriteString(o, "[")
|
||||||
printComaSeparated(o, nn.Items)
|
joinPrint(", ", o, nn.Items)
|
||||||
io.WriteString(o, "]")
|
io.WriteString(o, "]")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1088,7 +1095,7 @@ func printExprShortList(o io.Writer, n node.Node) {
|
|||||||
nn := n.(*expr.ShortList)
|
nn := n.(*expr.ShortList)
|
||||||
|
|
||||||
io.WriteString(o, "[")
|
io.WriteString(o, "[")
|
||||||
printComaSeparated(o, nn.Items)
|
joinPrint(", ", o, nn.Items)
|
||||||
io.WriteString(o, "]")
|
io.WriteString(o, "]")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1099,7 +1106,7 @@ func printExprStaticCall(o io.Writer, n node.Node) {
|
|||||||
io.WriteString(o, "::")
|
io.WriteString(o, "::")
|
||||||
Print(o, nn.Call)
|
Print(o, nn.Call)
|
||||||
io.WriteString(o, "(")
|
io.WriteString(o, "(")
|
||||||
printComaSeparated(o, nn.Arguments)
|
joinPrint(", ", o, nn.Arguments)
|
||||||
io.WriteString(o, ")")
|
io.WriteString(o, ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1190,11 +1197,11 @@ func printStmtAltFor(o io.Writer, n node.Node) {
|
|||||||
nn := n.(*stmt.AltFor)
|
nn := n.(*stmt.AltFor)
|
||||||
|
|
||||||
io.WriteString(o, "for (")
|
io.WriteString(o, "for (")
|
||||||
printComaSeparated(o, nn.Init)
|
joinPrint(", ", o, nn.Init)
|
||||||
io.WriteString(o, "; ")
|
io.WriteString(o, "; ")
|
||||||
printComaSeparated(o, nn.Cond)
|
joinPrint(", ", o, nn.Cond)
|
||||||
io.WriteString(o, "; ")
|
io.WriteString(o, "; ")
|
||||||
printComaSeparated(o, nn.Loop)
|
joinPrint(", ", o, nn.Loop)
|
||||||
io.WriteString(o, ") :\n")
|
io.WriteString(o, ") :\n")
|
||||||
|
|
||||||
Print(o, nn.Stmt)
|
Print(o, nn.Stmt)
|
||||||
@ -1273,6 +1280,18 @@ func printStmtAltWhile(o io.Writer, n node.Node) {
|
|||||||
io.WriteString(o, "endwhile;\n")
|
io.WriteString(o, "endwhile;\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func printStmtBreak(o io.Writer, n node.Node) {
|
||||||
|
nn := n.(*stmt.Break)
|
||||||
|
|
||||||
|
io.WriteString(o, "break")
|
||||||
|
if nn.Expr != nil {
|
||||||
|
io.WriteString(o, " ")
|
||||||
|
Print(o, nn.Expr)
|
||||||
|
}
|
||||||
|
|
||||||
|
io.WriteString(o, ";\n")
|
||||||
|
}
|
||||||
|
|
||||||
func printStmtCase(o io.Writer, n node.Node) {
|
func printStmtCase(o io.Writer, n node.Node) {
|
||||||
nn := n.(*stmt.Case)
|
nn := n.(*stmt.Case)
|
||||||
|
|
||||||
@ -1282,6 +1301,40 @@ func printStmtCase(o io.Writer, n node.Node) {
|
|||||||
printNodes(o, nn.Stmts)
|
printNodes(o, nn.Stmts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func printStmtCatch(o io.Writer, n node.Node) {
|
||||||
|
nn := n.(*stmt.Catch)
|
||||||
|
|
||||||
|
io.WriteString(o, "catch (")
|
||||||
|
joinPrint(" | ", o, nn.Types)
|
||||||
|
io.WriteString(o, " ")
|
||||||
|
Print(o, nn.Variable)
|
||||||
|
io.WriteString(o, ") {\n")
|
||||||
|
printNodes(o, nn.Stmts)
|
||||||
|
io.WriteString(o, "}\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
func printStmtClassConstList(o io.Writer, n node.Node) {
|
||||||
|
nn := n.(*stmt.ClassConstList)
|
||||||
|
|
||||||
|
if nn.Modifiers != nil {
|
||||||
|
joinPrint(" ", o, nn.Modifiers)
|
||||||
|
io.WriteString(o, " ")
|
||||||
|
}
|
||||||
|
io.WriteString(o, "const ")
|
||||||
|
|
||||||
|
joinPrint(", ", o, nn.Consts)
|
||||||
|
|
||||||
|
io.WriteString(o, ";\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
func printStmtConstant(o io.Writer, n node.Node) {
|
||||||
|
nn := n.(*stmt.Constant)
|
||||||
|
|
||||||
|
Print(o, nn.ConstantName)
|
||||||
|
io.WriteString(o, " = ")
|
||||||
|
Print(o, nn.Expr)
|
||||||
|
}
|
||||||
|
|
||||||
func printStmtStmtList(o io.Writer, n node.Node) {
|
func printStmtStmtList(o io.Writer, n node.Node) {
|
||||||
nn := n.(*stmt.StmtList)
|
nn := n.(*stmt.StmtList)
|
||||||
|
|
||||||
@ -1292,4 +1345,6 @@ func printStmtExpression(o io.Writer, n node.Node) {
|
|||||||
nn := n.(*stmt.Expression)
|
nn := n.(*stmt.Expression)
|
||||||
|
|
||||||
Print(o, nn.Expr)
|
Print(o, nn.Expr)
|
||||||
|
|
||||||
|
io.WriteString(o, ";\n")
|
||||||
}
|
}
|
||||||
|
@ -1864,13 +1864,13 @@ func TestPrintAltFor(t *testing.T) {
|
|||||||
|
|
||||||
printer.Print(o, &stmt.AltFor{
|
printer.Print(o, &stmt.AltFor{
|
||||||
Init: []node.Node{
|
Init: []node.Node{
|
||||||
&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
|
&expr.Variable{VarName: &node.Identifier{Value: "a"}},
|
||||||
},
|
},
|
||||||
Cond: []node.Node{
|
Cond: []node.Node{
|
||||||
&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
|
&expr.Variable{VarName: &node.Identifier{Value: "b"}},
|
||||||
},
|
},
|
||||||
Loop: []node.Node{
|
Loop: []node.Node{
|
||||||
&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "c"}}},
|
&expr.Variable{VarName: &node.Identifier{Value: "c"}},
|
||||||
},
|
},
|
||||||
Stmt: &stmt.StmtList{
|
Stmt: &stmt.StmtList{
|
||||||
Stmts: []node.Node{
|
Stmts: []node.Node{
|
||||||
@ -1998,7 +1998,7 @@ func TestPrintAltWhile(t *testing.T) {
|
|||||||
o := bytes.NewBufferString("")
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
printer.Print(o, &stmt.AltWhile{
|
printer.Print(o, &stmt.AltWhile{
|
||||||
Cond: &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
|
Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
|
||||||
Stmt: &stmt.StmtList{
|
Stmt: &stmt.StmtList{
|
||||||
Stmts: []node.Node{
|
Stmts: []node.Node{
|
||||||
&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
|
&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
|
||||||
@ -2014,6 +2014,21 @@ func TestPrintAltWhile(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPrintStmtBreak(t *testing.T) {
|
||||||
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
printer.Print(o, &stmt.Break{
|
||||||
|
Expr: &scalar.Lnumber{Value: "1"},
|
||||||
|
})
|
||||||
|
|
||||||
|
expected := "break 1;\n"
|
||||||
|
actual := o.String()
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestPrintStmtCase(t *testing.T) {
|
func TestPrintStmtCase(t *testing.T) {
|
||||||
o := bytes.NewBufferString("")
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
@ -2032,6 +2047,72 @@ func TestPrintStmtCase(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPrintStmtCatch(t *testing.T) {
|
||||||
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
printer.Print(o, &stmt.Catch{
|
||||||
|
Types: []node.Node{
|
||||||
|
&name.Name{Parts: []node.Node{&name.NamePart{Value: "Exception"}}},
|
||||||
|
&name.FullyQualified{Parts: []node.Node{&name.NamePart{Value: "RuntimeException"}}},
|
||||||
|
},
|
||||||
|
Variable: &expr.Variable{VarName: &node.Identifier{Value: "e"}},
|
||||||
|
Stmts: []node.Node{
|
||||||
|
&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
expected := `catch (Exception | \RuntimeException $e) {
|
||||||
|
$a;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
actual := o.String()
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPrintStmtClassConstList(t *testing.T) {
|
||||||
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
printer.Print(o, &stmt.ClassConstList{
|
||||||
|
Modifiers: []node.Node{&node.Identifier{Value: "public"}},
|
||||||
|
Consts: []node.Node{
|
||||||
|
&stmt.Constant{
|
||||||
|
ConstantName: &node.Identifier{Value: "FOO"},
|
||||||
|
Expr: &scalar.String{Value: "a"},
|
||||||
|
},
|
||||||
|
&stmt.Constant{
|
||||||
|
ConstantName: &node.Identifier{Value: "BAR"},
|
||||||
|
Expr: &scalar.String{Value: "b"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
expected := "public const FOO = 'a', BAR = 'b';\n"
|
||||||
|
actual := o.String()
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPrintStmtConstant(t *testing.T) {
|
||||||
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
printer.Print(o, &stmt.Constant{
|
||||||
|
ConstantName: &node.Identifier{Value: "FOO"},
|
||||||
|
Expr: &scalar.String{Value: "BAR"},
|
||||||
|
})
|
||||||
|
|
||||||
|
expected := "FOO = 'BAR'"
|
||||||
|
actual := o.String()
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestPrintStmtList(t *testing.T) {
|
func TestPrintStmtList(t *testing.T) {
|
||||||
o := bytes.NewBufferString("")
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
@ -2055,7 +2136,7 @@ func TestPrintExpression(t *testing.T) {
|
|||||||
|
|
||||||
printer.Print(o, &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}})
|
printer.Print(o, &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}})
|
||||||
|
|
||||||
expected := "$a"
|
expected := "$a;\n"
|
||||||
actual := o.String()
|
actual := o.String()
|
||||||
|
|
||||||
if expected != actual {
|
if expected != actual {
|
||||||
|
Loading…
Reference in New Issue
Block a user