pretty printer: print Heredoc
This commit is contained in:
parent
9a799fc3be
commit
79277ea3cc
@ -2,6 +2,7 @@ package printer
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/z7zmey/php-parser/node/stmt"
|
"github.com/z7zmey/php-parser/node/stmt"
|
||||||
|
|
||||||
@ -99,6 +100,8 @@ func (p *Printer) printNode(n node.Node) {
|
|||||||
p.printScalarEncapsedStringPart(n)
|
p.printScalarEncapsedStringPart(n)
|
||||||
case *scalar.Encapsed:
|
case *scalar.Encapsed:
|
||||||
p.printScalarEncapsed(n)
|
p.printScalarEncapsed(n)
|
||||||
|
case *scalar.Heredoc:
|
||||||
|
p.printScalarHeredoc(n)
|
||||||
case *scalar.MagicConstant:
|
case *scalar.MagicConstant:
|
||||||
p.printScalarMagicConstant(n)
|
p.printScalarMagicConstant(n)
|
||||||
|
|
||||||
@ -530,6 +533,20 @@ func (p *Printer) printScalarEncapsed(n node.Node) {
|
|||||||
io.WriteString(p.w, "\"")
|
io.WriteString(p.w, "\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Printer) printScalarHeredoc(n node.Node) {
|
||||||
|
nn := n.(*scalar.Heredoc)
|
||||||
|
|
||||||
|
io.WriteString(p.w, "<<<")
|
||||||
|
io.WriteString(p.w, nn.Label)
|
||||||
|
io.WriteString(p.w, "\n")
|
||||||
|
|
||||||
|
for _, nn := range nn.Parts {
|
||||||
|
p.Print(nn)
|
||||||
|
}
|
||||||
|
|
||||||
|
io.WriteString(p.w, strings.Trim(nn.Label, "\"'"))
|
||||||
|
}
|
||||||
|
|
||||||
func (p *Printer) printScalarMagicConstant(n node.Node) {
|
func (p *Printer) printScalarMagicConstant(n node.Node) {
|
||||||
v := n.(*scalar.MagicConstant).Value
|
v := n.(*scalar.MagicConstant).Value
|
||||||
io.WriteString(p.w, v)
|
io.WriteString(p.w, v)
|
||||||
|
@ -258,6 +258,50 @@ func TestPrintScalarEncapsed(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPrintScalarHeredoc(t *testing.T) {
|
||||||
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
p := printer.NewPrinter(o, " ")
|
||||||
|
p.Print(&scalar.Heredoc{
|
||||||
|
Label: "LBL",
|
||||||
|
Parts: []node.Node{
|
||||||
|
&scalar.EncapsedStringPart{Value: "hello "},
|
||||||
|
&expr.Variable{VarName: &node.Identifier{Value: "var"}},
|
||||||
|
&scalar.EncapsedStringPart{Value: " world\n"},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
expected := `<<<LBL
|
||||||
|
hello $var world
|
||||||
|
LBL`
|
||||||
|
actual := o.String()
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPrintScalarNowdoc(t *testing.T) {
|
||||||
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
p := printer.NewPrinter(o, " ")
|
||||||
|
p.Print(&scalar.Heredoc{
|
||||||
|
Label: "'LBL'",
|
||||||
|
Parts: []node.Node{
|
||||||
|
&scalar.EncapsedStringPart{Value: "hello world\n"},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
expected := `<<<'LBL'
|
||||||
|
hello world
|
||||||
|
LBL`
|
||||||
|
actual := o.String()
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestPrintScalarMagicConstant(t *testing.T) {
|
func TestPrintScalarMagicConstant(t *testing.T) {
|
||||||
o := bytes.NewBufferString("")
|
o := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user