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) {
|
func (p *Printer) Print(n node.Node) {
|
||||||
p.printNode(n)
|
p.printNode(n)
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,58 @@ import (
|
|||||||
"github.com/z7zmey/php-parser/printer"
|
"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
|
// node
|
||||||
|
|
||||||
func TestPrintIdentifier(t *testing.T) {
|
func TestPrintIdentifier(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user