Documentation ¶
Overview ¶
Package visitor contains walker.visitor implementations
Package visitor contains walker.visitor implementations ¶
Package visitor contains walker.visitor implementations ¶
Package visitor contains walker.visitor implementations ¶
Package visitor contains walker.visitor implementations
Index ¶
- type Dumper
- func (d *Dumper) EnterChildList(key string, w walker.Walkable)
- func (d *Dumper) EnterChildNode(key string, w walker.Walkable)
- func (d *Dumper) EnterNode(w walker.Walkable) bool
- func (d *Dumper) LeaveChildList(key string, w walker.Walkable)
- func (d *Dumper) LeaveChildNode(key string, w walker.Walkable)
- func (d *Dumper) LeaveNode(n walker.Walkable)
- type GoDumper
- func (d *GoDumper) EnterChildList(key string, w walker.Walkable)
- func (d *GoDumper) EnterChildNode(key string, w walker.Walkable)
- func (d *GoDumper) EnterNode(w walker.Walkable) bool
- func (d *GoDumper) LeaveChildList(key string, w walker.Walkable)
- func (d *GoDumper) LeaveChildNode(key string, w walker.Walkable)
- func (d *GoDumper) LeaveNode(n walker.Walkable)
- type JsonDumper
- func (d *JsonDumper) EnterChildList(key string, w walker.Walkable)
- func (d *JsonDumper) EnterChildNode(key string, w walker.Walkable)
- func (d *JsonDumper) EnterNode(w walker.Walkable) bool
- func (d *JsonDumper) LeaveChildList(key string, w walker.Walkable)
- func (d *JsonDumper) LeaveChildNode(key string, w walker.Walkable)
- func (d *JsonDumper) LeaveNode(n walker.Walkable)
- type Namespace
- type NamespaceResolver
- func (nsr *NamespaceResolver) AddAlias(useType string, nn node.Node, prefix []node.Node)
- func (nsr *NamespaceResolver) AddNamespacedName(nn node.Node, nodeName string)
- func (nsr *NamespaceResolver) EnterChildList(key string, w walker.Walkable)
- func (nsr *NamespaceResolver) EnterChildNode(key string, w walker.Walkable)
- func (nsr *NamespaceResolver) EnterNode(w walker.Walkable) bool
- func (nsr *NamespaceResolver) LeaveChildList(key string, w walker.Walkable)
- func (nsr *NamespaceResolver) LeaveChildNode(key string, w walker.Walkable)
- func (nsr *NamespaceResolver) LeaveNode(w walker.Walkable)
- func (nsr *NamespaceResolver) ResolveName(nameNode node.Node, aliasType string)
- func (nsr *NamespaceResolver) ResolveType(n node.Node)
- type PrettyJsonDumper
- func (d *PrettyJsonDumper) EnterChildList(key string, w walker.Walkable)
- func (d *PrettyJsonDumper) EnterChildNode(key string, w walker.Walkable)
- func (d *PrettyJsonDumper) EnterNode(w walker.Walkable) bool
- func (d *PrettyJsonDumper) LeaveChildList(key string, w walker.Walkable)
- func (d *PrettyJsonDumper) LeaveChildNode(key string, w walker.Walkable)
- func (d *PrettyJsonDumper) LeaveNode(n walker.Walkable)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Dumper ¶
type Dumper struct { Writer io.Writer Indent string NsResolver *NamespaceResolver }
Dumper writes ast hierarchy to an io.Writer Also prints comments and positions attached to nodes
Example ¶
package main import ( "bytes" "os" "github.com/z7zmey/php-parser/php7" "github.com/z7zmey/php-parser/visitor" ) func main() { src := `<?php namespace Foo { class Bar { public function FunctionName(Type $var = null) { // some comment $var; } } }` php7parser := php7.NewParser(bytes.NewBufferString(src), "test.php") php7parser.WithFreeFloating() php7parser.Parse() nodes := php7parser.GetRootNode() nsResolver := visitor.NewNamespaceResolver() nodes.Walk(nsResolver) dumper := &visitor.Dumper{ Writer: os.Stdout, Indent: "| ", NsResolver: nsResolver, } nodes.Walk(dumper) }
Output: | [*node.Root] | "Position": Pos{Line: 3-11 Pos: 10-144} | "Stmts": | [*stmt.Namespace] | "Position": Pos{Line: 3-11 Pos: 10-144} | "freefloating": | "Start": "<?php" | "Start": "\n\n\t\t" | "Stmts": "\n\t\t" | "NamespaceName": | [*name.Name] | "Position": Pos{Line: 3-3 Pos: 20-22} | "freefloating": | "Start": " " | "End": " " | "Parts": | [*name.NamePart] | "Position": Pos{Line: 3-3 Pos: 20-22} | "Value": "Foo" | "Stmts": | [*stmt.Class] | "Position": Pos{Line: 4-10 Pos: 29-140} | "NamespacedName": "Foo\\Bar" | "freefloating": | "Start": "\n\t\t\t" | "Name": " " | "Stmts": "\n\t\t\t" | "PhpDocComment": "" | "ClassName": | [*node.Identifier] | "Position": Pos{Line: 4-4 Pos: 35-37} | "freefloating": | "Start": " " | "Value": "Bar" | "Stmts": | [*stmt.ClassMethod] | "Position": Pos{Line: 5-9 Pos: 46-135} | "freefloating": | "Start": " \n\t\t\t\t" | "ModifierList": " " | "Function": " " | "ReturnsRef": false | "PhpDocComment": "" | "MethodName": | [*node.Identifier] | "Position": Pos{Line: 5-5 Pos: 62-73} | "Value": "FunctionName" | "Modifiers": | [*node.Identifier] | "Position": Pos{Line: 5-5 Pos: 46-51} | "Value": "public" | "Params": | [*node.Parameter] | "Position": Pos{Line: 5-5 Pos: 75-90} | "freefloating": | "OptionalType": " " | "Var": " " | "Variadic": false | "ByRef": false | "VariableType": | [*name.Name] | "Position": Pos{Line: 5-5 Pos: 75-78} | "NamespacedName": "Foo\\Type" | "Parts": | [*name.NamePart] | "Position": Pos{Line: 5-5 Pos: 75-78} | "Value": "Type" | "Variable": | [*expr.Variable] | "Position": Pos{Line: 5-5 Pos: 80-83} | "freefloating": | "Dollar": "$" | "VarName": | [*node.Identifier] | "Position": Pos{Line: 5-5 Pos: 80-83} | "Value": "var" | "DefaultValue": | [*expr.ConstFetch] | "Position": Pos{Line: 5-5 Pos: 87-90} | "freefloating": | "Start": " " | "Constant": | [*name.Name] | "Position": Pos{Line: 5-5 Pos: 87-90} | "NamespacedName": "null" | "Parts": | [*name.NamePart] | "Position": Pos{Line: 5-5 Pos: 87-90} | "Value": "null" | "Stmt": | [*stmt.StmtList] | "Position": Pos{Line: 6-9 Pos: 97-135} | "freefloating": | "Start": "\n\t\t\t\t" | "Stmts": "\n\t\t\t\t" | "Stmts": | [*stmt.Expression] | "Position": Pos{Line: 8-8 Pos: 125-129} | "freefloating": | "SemiColon": ";" | "Start": "\n\t\t\t\t\t" | "Start": "// some comment\n" | "Start": "\t\t\t\t\t" | "Expr": | [*expr.Variable] | "Position": Pos{Line: 8-8 Pos: 125-128} | "freefloating": | "Dollar": "$" | "VarName": | [*node.Identifier] | "Position": Pos{Line: 8-8 Pos: 125-128} | "Value": "var"
func (*Dumper) EnterChildList ¶ added in v0.6.0
func (*Dumper) EnterChildNode ¶ added in v0.6.0
GetChildrenVisitor is invoked at every node parameter that contains children nodes
func (*Dumper) LeaveChildList ¶ added in v0.6.0
func (*Dumper) LeaveChildNode ¶ added in v0.6.0
type GoDumper ¶ added in v0.6.0
GoDumper writes ast hierarchy to an io.Writer as native Golang struct
Example ¶
package main import ( "bytes" "os" "github.com/z7zmey/php-parser/php7" "github.com/z7zmey/php-parser/visitor" ) func main() { src := `<?php namespace Foo { class Bar { public function FunctionName(Type $var = null) { // some comment $var; } } }` php7parser := php7.NewParser(bytes.NewBufferString(src), "test.php") php7parser.WithFreeFloating() php7parser.Parse() nodes := php7parser.GetRootNode() nsResolver := visitor.NewNamespaceResolver() nodes.Walk(nsResolver) dumper := &visitor.GoDumper{ Writer: os.Stdout, } nodes.Walk(dumper) }
Output: &node.Root{ Position: &position.Position{ StartLine: 3, EndLine: 11, StartPos: 10, EndPos: 143, }, Stmts: []node.Node{ &stmt.Namespace{ Position: &position.Position{ StartLine: 3, EndLine: 11, StartPos: 10, EndPos: 143, }, FreeFloating: freefloating.Collection{ "Stmts": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 10, EndLine: 11, StartPos: 140, EndPos: 142, }, Value: "\n\t\t", }, }, "Start": []freefloating.String{ freefloating.String{ Type: freefloating.TokenType, Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 1, EndPos: 5, }, Value: "<?php", }, freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 1, EndLine: 3, StartPos: 6, EndPos: 9, }, Value: "\n\n\t\t", }, }, }, NamespaceName: &name.Name{ Position: &position.Position{ StartLine: 3, EndLine: 3, StartPos: 20, EndPos: 22, }, FreeFloating: freefloating.Collection{ "Start": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 3, EndLine: 3, StartPos: 19, EndPos: 19, }, Value: " ", }, }, "End": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 3, EndLine: 3, StartPos: 23, EndPos: 23, }, Value: " ", }, }, }, Parts: []node.Node{ &name.NamePart{ Position: &position.Position{ StartLine: 3, EndLine: 3, StartPos: 20, EndPos: 22, }, Value: "Foo", }, }, }, Stmts: []node.Node{ &stmt.Class{ Position: &position.Position{ StartLine: 4, EndLine: 10, StartPos: 29, EndPos: 139, }, FreeFloating: freefloating.Collection{ "Start": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 3, EndLine: 4, StartPos: 25, EndPos: 28, }, Value: "\n\t\t\t", }, }, "Name": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 4, EndLine: 4, StartPos: 38, EndPos: 38, }, Value: " ", }, }, "Stmts": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 9, EndLine: 10, StartPos: 135, EndPos: 138, }, Value: "\n\t\t\t", }, }, }, PhpDocComment: "", ClassName: &node.Identifier{ Position: &position.Position{ StartLine: 4, EndLine: 4, StartPos: 35, EndPos: 37, }, FreeFloating: freefloating.Collection{ "Start": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 4, EndLine: 4, StartPos: 34, EndPos: 34, }, Value: " ", }, }, }, Value: "Bar", }, Stmts: []node.Node{ &stmt.ClassMethod{ Position: &position.Position{ StartLine: 5, EndLine: 9, StartPos: 45, EndPos: 134, }, FreeFloating: freefloating.Collection{ "Start": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 4, EndLine: 5, StartPos: 40, EndPos: 44, }, Value: "\n\t\t\t\t", }, }, "ModifierList": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 51, EndPos: 51, }, Value: " ", }, }, "Function": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 60, EndPos: 60, }, Value: " ", }, }, }, ReturnsRef: false, PhpDocComment: "", MethodName: &node.Identifier{ Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 61, EndPos: 72, }, Value: "FunctionName", }, Modifiers: []node.Node{ &node.Identifier{ Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 45, EndPos: 50, }, Value: "public", }, }, Params: []node.Node{ &node.Parameter{ Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 74, EndPos: 89, }, FreeFloating: freefloating.Collection{ "OptionalType": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 78, EndPos: 78, }, Value: " ", }, }, "Var": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 83, EndPos: 83, }, Value: " ", }, }, }, ByRef: false, Variadic: false, VariableType: &name.Name{ Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 74, EndPos: 77, }, Parts: []node.Node{ &name.NamePart{ Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 74, EndPos: 77, }, Value: "Type", }, }, }, Variable: &expr.Variable{ Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 79, EndPos: 82, }, FreeFloating: freefloating.Collection{ "Dollar": []freefloating.String{ freefloating.String{ Type: freefloating.TokenType, Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 79, EndPos: 80, }, Value: "$", }, }, }, VarName: &node.Identifier{ Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 79, EndPos: 82, }, Value: "var", }, }, DefaultValue: &expr.ConstFetch{ Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 86, EndPos: 89, }, FreeFloating: freefloating.Collection{ "Start": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 85, EndPos: 85, }, Value: " ", }, }, }, Constant: &name.Name{ Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 86, EndPos: 89, }, Parts: []node.Node{ &name.NamePart{ Position: &position.Position{ StartLine: 5, EndLine: 5, StartPos: 86, EndPos: 89, }, Value: "null", }, }, }, }, }, }, Stmt: &stmt.StmtList{ Position: &position.Position{ StartLine: 6, EndLine: 9, StartPos: 96, EndPos: 134, }, FreeFloating: freefloating.Collection{ "Stmts": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 8, EndLine: 9, StartPos: 129, EndPos: 133, }, Value: "\n\t\t\t\t", }, }, "Start": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 5, EndLine: 6, StartPos: 91, EndPos: 95, }, Value: "\n\t\t\t\t", }, }, }, Stmts: []node.Node{ &stmt.Expression{ Position: &position.Position{ StartLine: 8, EndLine: 8, StartPos: 124, EndPos: 128, }, FreeFloating: freefloating.Collection{ "Start": []freefloating.String{ freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 6, EndLine: 7, StartPos: 97, EndPos: 102, }, Value: "\n\t\t\t\t\t", }, freefloating.String{ Type: freefloating.CommentType, Position: &position.Position{ StartLine: 7, EndLine: 7, StartPos: 103, EndPos: 118, }, Value: "// some comment\n", }, freefloating.String{ Type: freefloating.WhiteSpaceType, Position: &position.Position{ StartLine: 8, EndLine: 8, StartPos: 119, EndPos: 123, }, Value: "\t\t\t\t\t", }, }, "SemiColon": []freefloating.String{ freefloating.String{ Type: freefloating.TokenType, Position: &position.Position{ StartLine: 8, EndLine: 8, StartPos: 128, EndPos: 128, }, Value: ";", }, }, }, Expr: &expr.Variable{ Position: &position.Position{ StartLine: 8, EndLine: 8, StartPos: 124, EndPos: 127, }, FreeFloating: freefloating.Collection{ "Dollar": []freefloating.String{ freefloating.String{ Type: freefloating.TokenType, Position: &position.Position{ StartLine: 8, EndLine: 8, StartPos: 124, EndPos: 125, }, Value: "$", }, }, }, VarName: &node.Identifier{ Position: &position.Position{ StartLine: 8, EndLine: 8, StartPos: 124, EndPos: 127, }, Value: "var", }, }, }, }, }, }, }, }, }, }, }, }
func (*GoDumper) EnterChildList ¶ added in v0.6.0
func (*GoDumper) EnterChildNode ¶ added in v0.6.0
func (*GoDumper) LeaveChildList ¶ added in v0.6.0
func (*GoDumper) LeaveChildNode ¶ added in v0.6.0
type JsonDumper ¶ added in v0.6.0
type JsonDumper struct { Writer io.Writer NsResolver *NamespaceResolver }
Example ¶
package main import ( "bytes" "os" "github.com/z7zmey/php-parser/php7" "github.com/z7zmey/php-parser/visitor" ) func main() { src := `<?php namespace Foo { class Bar { public function FunctionName(Type $var = null) { // some comment // second comment $var; } } }` php7parser := php7.NewParser(bytes.NewBufferString(src), "test.php") php7parser.WithFreeFloating() php7parser.Parse() nodes := php7parser.GetRootNode() nsResolver := visitor.NewNamespaceResolver() nodes.Walk(nsResolver) dumper := &visitor.JsonDumper{ Writer: os.Stdout, NsResolver: nsResolver, } nodes.Walk(dumper) }
Output: {"type":"*node.Root","position":{"startPos":10,"endPos":166,"startLine":3,"endLine":12},"Stmts":[{"type":"*stmt.Namespace","position":{"startPos":10,"endPos":166,"startLine":3,"endLine":12},"freefloating":{"Start": [{"type":"freefloating.TokenType","value":"<?php"},{"type":"freefloating.WhiteSpaceType","value":"\n\n\t\t"}],"Stmts": [{"type":"freefloating.WhiteSpaceType","value":"\n\t\t"}]},"NamespaceName":{"type":"*name.Name","position":{"startPos":20,"endPos":22,"startLine":3,"endLine":3},"freefloating":{"Start": [{"type":"freefloating.WhiteSpaceType","value":" "}],"End": [{"type":"freefloating.WhiteSpaceType","value":" "}]},"Parts":[{"type":"*name.NamePart","position":{"startPos":20,"endPos":22,"startLine":3,"endLine":3},"Value":"Foo"}]},"Stmts":[{"type":"*stmt.Class","position":{"startPos":29,"endPos":162,"startLine":4,"endLine":11},"namespacedName":"Foo\\Bar","freefloating":{"Start": [{"type":"freefloating.WhiteSpaceType","value":"\n\t\t\t"}],"Name": [{"type":"freefloating.WhiteSpaceType","value":" "}],"Stmts": [{"type":"freefloating.WhiteSpaceType","value":"\n\t\t\t"}]},"PhpDocComment":"","ClassName":{"type":"*node.Identifier","position":{"startPos":35,"endPos":37,"startLine":4,"endLine":4},"freefloating":{"Start": [{"type":"freefloating.WhiteSpaceType","value":" "}]},"Value":"Bar"},"Stmts":[{"type":"*stmt.ClassMethod","position":{"startPos":45,"endPos":157,"startLine":5,"endLine":10},"freefloating":{"Start": [{"type":"freefloating.WhiteSpaceType","value":"\n\t\t\t\t"}],"Function": [{"type":"freefloating.WhiteSpaceType","value":" "}],"ModifierList": [{"type":"freefloating.WhiteSpaceType","value":" "}]},"PhpDocComment":"","ReturnsRef":false,"MethodName":{"type":"*node.Identifier","position":{"startPos":61,"endPos":72,"startLine":5,"endLine":5},"Value":"FunctionName"},"Modifiers":[{"type":"*node.Identifier","position":{"startPos":45,"endPos":50,"startLine":5,"endLine":5},"Value":"public"}],"Params":[{"type":"*node.Parameter","position":{"startPos":74,"endPos":89,"startLine":5,"endLine":5},"freefloating":{"Var": [{"type":"freefloating.WhiteSpaceType","value":" "}],"OptionalType": [{"type":"freefloating.WhiteSpaceType","value":" "}]},"ByRef":false,"Variadic":false,"VariableType":{"type":"*name.Name","position":{"startPos":74,"endPos":77,"startLine":5,"endLine":5},"namespacedName":"Foo\\Type","Parts":[{"type":"*name.NamePart","position":{"startPos":74,"endPos":77,"startLine":5,"endLine":5},"Value":"Type"}]},"Variable":{"type":"*expr.Variable","position":{"startPos":79,"endPos":82,"startLine":5,"endLine":5},"freefloating":{"Dollar": [{"type":"freefloating.TokenType","value":"$"}]},"VarName":{"type":"*node.Identifier","position":{"startPos":79,"endPos":82,"startLine":5,"endLine":5},"Value":"var"}},"DefaultValue":{"type":"*expr.ConstFetch","position":{"startPos":86,"endPos":89,"startLine":5,"endLine":5},"freefloating":{"Start": [{"type":"freefloating.WhiteSpaceType","value":" "}]},"Constant":{"type":"*name.Name","position":{"startPos":86,"endPos":89,"startLine":5,"endLine":5},"namespacedName":"null","Parts":[{"type":"*name.NamePart","position":{"startPos":86,"endPos":89,"startLine":5,"endLine":5},"Value":"null"}]}}}],"Stmt":{"type":"*stmt.StmtList","position":{"startPos":96,"endPos":157,"startLine":6,"endLine":10},"freefloating":{"Start": [{"type":"freefloating.WhiteSpaceType","value":"\n\t\t\t\t"}],"Stmts": [{"type":"freefloating.WhiteSpaceType","value":"\n\t\t\t\t"}]},"Stmts":[{"type":"*stmt.Expression","position":{"startPos":147,"endPos":151,"startLine":9,"endLine":9},"freefloating":{"Start": [{"type":"freefloating.WhiteSpaceType","value":"\n\t\t\t\t\t"},{"type":"freefloating.CommentType","value":"// some comment\n"},{"type":"freefloating.WhiteSpaceType","value":"\t\t\t\t\t"},{"type":"freefloating.CommentType","value":"// second comment\n"},{"type":"freefloating.WhiteSpaceType","value":"\t\t\t\t\t"}],"SemiColon": [{"type":"freefloating.TokenType","value":";"}]},"Expr":{"type":"*expr.Variable","position":{"startPos":147,"endPos":150,"startLine":9,"endLine":9},"freefloating":{"Dollar": [{"type":"freefloating.TokenType","value":"$"}]},"VarName":{"type":"*node.Identifier","position":{"startPos":147,"endPos":150,"startLine":9,"endLine":9},"Value":"var"}}}]}}]}]}]}
func (*JsonDumper) EnterChildList ¶ added in v0.6.0
func (d *JsonDumper) EnterChildList(key string, w walker.Walkable)
func (*JsonDumper) EnterChildNode ¶ added in v0.6.0
func (d *JsonDumper) EnterChildNode(key string, w walker.Walkable)
func (*JsonDumper) EnterNode ¶ added in v0.6.0
func (d *JsonDumper) EnterNode(w walker.Walkable) bool
EnterNode is invoked at every node in hierarchy
func (*JsonDumper) LeaveChildList ¶ added in v0.6.0
func (d *JsonDumper) LeaveChildList(key string, w walker.Walkable)
func (*JsonDumper) LeaveChildNode ¶ added in v0.6.0
func (d *JsonDumper) LeaveChildNode(key string, w walker.Walkable)
func (*JsonDumper) LeaveNode ¶ added in v0.6.0
func (d *JsonDumper) LeaveNode(n walker.Walkable)
LeaveNode is invoked after node process
type Namespace ¶ added in v0.3.0
Namespace context
func NewNamespace ¶ added in v0.3.0
NewNamespace constructor
func (*Namespace) ResolveAlias ¶ added in v0.3.0
ResolveAlias returns alias or error if not found
type NamespaceResolver ¶ added in v0.3.0
NamespaceResolver visitor
func NewNamespaceResolver ¶ added in v0.3.0
func NewNamespaceResolver() *NamespaceResolver
NewNamespaceResolver NamespaceResolver type constructor
func (*NamespaceResolver) AddNamespacedName ¶ added in v0.3.0
func (nsr *NamespaceResolver) AddNamespacedName(nn node.Node, nodeName string)
AddNamespacedName adds namespaced name by node
func (*NamespaceResolver) EnterChildList ¶ added in v0.6.0
func (nsr *NamespaceResolver) EnterChildList(key string, w walker.Walkable)
func (*NamespaceResolver) EnterChildNode ¶ added in v0.6.0
func (nsr *NamespaceResolver) EnterChildNode(key string, w walker.Walkable)
func (*NamespaceResolver) EnterNode ¶ added in v0.3.0
func (nsr *NamespaceResolver) EnterNode(w walker.Walkable) bool
EnterNode is invoked at every node in heirerchy
func (*NamespaceResolver) LeaveChildList ¶ added in v0.6.0
func (nsr *NamespaceResolver) LeaveChildList(key string, w walker.Walkable)
func (*NamespaceResolver) LeaveChildNode ¶ added in v0.6.0
func (nsr *NamespaceResolver) LeaveChildNode(key string, w walker.Walkable)
func (*NamespaceResolver) LeaveNode ¶ added in v0.3.0
func (nsr *NamespaceResolver) LeaveNode(w walker.Walkable)
LeaveNode is invoked after node process
func (*NamespaceResolver) ResolveName ¶ added in v0.3.0
func (nsr *NamespaceResolver) ResolveName(nameNode node.Node, aliasType string)
ResolveName adds a resolved fully qualified name by node
func (*NamespaceResolver) ResolveType ¶ added in v0.3.0
func (nsr *NamespaceResolver) ResolveType(n node.Node)
ResolveType adds a resolved fully qualified type name
type PrettyJsonDumper ¶ added in v0.6.0
type PrettyJsonDumper struct { Writer io.Writer NsResolver *NamespaceResolver // contains filtered or unexported fields }
Example ¶
package main import ( "bytes" "os" "github.com/z7zmey/php-parser/php7" "github.com/z7zmey/php-parser/visitor" ) func main() { src := `<?php namespace Foo { class Bar { public function FunctionName(Type $var = null) { // some comment // second comment $var; } } function foo() { ; } } ` php7parser := php7.NewParser(bytes.NewBufferString(src), "test.php") php7parser.WithFreeFloating() php7parser.Parse() nodes := php7parser.GetRootNode() nsResolver := visitor.NewNamespaceResolver() nodes.Walk(nsResolver) dumper := visitor.NewPrettyJsonDumper(os.Stdout, nsResolver) nodes.Walk(dumper)
Output:
func NewPrettyJsonDumper ¶ added in v0.6.0
func NewPrettyJsonDumper(Writer io.Writer, NsResolver *NamespaceResolver) *PrettyJsonDumper
func (*PrettyJsonDumper) EnterChildList ¶ added in v0.6.0
func (d *PrettyJsonDumper) EnterChildList(key string, w walker.Walkable)
func (*PrettyJsonDumper) EnterChildNode ¶ added in v0.6.0
func (d *PrettyJsonDumper) EnterChildNode(key string, w walker.Walkable)
func (*PrettyJsonDumper) EnterNode ¶ added in v0.6.0
func (d *PrettyJsonDumper) EnterNode(w walker.Walkable) bool
EnterNode is invoked at every node in hierarchy
func (*PrettyJsonDumper) LeaveChildList ¶ added in v0.6.0
func (d *PrettyJsonDumper) LeaveChildList(key string, w walker.Walkable)
func (*PrettyJsonDumper) LeaveChildNode ¶ added in v0.6.0
func (d *PrettyJsonDumper) LeaveChildNode(key string, w walker.Walkable)
func (*PrettyJsonDumper) LeaveNode ¶ added in v0.6.0
func (d *PrettyJsonDumper) LeaveNode(n walker.Walkable)
LeaveNode is invoked after node process