dumper visitor write to io.Writer

This commit is contained in:
z7zmey 2018-03-03 22:51:22 +02:00
parent 72fc6bd82b
commit 28f699145f
2 changed files with 11 additions and 8 deletions

View File

@ -43,6 +43,7 @@ func main() {
nodes.Walk(nsResolver) nodes.Walk(nsResolver)
dumper := visitor.Dumper{ dumper := visitor.Dumper{
Writer: os.Stdout,
Indent: " | ", Indent: " | ",
Comments: comments, Comments: comments,
Positions: positions, Positions: positions,

View File

@ -3,6 +3,7 @@ package visitor
import ( import (
"fmt" "fmt"
"io"
"reflect" "reflect"
"github.com/z7zmey/php-parser/node" "github.com/z7zmey/php-parser/node"
@ -15,6 +16,7 @@ import (
// Dumper prints ast hierarchy to stdout // Dumper prints ast hierarchy to stdout
// Also prints comments and positions attached to nodes // Also prints comments and positions attached to nodes
type Dumper struct { type Dumper struct {
Writer io.Writer
Indent string Indent string
Comments comment.Comments Comments comment.Comments
Positions position.Positions Positions position.Positions
@ -25,32 +27,32 @@ type Dumper struct {
func (d Dumper) EnterNode(w walker.Walkable) bool { func (d Dumper) EnterNode(w walker.Walkable) bool {
n := w.(node.Node) n := w.(node.Node)
fmt.Printf("%v[%v]\n", d.Indent, reflect.TypeOf(n)) fmt.Fprintf(d.Writer, "%v[%v]\n", d.Indent, reflect.TypeOf(n))
if d.Positions != nil { if d.Positions != nil {
if p := d.Positions[n]; p != nil { if p := d.Positions[n]; p != nil {
fmt.Printf("%v\"Position\": %s;\n", d.Indent+" ", *p) fmt.Fprintf(d.Writer, "%v\"Position\": %s;\n", d.Indent+" ", *p)
} }
} }
if d.NsResolver != nil { if d.NsResolver != nil {
if namespacedName, ok := d.NsResolver.ResolvedNames[n]; ok { if namespacedName, ok := d.NsResolver.ResolvedNames[n]; ok {
fmt.Printf("%v\"NamespacedName\": %s;\n", d.Indent+" ", namespacedName) fmt.Fprintf(d.Writer, "%v\"NamespacedName\": %s;\n", d.Indent+" ", namespacedName)
} }
} }
if d.Comments != nil { if d.Comments != nil {
if c := d.Comments[n]; len(c) > 0 { if c := d.Comments[n]; len(c) > 0 {
fmt.Printf("%v\"Comments\":\n", d.Indent+" ") fmt.Fprintf(d.Writer, "%v\"Comments\":\n", d.Indent+" ")
for _, cc := range c { for _, cc := range c {
fmt.Printf("%v%q\n", d.Indent+" ", cc) fmt.Fprintf(d.Writer, "%v%q\n", d.Indent+" ", cc)
} }
} }
} }
if a := n.Attributes(); len(a) > 0 { if a := n.Attributes(); len(a) > 0 {
for key, attr := range a { for key, attr := range a {
fmt.Printf("%v\"%v\": %v;\n", d.Indent+" ", key, attr) fmt.Fprintf(d.Writer, "%v\"%v\": %v;\n", d.Indent+" ", key, attr)
} }
} }
@ -59,8 +61,8 @@ func (d Dumper) EnterNode(w walker.Walkable) bool {
// GetChildrenVisitor is invoked at every node parameter that contains children nodes // GetChildrenVisitor is invoked at every node parameter that contains children nodes
func (d Dumper) GetChildrenVisitor(key string) walker.Visitor { func (d Dumper) GetChildrenVisitor(key string) walker.Visitor {
fmt.Printf("%v%q:\n", d.Indent+" ", key) fmt.Fprintf(d.Writer, "%v%q:\n", d.Indent+" ", key)
return Dumper{d.Indent + " ", d.Comments, d.Positions, d.NsResolver} return Dumper{d.Writer, d.Indent + " ", d.Comments, d.Positions, d.NsResolver}
} }
// LeaveNode is invoked after node process // LeaveNode is invoked after node process