pretty printer: print file
This commit is contained in:
parent
79277ea3cc
commit
0abe99274b
@ -30,6 +30,27 @@ func NewPrinter(w io.Writer, indentStr string) *Printer {
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Printer) PrintFile(n *stmt.StmtList) {
|
||||
if len(n.Stmts) > 0 {
|
||||
firstStmt := n.Stmts[0]
|
||||
n.Stmts = n.Stmts[1:]
|
||||
|
||||
switch fs := firstStmt.(type) {
|
||||
case *stmt.InlineHtml:
|
||||
io.WriteString(p.w, fs.Value)
|
||||
io.WriteString(p.w, "<?php\n")
|
||||
default:
|
||||
io.WriteString(p.w, "<?php\n")
|
||||
p.printIndent()
|
||||
p.Print(fs)
|
||||
io.WriteString(p.w, "\n")
|
||||
}
|
||||
}
|
||||
p.indentDepth--
|
||||
p.printNodes(n.Stmts)
|
||||
io.WriteString(p.w, "\n")
|
||||
}
|
||||
|
||||
func (p *Printer) Print(n node.Node) {
|
||||
p.printNode(n)
|
||||
}
|
||||
|
@ -15,6 +15,58 @@ import (
|
||||
"github.com/z7zmey/php-parser/printer"
|
||||
)
|
||||
|
||||
func TestPrintFile(t *testing.T) {
|
||||
o := bytes.NewBufferString("")
|
||||
|
||||
p := printer.NewPrinter(o, " ")
|
||||
p.PrintFile(&stmt.StmtList{
|
||||
Stmts: []node.Node{
|
||||
&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
|
||||
&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
|
||||
},
|
||||
})
|
||||
|
||||
expected := `<?php
|
||||
$a;
|
||||
$b;
|
||||
`
|
||||
actual := o.String()
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrintFileInlineHtml(t *testing.T) {
|
||||
o := bytes.NewBufferString("")
|
||||
|
||||
p := printer.NewPrinter(o, " ")
|
||||
p.PrintFile(&stmt.StmtList{
|
||||
Stmts: []node.Node{
|
||||
&stmt.InlineHtml{Value: "<div>HTML</div>"},
|
||||
&stmt.Expression{
|
||||
Expr: &scalar.Heredoc{
|
||||
Label: "\"LBL\"",
|
||||
Parts: []node.Node{
|
||||
&scalar.EncapsedStringPart{Value: "hello world\n"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
expected := `<div>HTML</div><?php
|
||||
<<<"LBL"
|
||||
hello world
|
||||
LBL;
|
||||
`
|
||||
actual := o.String()
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
// node
|
||||
|
||||
func TestPrintIdentifier(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user