#51 saving optional tokes and tokens that have different representation as meta

This commit is contained in:
z7zmey
2018-07-29 11:44:38 +03:00
parent 0138749c6d
commit 4989d31874
223 changed files with 9832 additions and 5976 deletions

View File

@@ -36,10 +36,10 @@ func (d *Dumper) EnterNode(w walker.Walkable) bool {
}
}
if mm := n.GetMeta(); len(mm) > 0 {
if mm := n.GetMeta(); len(*mm) > 0 {
fmt.Fprintf(d.Writer, "%v\"Meta\":\n", d.Indent+" ")
for _, m := range mm {
fmt.Fprintf(d.Writer, "%v%q before %q\n", d.Indent+" ", m, m.GetTokenName().String())
for _, m := range *mm {
fmt.Fprintf(d.Writer, "%v%q before %q\n", d.Indent+" ", m, m.TokenName.String())
}
}

View File

@@ -43,6 +43,7 @@ func ExampleDumper() {
// | [*stmt.Namespace]
// | "Position": Pos{Line: 3-11 Pos: 10-143}
// | "Meta":
// | "<?php" before "NamespaceToken"
// | "\n\n\t\t" before "NamespaceToken"
// | " " before "OpenCurlyBracesToken"
// | "\n\t\t" before "CloseCurlyBracesToken"
@@ -109,6 +110,7 @@ func ExampleDumper() {
// | "Position": Pos{Line: 5-5 Pos: 79-82}
// | "Meta":
// | " " before "VariableToken"
// | "StringVar": false
// | "VarName":
// | [*node.Identifier]
// | "Position": Pos{Line: 5-5 Pos: 79-82}
@@ -135,6 +137,8 @@ func ExampleDumper() {
// | "Stmts":
// | [*stmt.Expression]
// | "Position": Pos{Line: 8-8 Pos: 124-128}
// | "Meta":
// | ";" before "SemiColonToken"
// | "Expr":
// | [*expr.Variable]
// | "Position": Pos{Line: 8-8 Pos: 124-127}
@@ -142,6 +146,7 @@ func ExampleDumper() {
// | "\n\t\t\t\t\t" before "VariableToken"
// | "// some comment\n" before "VariableToken"
// | "\t\t\t\t\t" before "VariableToken"
// | "StringVar": false
// | "VarName":
// | [*node.Identifier]
// | "Position": Pos{Line: 8-8 Pos: 124-127}

View File

@@ -61,17 +61,19 @@ func (d *GoDumper) EnterNode(w walker.Walkable) bool {
fmt.Fprint(d.Writer, "},\n")
}
if mm := n.GetMeta(); len(mm) > 0 {
if mm := n.GetMeta(); len(*mm) > 0 {
printIndent(d.Writer, d.depth)
fmt.Fprint(d.Writer, "Meta: []meta.Meta{\n")
d.depth++
for _, m := range mm {
for _, m := range *mm {
printIndent(d.Writer, d.depth)
switch m.(type) {
case *meta.Comment:
fmt.Fprint(d.Writer, "&meta.Comment{\n")
case *meta.WhiteSpace:
fmt.Fprint(d.Writer, "&meta.WhiteSpace{\n")
switch m.Type {
case meta.CommentType:
fmt.Fprint(d.Writer, "&meta.CommentType{\n")
case meta.WhiteSpaceType:
fmt.Fprint(d.Writer, "&meta.WhiteSpaceType{\n")
case meta.TokenType:
fmt.Fprint(d.Writer, "&meta.TokenType{\n")
}
d.depth++
@@ -79,13 +81,13 @@ func (d *GoDumper) EnterNode(w walker.Walkable) bool {
fmt.Fprint(d.Writer, "Position: &position.Position{\n")
d.depth++
printIndent(d.Writer, d.depth)
fmt.Fprintf(d.Writer, "StartLine: %d,\n", m.GetPosition().StartLine)
fmt.Fprintf(d.Writer, "StartLine: %d,\n", m.Position.StartLine)
printIndent(d.Writer, d.depth)
fmt.Fprintf(d.Writer, "EndLine: %d,\n", m.GetPosition().EndLine)
fmt.Fprintf(d.Writer, "EndLine: %d,\n", m.Position.EndLine)
printIndent(d.Writer, d.depth)
fmt.Fprintf(d.Writer, "StartPos: %d,\n", m.GetPosition().StartPos)
fmt.Fprintf(d.Writer, "StartPos: %d,\n", m.Position.StartPos)
printIndent(d.Writer, d.depth)
fmt.Fprintf(d.Writer, "EndPos: %d,\n", m.GetPosition().EndPos)
fmt.Fprintf(d.Writer, "EndPos: %d,\n", m.Position.EndPos)
d.depth--
printIndent(d.Writer, d.depth)
fmt.Fprint(d.Writer, "},\n")
@@ -93,7 +95,7 @@ func (d *GoDumper) EnterNode(w walker.Walkable) bool {
printIndent(d.Writer, d.depth)
fmt.Fprintf(d.Writer, "Value: %q,\n", m.String())
printIndent(d.Writer, d.depth)
fmt.Fprintf(d.Writer, "TokenName: %d,\n", m.GetTokenName())
fmt.Fprintf(d.Writer, "TokenName: %d,\n", m.TokenName)
d.depth--
printIndent(d.Writer, d.depth)

View File

@@ -15,7 +15,7 @@ func ExampleGoDumper() {
class Bar {
public function FunctionName(Type $var = null)
{
//some comment
// some comment
$var;
}
}
@@ -40,7 +40,7 @@ func ExampleGoDumper() {
// StartLine: 3,
// EndLine: 11,
// StartPos: 10,
// EndPos: 142,
// EndPos: 143,
// },
// Stmts: []node.Node{
// &stmt.Namespace{
@@ -48,10 +48,20 @@ func ExampleGoDumper() {
// StartLine: 3,
// EndLine: 11,
// StartPos: 10,
// EndPos: 142,
// EndPos: 143,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.TokenType{
// Position: &position.Position{
// StartLine: 1,
// EndLine: 1,
// StartPos: 1,
// EndPos: 5,
// },
// Value: "<?php",
// TokenName: 65,
// },
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 1,
// EndLine: 3,
@@ -61,7 +71,7 @@ func ExampleGoDumper() {
// Value: "\n\n\t\t",
// TokenName: 65,
// },
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 3,
// EndLine: 3,
@@ -69,17 +79,17 @@ func ExampleGoDumper() {
// EndPos: 23,
// },
// Value: " ",
// TokenName: 129,
// TokenName: 130,
// },
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 10,
// EndLine: 11,
// StartPos: 139,
// EndPos: 141,
// StartPos: 140,
// EndPos: 142,
// },
// Value: "\n\t\t",
// TokenName: 130,
// TokenName: 131,
// },
// },
// NamespaceName: &name.Name{
@@ -98,7 +108,7 @@ func ExampleGoDumper() {
// EndPos: 22,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 3,
// EndLine: 3,
@@ -119,10 +129,10 @@ func ExampleGoDumper() {
// StartLine: 4,
// EndLine: 10,
// StartPos: 29,
// EndPos: 138,
// EndPos: 139,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 3,
// EndLine: 4,
@@ -130,9 +140,9 @@ func ExampleGoDumper() {
// EndPos: 28,
// },
// Value: "\n\t\t\t",
// TokenName: 52,
// TokenName: 51,
// },
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 4,
// EndLine: 4,
@@ -140,17 +150,17 @@ func ExampleGoDumper() {
// EndPos: 38,
// },
// Value: " ",
// TokenName: 129,
// TokenName: 130,
// },
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 9,
// EndLine: 10,
// StartPos: 134,
// EndPos: 137,
// StartPos: 135,
// EndPos: 138,
// },
// Value: "\n\t\t\t",
// TokenName: 130,
// TokenName: 131,
// },
// },
// PhpDocComment: "",
@@ -162,7 +172,7 @@ func ExampleGoDumper() {
// EndPos: 37,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 4,
// EndLine: 4,
@@ -170,7 +180,7 @@ func ExampleGoDumper() {
// EndPos: 34,
// },
// Value: " ",
// TokenName: 125,
// TokenName: 126,
// },
// },
// Value: "Bar",
@@ -181,10 +191,10 @@ func ExampleGoDumper() {
// StartLine: 5,
// EndLine: 9,
// StartPos: 45,
// EndPos: 133,
// EndPos: 134,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 5,
// EndLine: 5,
@@ -192,7 +202,7 @@ func ExampleGoDumper() {
// EndPos: 51,
// },
// Value: " ",
// TokenName: 38,
// TokenName: 37,
// },
// },
// ReturnsRef: false,
@@ -205,7 +215,7 @@ func ExampleGoDumper() {
// EndPos: 72,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 5,
// EndLine: 5,
@@ -213,7 +223,7 @@ func ExampleGoDumper() {
// EndPos: 60,
// },
// Value: " ",
// TokenName: 125,
// TokenName: 126,
// },
// },
// Value: "FunctionName",
@@ -227,7 +237,7 @@ func ExampleGoDumper() {
// EndPos: 50,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 4,
// EndLine: 5,
@@ -235,7 +245,7 @@ func ExampleGoDumper() {
// EndPos: 44,
// },
// Value: "\n\t\t\t\t",
// TokenName: 125,
// TokenName: 126,
// },
// },
// Value: "public",
@@ -250,7 +260,7 @@ func ExampleGoDumper() {
// EndPos: 89,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 5,
// EndLine: 5,
@@ -258,7 +268,7 @@ func ExampleGoDumper() {
// EndPos: 83,
// },
// Value: " ",
// TokenName: 147,
// TokenName: 148,
// },
// },
// ByRef: false,
@@ -290,7 +300,7 @@ func ExampleGoDumper() {
// EndPos: 82,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 5,
// EndLine: 5,
@@ -301,6 +311,7 @@ func ExampleGoDumper() {
// TokenName: 12,
// },
// },
// StringVar: false,
// VarName: &node.Identifier{
// Position: &position.Position{
// StartLine: 5,
@@ -334,7 +345,7 @@ func ExampleGoDumper() {
// EndPos: 89,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 5,
// EndLine: 5,
@@ -357,10 +368,10 @@ func ExampleGoDumper() {
// StartLine: 6,
// EndLine: 9,
// StartPos: 96,
// EndPos: 133,
// EndPos: 134,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 5,
// EndLine: 6,
@@ -368,17 +379,17 @@ func ExampleGoDumper() {
// EndPos: 95,
// },
// Value: "\n\t\t\t\t",
// TokenName: 129,
// TokenName: 130,
// },
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 8,
// EndLine: 9,
// StartPos: 128,
// EndPos: 132,
// StartPos: 129,
// EndPos: 133,
// },
// Value: "\n\t\t\t\t",
// TokenName: 130,
// TokenName: 131,
// },
// },
// Stmts: []node.Node{
@@ -386,18 +397,30 @@ func ExampleGoDumper() {
// Position: &position.Position{
// StartLine: 8,
// EndLine: 8,
// StartPos: 123,
// EndPos: 127,
// StartPos: 124,
// EndPos: 128,
// },
// Meta: []meta.Meta{
// &meta.TokenType{
// Position: &position.Position{
// StartLine: 8,
// EndLine: 8,
// StartPos: 128,
// EndPos: 128,
// },
// Value: ";",
// TokenName: 132,
// },
// },
// Expr: &expr.Variable{
// Position: &position.Position{
// StartLine: 8,
// EndLine: 8,
// StartPos: 123,
// EndPos: 126,
// StartPos: 124,
// EndPos: 127,
// },
// Meta: []meta.Meta{
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 6,
// EndLine: 7,
@@ -407,33 +430,34 @@ func ExampleGoDumper() {
// Value: "\n\t\t\t\t\t",
// TokenName: 12,
// },
// &meta.Comment{
// &meta.CommentType{
// Position: &position.Position{
// StartLine: 7,
// EndLine: 7,
// StartPos: 103,
// EndPos: 117,
// EndPos: 118,
// },
// Value: "//some comment\n",
// Value: "// some comment\n",
// TokenName: 12,
// },
// &meta.WhiteSpace{
// &meta.WhiteSpaceType{
// Position: &position.Position{
// StartLine: 8,
// EndLine: 8,
// StartPos: 118,
// EndPos: 122,
// StartPos: 119,
// EndPos: 123,
// },
// Value: "\t\t\t\t\t",
// TokenName: 12,
// },
// },
// StringVar: false,
// VarName: &node.Identifier{
// Position: &position.Position{
// StartLine: 8,
// EndLine: 8,
// StartPos: 123,
// EndPos: 126,
// StartPos: 124,
// EndPos: 127,
// },
// Value: "var",
// },

View File

@@ -43,19 +43,21 @@ func (d *JsonDumper) EnterNode(w walker.Walkable) bool {
}
}
if mm := n.GetMeta(); len(mm) > 0 {
if mm := n.GetMeta(); len(*mm) > 0 {
fmt.Fprintf(d.Writer, ",%q:[", "meta")
for k, m := range mm {
for k, m := range *mm {
if k != 0 {
fmt.Fprint(d.Writer, ",")
}
switch m.(type) {
case *meta.Comment:
fmt.Fprintf(d.Writer, "{%q:%q,%q:%q,%q:%q}", "type", "*meta.Comment", "value", m.String(), "tokenName", m.GetTokenName().String())
case *meta.WhiteSpace:
fmt.Fprintf(d.Writer, "{%q:%q,%q:%q,%q:%q}", "type", "*meta.WhiteSpace", "value", m.String(), "tokenName", m.GetTokenName().String())
switch m.Type {
case meta.CommentType:
fmt.Fprintf(d.Writer, "{%q:%q,%q:%q,%q:%q}", "type", "*meta.CommentType", "value", m.String(), "tokenName", m.TokenName.String())
case meta.WhiteSpaceType:
fmt.Fprintf(d.Writer, "{%q:%q,%q:%q,%q:%q}", "type", "*meta.WhiteSpaceType", "value", m.String(), "tokenName", m.TokenName.String())
case meta.TokenType:
fmt.Fprintf(d.Writer, "{%q:%q,%q:%q,%q:%q}", "type", "*meta.TokenType", "value", m.String(), "tokenName", m.TokenName.String())
}
}

View File

@@ -37,5 +37,5 @@ func ExampleJsonDumper() {
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},"meta":[{"type":"*meta.WhiteSpace","value":"\n\n\t\t","tokenName":"NamespaceToken"},{"type":"*meta.WhiteSpace","value":" ","tokenName":"OpenCurlyBracesToken"},{"type":"*meta.WhiteSpace","value":"\n\t\t","tokenName":"CloseCurlyBracesToken"}],"NamespaceName":{"type":"*name.Name","position":{"startPos":20,"endPos":22,"startLine":3,"endLine":3},"Parts":[{"type":"*name.NamePart","position":{"startPos":20,"endPos":22,"startLine":3,"endLine":3},"meta":[{"type":"*meta.WhiteSpace","value":" ","tokenName":"StringToken"}],"Value":"Foo"}]},"Stmts":[{"type":"*stmt.Class","position":{"startPos":29,"endPos":162,"startLine":4,"endLine":11},"namespacedName":"Foo\\Bar","meta":[{"type":"*meta.WhiteSpace","value":"\n\t\t\t","tokenName":"ClassToken"},{"type":"*meta.WhiteSpace","value":" ","tokenName":"OpenCurlyBracesToken"},{"type":"*meta.WhiteSpace","value":"\n\t\t\t","tokenName":"CloseCurlyBracesToken"}],"PhpDocComment":"","ClassName":{"type":"*node.Identifier","position":{"startPos":35,"endPos":37,"startLine":4,"endLine":4},"meta":[{"type":"*meta.WhiteSpace","value":" ","tokenName":"IdentifierToken"}],"Value":"Bar"},"Stmts":[{"type":"*stmt.ClassMethod","position":{"startPos":45,"endPos":157,"startLine":5,"endLine":10},"meta":[{"type":"*meta.WhiteSpace","value":" ","tokenName":"FunctionToken"}],"PhpDocComment":"","ReturnsRef":false,"MethodName":{"type":"*node.Identifier","position":{"startPos":61,"endPos":72,"startLine":5,"endLine":5},"meta":[{"type":"*meta.WhiteSpace","value":" ","tokenName":"IdentifierToken"}],"Value":"FunctionName"},"Modifiers":[{"type":"*node.Identifier","position":{"startPos":45,"endPos":50,"startLine":5,"endLine":5},"meta":[{"type":"*meta.WhiteSpace","value":"\n\t\t\t\t","tokenName":"IdentifierToken"}],"Value":"public"}],"Params":[{"type":"*node.Parameter","position":{"startPos":74,"endPos":89,"startLine":5,"endLine":5},"meta":[{"type":"*meta.WhiteSpace","value":" ","tokenName":"EqualToken"}],"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},"meta":[{"type":"*meta.WhiteSpace","value":" ","tokenName":"VariableToken"}],"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},"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},"meta":[{"type":"*meta.WhiteSpace","value":" ","tokenName":"StringToken"}],"Value":"null"}]}}}],"Stmt":{"type":"*stmt.StmtList","position":{"startPos":96,"endPos":157,"startLine":6,"endLine":10},"meta":[{"type":"*meta.WhiteSpace","value":"\n\t\t\t\t","tokenName":"OpenCurlyBracesToken"},{"type":"*meta.WhiteSpace","value":"\n\t\t\t\t","tokenName":"CloseCurlyBracesToken"}],"Stmts":[{"type":"*stmt.Expression","position":{"startPos":147,"endPos":151,"startLine":9,"endLine":9},"Expr":{"type":"*expr.Variable","position":{"startPos":147,"endPos":150,"startLine":9,"endLine":9},"meta":[{"type":"*meta.WhiteSpace","value":"\n\t\t\t\t\t","tokenName":"VariableToken"},{"type":"*meta.Comment","value":"// some comment\n","tokenName":"VariableToken"},{"type":"*meta.WhiteSpace","value":"\t\t\t\t\t","tokenName":"VariableToken"},{"type":"*meta.Comment","value":"// second comment\n","tokenName":"VariableToken"},{"type":"*meta.WhiteSpace","value":"\t\t\t\t\t","tokenName":"VariableToken"}],"VarName":{"type":"*node.Identifier","position":{"startPos":147,"endPos":150,"startLine":9,"endLine":9},"Value":"var"}}}]}}]}]}]}
// {"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},"meta":[{"type":"*meta.TokenType","value":"<?php","tokenName":"NamespaceToken"},{"type":"*meta.WhiteSpaceType","value":"\n\n\t\t","tokenName":"NamespaceToken"},{"type":"*meta.WhiteSpaceType","value":" ","tokenName":"OpenCurlyBracesToken"},{"type":"*meta.WhiteSpaceType","value":"\n\t\t","tokenName":"CloseCurlyBracesToken"}],"NamespaceName":{"type":"*name.Name","position":{"startPos":20,"endPos":22,"startLine":3,"endLine":3},"Parts":[{"type":"*name.NamePart","position":{"startPos":20,"endPos":22,"startLine":3,"endLine":3},"meta":[{"type":"*meta.WhiteSpaceType","value":" ","tokenName":"StringToken"}],"Value":"Foo"}]},"Stmts":[{"type":"*stmt.Class","position":{"startPos":29,"endPos":162,"startLine":4,"endLine":11},"namespacedName":"Foo\\Bar","meta":[{"type":"*meta.WhiteSpaceType","value":"\n\t\t\t","tokenName":"ClassToken"},{"type":"*meta.WhiteSpaceType","value":" ","tokenName":"OpenCurlyBracesToken"},{"type":"*meta.WhiteSpaceType","value":"\n\t\t\t","tokenName":"CloseCurlyBracesToken"}],"PhpDocComment":"","ClassName":{"type":"*node.Identifier","position":{"startPos":35,"endPos":37,"startLine":4,"endLine":4},"meta":[{"type":"*meta.WhiteSpaceType","value":" ","tokenName":"IdentifierToken"}],"Value":"Bar"},"Stmts":[{"type":"*stmt.ClassMethod","position":{"startPos":45,"endPos":157,"startLine":5,"endLine":10},"meta":[{"type":"*meta.WhiteSpaceType","value":" ","tokenName":"FunctionToken"}],"PhpDocComment":"","ReturnsRef":false,"MethodName":{"type":"*node.Identifier","position":{"startPos":61,"endPos":72,"startLine":5,"endLine":5},"meta":[{"type":"*meta.WhiteSpaceType","value":" ","tokenName":"IdentifierToken"}],"Value":"FunctionName"},"Modifiers":[{"type":"*node.Identifier","position":{"startPos":45,"endPos":50,"startLine":5,"endLine":5},"meta":[{"type":"*meta.WhiteSpaceType","value":"\n\t\t\t\t","tokenName":"IdentifierToken"}],"Value":"public"}],"Params":[{"type":"*node.Parameter","position":{"startPos":74,"endPos":89,"startLine":5,"endLine":5},"meta":[{"type":"*meta.WhiteSpaceType","value":" ","tokenName":"EqualToken"}],"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},"meta":[{"type":"*meta.WhiteSpaceType","value":" ","tokenName":"VariableToken"}],"StringVar":false,"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},"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},"meta":[{"type":"*meta.WhiteSpaceType","value":" ","tokenName":"StringToken"}],"Value":"null"}]}}}],"Stmt":{"type":"*stmt.StmtList","position":{"startPos":96,"endPos":157,"startLine":6,"endLine":10},"meta":[{"type":"*meta.WhiteSpaceType","value":"\n\t\t\t\t","tokenName":"OpenCurlyBracesToken"},{"type":"*meta.WhiteSpaceType","value":"\n\t\t\t\t","tokenName":"CloseCurlyBracesToken"}],"Stmts":[{"type":"*stmt.Expression","position":{"startPos":147,"endPos":151,"startLine":9,"endLine":9},"meta":[{"type":"*meta.TokenType","value":";","tokenName":"SemiColonToken"}],"Expr":{"type":"*expr.Variable","position":{"startPos":147,"endPos":150,"startLine":9,"endLine":9},"meta":[{"type":"*meta.WhiteSpaceType","value":"\n\t\t\t\t\t","tokenName":"VariableToken"},{"type":"*meta.CommentType","value":"// some comment\n","tokenName":"VariableToken"},{"type":"*meta.WhiteSpaceType","value":"\t\t\t\t\t","tokenName":"VariableToken"},{"type":"*meta.CommentType","value":"// second comment\n","tokenName":"VariableToken"},{"type":"*meta.WhiteSpaceType","value":"\t\t\t\t\t","tokenName":"VariableToken"}],"StringVar":false,"VarName":{"type":"*node.Identifier","position":{"startPos":147,"endPos":150,"startLine":9,"endLine":9},"Value":"var"}}}]}}]}]}]}
}

View File

@@ -74,7 +74,7 @@ func TestResolveStaticPropertyFetch(t *testing.T) {
},
&expr.StaticPropertyFetch{
Class: nameBC,
Property: &node.Identifier{Value: "$foo"},
Property: &node.Identifier{Value: "foo"},
},
},
}

View File

@@ -82,12 +82,12 @@ func (d *PrettyJsonDumper) EnterNode(w walker.Walkable) bool {
}
}
if mm := n.GetMeta(); len(mm) > 0 {
if mm := n.GetMeta(); len(*mm) > 0 {
fmt.Fprint(d.Writer, ",\n")
d.printIndent(d.Writer)
fmt.Fprint(d.Writer, "\"meta\": [\n")
d.depth++
for k, m := range mm {
for k, m := range *mm {
if k != 0 {
fmt.Fprint(d.Writer, ",\n")
}
@@ -96,16 +96,18 @@ func (d *PrettyJsonDumper) EnterNode(w walker.Walkable) bool {
fmt.Fprint(d.Writer, "{\n")
d.depth++
d.printIndent(d.Writer)
switch m.(type) {
case *meta.Comment:
fmt.Fprintf(d.Writer, "%q: %q,\n", "type", "*meta.Comment")
case *meta.WhiteSpace:
fmt.Fprintf(d.Writer, "%q: %q,\n", "type", "*meta.WhiteSpace")
switch m.Type {
case meta.CommentType:
fmt.Fprintf(d.Writer, "%q: %q,\n", "type", "*meta.CommentType")
case meta.WhiteSpaceType:
fmt.Fprintf(d.Writer, "%q: %q,\n", "type", "*meta.WhiteSpaceType")
case meta.TokenType:
fmt.Fprintf(d.Writer, "%q: %q,\n", "type", "*meta.TokenType")
}
d.printIndent(d.Writer)
fmt.Fprintf(d.Writer, "%q: %q,\n", "value", m.String())
d.printIndent(d.Writer)
fmt.Fprintf(d.Writer, "%q: %q\n", "tokenName", m.GetTokenName().String())
fmt.Fprintf(d.Writer, "%q: %q\n", "tokenName", m.TokenName.String())
d.depth--
d.printIndent(d.Writer)
fmt.Fprint(d.Writer, "}")

View File

@@ -21,7 +21,9 @@ func ExamplePrettyJsonDumper() {
}
}
function foo() {}
function foo() {
;
}
}
`
@@ -41,13 +43,13 @@ func ExamplePrettyJsonDumper() {
// "type": "*node.Root",
// "position": {
// "startPos": 10,
// "endPos": 188,
// "endPos": 198,
// "startLine": 3,
// "endLine": 14
// "endLine": 16
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\n\t\t",
// "tokenName": "NodeEnd"
// }
@@ -57,23 +59,28 @@ func ExamplePrettyJsonDumper() {
// "type": "*stmt.Namespace",
// "position": {
// "startPos": 10,
// "endPos": 188,
// "endPos": 198,
// "startLine": 3,
// "endLine": 14
// "endLine": 16
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.TokenType",
// "value": "<?php",
// "tokenName": "NamespaceToken"
// },
// {
// "type": "*meta.WhiteSpaceType",
// "value": "\n\n\t\t",
// "tokenName": "NamespaceToken"
// },
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "OpenCurlyBracesToken"
// },
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\n\t\t",
// "tokenName": "CloseCurlyBracesToken"
// }
@@ -97,7 +104,7 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "StringToken"
// }
@@ -118,17 +125,17 @@ func ExamplePrettyJsonDumper() {
// "namespacedName": "Foo\\Bar",
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\n\t\t\t",
// "tokenName": "ClassToken"
// },
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "OpenCurlyBracesToken"
// },
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\n\t\t\t",
// "tokenName": "CloseCurlyBracesToken"
// }
@@ -144,7 +151,7 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "IdentifierToken"
// }
@@ -162,7 +169,7 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "FunctionToken"
// }
@@ -179,7 +186,7 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "IdentifierToken"
// }
@@ -197,7 +204,7 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\n\t\t\t\t",
// "tokenName": "IdentifierToken"
// }
@@ -216,7 +223,7 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "EqualToken"
// }
@@ -255,11 +262,12 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "VariableToken"
// }
// ],
// "StringVar": false,
// "VarName": {
// "type": "*node.Identifier",
// "position": {
@@ -299,7 +307,7 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "StringToken"
// }
@@ -321,12 +329,12 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\n\t\t\t\t",
// "tokenName": "OpenCurlyBracesToken"
// },
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\n\t\t\t\t",
// "tokenName": "CloseCurlyBracesToken"
// }
@@ -340,6 +348,13 @@ func ExamplePrettyJsonDumper() {
// "startLine": 9,
// "endLine": 9
// },
// "meta": [
// {
// "type": "*meta.TokenType",
// "value": ";",
// "tokenName": "SemiColonToken"
// }
// ],
// "Expr": {
// "type": "*expr.Variable",
// "position": {
@@ -350,31 +365,32 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\n\t\t\t\t\t",
// "tokenName": "VariableToken"
// },
// {
// "type": "*meta.Comment",
// "type": "*meta.CommentType",
// "value": "// some comment\n",
// "tokenName": "VariableToken"
// },
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\t\t\t\t\t",
// "tokenName": "VariableToken"
// },
// {
// "type": "*meta.Comment",
// "type": "*meta.CommentType",
// "value": "// second comment\n",
// "tokenName": "VariableToken"
// },
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\t\t\t\t\t",
// "tokenName": "VariableToken"
// }
// ],
// "StringVar": false,
// "VarName": {
// "type": "*node.Identifier",
// "position": {
@@ -396,21 +412,26 @@ func ExamplePrettyJsonDumper() {
// "type": "*stmt.Function",
// "position": {
// "startPos": 168,
// "endPos": 184,
// "endPos": 194,
// "startLine": 13,
// "endLine": 13
// "endLine": 15
// },
// "namespacedName": "Foo\\foo",
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": "\n\n\t\t\t",
// "tokenName": "FunctionToken"
// },
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "OpenCurlyBracesToken"
// },
// {
// "type": "*meta.WhiteSpaceType",
// "value": "\n\t\t\t",
// "tokenName": "CloseCurlyBracesToken"
// }
// ],
// "ReturnsRef": false,
@@ -425,7 +446,7 @@ func ExamplePrettyJsonDumper() {
// },
// "meta": [
// {
// "type": "*meta.WhiteSpace",
// "type": "*meta.WhiteSpaceType",
// "value": " ",
// "tokenName": "IdentifierToken"
// }
@@ -433,7 +454,27 @@ func ExamplePrettyJsonDumper() {
// "Value": "foo"
// },
// "Stmts": [
//
// {
// "type": "*stmt.Nop",
// "position": {
// "startPos": 189,
// "endPos": 189,
// "startLine": 14,
// "endLine": 14
// },
// "meta": [
// {
// "type": "*meta.WhiteSpaceType",
// "value": "\n\t\t\t\t",
// "tokenName": "SemiColonToken"
// },
// {
// "type": "*meta.TokenType",
// "value": ";",
// "tokenName": "SemiColonToken"
// }
// ]
// }
// ]
// }
// ]