#25: save position within node

This commit is contained in:
z7zmey
2018-06-24 10:19:44 +03:00
parent 6ac67675d5
commit 1ebb0c6fad
268 changed files with 53606 additions and 7719 deletions

View File

@@ -2,21 +2,33 @@ package name
import (
"github.com/z7zmey/php-parser/node"
"github.com/z7zmey/php-parser/position"
"github.com/z7zmey/php-parser/walker"
)
// FullyQualified node
type FullyQualified struct {
Parts []node.Node
Position *position.Position
Parts []node.Node
}
// NewFullyQualified node constructor
func NewFullyQualified(Parts []node.Node) *FullyQualified {
return &FullyQualified{
Parts,
Parts: Parts,
}
}
// SetPosition sets node position
func (n *FullyQualified) SetPosition(p *position.Position) {
n.Position = p
}
// GetPosition returns node positions
func (n *FullyQualified) GetPosition() *position.Position {
return n.Position
}
// Attributes returns node attributes as map
func (n *FullyQualified) Attributes() map[string]interface{} {
return nil

View File

@@ -2,21 +2,33 @@ package name
import (
"github.com/z7zmey/php-parser/node"
"github.com/z7zmey/php-parser/position"
"github.com/z7zmey/php-parser/walker"
)
// Name node
type Name struct {
Parts []node.Node
Position *position.Position
Parts []node.Node
}
// NewName node constructor
func NewName(Parts []node.Node) *Name {
return &Name{
Parts,
Parts: Parts,
}
}
// SetPosition sets node position
func (n *Name) SetPosition(p *position.Position) {
n.Position = p
}
// GetPosition returns node positions
func (n *Name) GetPosition() *position.Position {
return n.Position
}
// Attributes returns node attributes as map
func (n *Name) Attributes() map[string]interface{} {
return nil

View File

@@ -1,19 +1,33 @@
package name
import "github.com/z7zmey/php-parser/walker"
import (
"github.com/z7zmey/php-parser/position"
"github.com/z7zmey/php-parser/walker"
)
// NamePart node
type NamePart struct {
Value string
Position *position.Position
Value string
}
// NewNamePart node constructor
func NewNamePart(Value string) *NamePart {
return &NamePart{
Value,
Value: Value,
}
}
// SetPosition sets node position
func (n *NamePart) SetPosition(p *position.Position) {
n.Position = p
}
// GetPosition returns node positions
func (n *NamePart) GetPosition() *position.Position {
return n.Position
}
// Attributes returns node attributes as map
func (n *NamePart) Attributes() map[string]interface{} {
return map[string]interface{}{

View File

@@ -2,21 +2,33 @@ package name
import (
"github.com/z7zmey/php-parser/node"
"github.com/z7zmey/php-parser/position"
"github.com/z7zmey/php-parser/walker"
)
// Relative node
type Relative struct {
Parts []node.Node
Position *position.Position
Parts []node.Node
}
// NewRelative node constructor
func NewRelative(Parts []node.Node) *Relative {
return &Relative{
Parts,
Parts: Parts,
}
}
// SetPosition sets node position
func (n *Relative) SetPosition(p *position.Position) {
n.Position = p
}
// GetPosition returns node positions
func (n *Relative) GetPosition() *position.Position {
return n.Position
}
// Attributes returns node attributes as map
func (n *Relative) Attributes() map[string]interface{} {
return nil

View File

@@ -7,6 +7,7 @@ import (
"github.com/z7zmey/php-parser/node/expr"
"github.com/z7zmey/php-parser/node/name"
"github.com/z7zmey/php-parser/position"
"github.com/kylelemons/godebug/pretty"
"github.com/z7zmey/php-parser/node"
@@ -32,13 +33,54 @@ func TestName(t *testing.T) {
src := `<? foo();`
expected := &node.Root{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 9,
},
Stmts: []node.Node{
&stmt.Expression{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 9,
},
Expr: &expr.FunctionCall{
Function: &name.Name{
Parts: []node.Node{&name.NamePart{Value: "foo"}},
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 8,
},
Function: &name.Name{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 6,
},
Parts: []node.Node{
&name.NamePart{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 6,
},
Value: "foo",
},
},
},
ArgumentList: &node.ArgumentList{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 7,
EndPos: 8,
},
},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -59,13 +101,54 @@ func TestFullyQualified(t *testing.T) {
src := `<? \foo();`
expected := &node.Root{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 10,
},
Stmts: []node.Node{
&stmt.Expression{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 10,
},
Expr: &expr.FunctionCall{
Function: &name.FullyQualified{
Parts: []node.Node{&name.NamePart{Value: "foo"}},
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 9,
},
Function: &name.FullyQualified{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 7,
},
Parts: []node.Node{
&name.NamePart{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 5,
EndPos: 7,
},
Value: "foo",
},
},
},
ArgumentList: &node.ArgumentList{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 8,
EndPos: 9,
},
},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -86,13 +169,54 @@ func TestRelative(t *testing.T) {
src := `<? namespace\foo();`
expected := &node.Root{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 19,
},
Stmts: []node.Node{
&stmt.Expression{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 19,
},
Expr: &expr.FunctionCall{
Function: &name.Relative{
Parts: []node.Node{&name.NamePart{Value: "foo"}},
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 18,
},
Function: &name.Relative{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 4,
EndPos: 16,
},
Parts: []node.Node{
&name.NamePart{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 14,
EndPos: 16,
},
Value: "foo",
},
},
},
ArgumentList: &node.ArgumentList{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 17,
EndPos: 18,
},
},
ArgumentList: &node.ArgumentList{},
},
},
},