visitor

package
v0.6.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2019 License: MIT Imports: 12 Imported by: 0

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

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

func (d *Dumper) EnterChildList(key string, w walker.Walkable)

func (*Dumper) EnterChildNode

func (d *Dumper) EnterChildNode(key string, w walker.Walkable)

GetChildrenVisitor is invoked at every node parameter that contains children nodes

func (*Dumper) EnterNode

func (d *Dumper) EnterNode(w walker.Walkable) bool

EnterNode is invoked at every node in hierarchy

func (*Dumper) LeaveChildList

func (d *Dumper) LeaveChildList(key string, w walker.Walkable)

func (*Dumper) LeaveChildNode

func (d *Dumper) LeaveChildNode(key string, w walker.Walkable)

func (*Dumper) LeaveNode

func (d *Dumper) LeaveNode(n walker.Walkable)

LeaveNode is invoked after node process

type GoDumper

type GoDumper struct {
	Writer io.Writer
	// contains filtered or unexported fields
}

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

func (d *GoDumper) EnterChildList(key string, w walker.Walkable)

func (*GoDumper) EnterChildNode

func (d *GoDumper) EnterChildNode(key string, w walker.Walkable)

func (*GoDumper) EnterNode

func (d *GoDumper) EnterNode(w walker.Walkable) bool

EnterNode is invoked at every node in hierarchy

func (*GoDumper) LeaveChildList

func (d *GoDumper) LeaveChildList(key string, w walker.Walkable)

func (*GoDumper) LeaveChildNode

func (d *GoDumper) LeaveChildNode(key string, w walker.Walkable)

func (*GoDumper) LeaveNode

func (d *GoDumper) LeaveNode(n walker.Walkable)

LeaveNode is invoked after node process

type JsonDumper

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

func (d *JsonDumper) EnterChildList(key string, w walker.Walkable)

func (*JsonDumper) EnterChildNode

func (d *JsonDumper) EnterChildNode(key string, w walker.Walkable)

func (*JsonDumper) EnterNode

func (d *JsonDumper) EnterNode(w walker.Walkable) bool

EnterNode is invoked at every node in hierarchy

func (*JsonDumper) LeaveChildList

func (d *JsonDumper) LeaveChildList(key string, w walker.Walkable)

func (*JsonDumper) LeaveChildNode

func (d *JsonDumper) LeaveChildNode(key string, w walker.Walkable)

func (*JsonDumper) LeaveNode

func (d *JsonDumper) LeaveNode(n walker.Walkable)

LeaveNode is invoked after node process

type Namespace

type Namespace struct {
	Namespace string
	Aliases   map[string]map[string]string
}

Namespace context

func NewNamespace

func NewNamespace(NSName string) *Namespace

NewNamespace constructor

func (*Namespace) AddAlias

func (ns *Namespace) AddAlias(aliasType string, aliasName string, alias string)

AddAlias adds a new alias

func (*Namespace) ResolveAlias

func (ns *Namespace) ResolveAlias(nameNode node.Node, aliasType string) (string, error)

ResolveAlias returns alias or error if not found

func (*Namespace) ResolveName

func (ns *Namespace) ResolveName(nameNode node.Node, aliasType string) (string, error)

ResolveName returns a resolved fully qualified name

type NamespaceResolver

type NamespaceResolver struct {
	Namespace     *Namespace
	ResolvedNames map[node.Node]string
}

NamespaceResolver visitor

func NewNamespaceResolver

func NewNamespaceResolver() *NamespaceResolver

NewNamespaceResolver NamespaceResolver type constructor

func (*NamespaceResolver) AddAlias

func (nsr *NamespaceResolver) AddAlias(useType string, nn node.Node, prefix []node.Node)

AddAlias adds a new alias

func (*NamespaceResolver) AddNamespacedName

func (nsr *NamespaceResolver) AddNamespacedName(nn node.Node, nodeName string)

AddNamespacedName adds namespaced name by node

func (*NamespaceResolver) EnterChildList

func (nsr *NamespaceResolver) EnterChildList(key string, w walker.Walkable)

func (*NamespaceResolver) EnterChildNode

func (nsr *NamespaceResolver) EnterChildNode(key string, w walker.Walkable)

func (*NamespaceResolver) EnterNode

func (nsr *NamespaceResolver) EnterNode(w walker.Walkable) bool

EnterNode is invoked at every node in heirerchy

func (*NamespaceResolver) LeaveChildList

func (nsr *NamespaceResolver) LeaveChildList(key string, w walker.Walkable)

func (*NamespaceResolver) LeaveChildNode

func (nsr *NamespaceResolver) LeaveChildNode(key string, w walker.Walkable)

func (*NamespaceResolver) LeaveNode

func (nsr *NamespaceResolver) LeaveNode(w walker.Walkable)

LeaveNode is invoked after node process

func (*NamespaceResolver) ResolveName

func (nsr *NamespaceResolver) ResolveName(nameNode node.Node, aliasType string)

ResolveName adds a resolved fully qualified name by node

func (*NamespaceResolver) ResolveType

func (nsr *NamespaceResolver) ResolveType(n node.Node)

ResolveType adds a resolved fully qualified type name

type PrettyJsonDumper

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)

	

func NewPrettyJsonDumper

func NewPrettyJsonDumper(Writer io.Writer, NsResolver *NamespaceResolver) *PrettyJsonDumper

func (*PrettyJsonDumper) EnterChildList

func (d *PrettyJsonDumper) EnterChildList(key string, w walker.Walkable)

func (*PrettyJsonDumper) EnterChildNode

func (d *PrettyJsonDumper) EnterChildNode(key string, w walker.Walkable)

func (*PrettyJsonDumper) EnterNode

func (d *PrettyJsonDumper) EnterNode(w walker.Walkable) bool

EnterNode is invoked at every node in hierarchy

func (*PrettyJsonDumper) LeaveChildList

func (d *PrettyJsonDumper) LeaveChildList(key string, w walker.Walkable)

func (*PrettyJsonDumper) LeaveChildNode

func (d *PrettyJsonDumper) LeaveChildNode(key string, w walker.Walkable)

func (*PrettyJsonDumper) LeaveNode

func (d *PrettyJsonDumper) LeaveNode(n walker.Walkable)

LeaveNode is invoked after node process

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL