diff --git a/node/scalar/node_heredoc.go b/node/scalar/node_heredoc.go new file mode 100644 index 0000000..1395134 --- /dev/null +++ b/node/scalar/node_heredoc.go @@ -0,0 +1,44 @@ +package scalar + +import ( + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/walker" +) + +// Heredoc node +type Heredoc struct { + Label string + Parts []node.Node +} + +// NewHeredoc node constructor +func NewHeredoc(Label string, Parts []node.Node) *Heredoc { + return &Heredoc{ + Label, + Parts, + } +} + +// Attributes returns node attributes as map +func (n *Heredoc) Attributes() map[string]interface{} { + return map[string]interface{}{ + "Label": n.Label, + } +} + +// Walk traverses nodes +// Walk is invoked recursively until v.EnterNode returns true +func (n *Heredoc) Walk(v walker.Visitor) { + if v.EnterNode(n) == false { + return + } + + if n.Parts != nil { + vv := v.GetChildrenVisitor("Parts") + for _, nn := range n.Parts { + if nn != nil { + nn.Walk(vv) + } + } + } +} diff --git a/node/scalar/t_heredoc_test.go b/node/scalar/t_heredoc_test.go new file mode 100644 index 0000000..7c8cb61 --- /dev/null +++ b/node/scalar/t_heredoc_test.go @@ -0,0 +1,144 @@ +package scalar_test + +import ( + "bytes" + "testing" + + "github.com/z7zmey/php-parser/node/expr" + + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/node/scalar" + "github.com/z7zmey/php-parser/node/stmt" + "github.com/z7zmey/php-parser/php7" + "github.com/z7zmey/php-parser/php5" +) + +func TestHeredocSimpleLabel(t *testing.T) { + src := `.|[ \t\n\r]