save comment position
This commit is contained in:
parent
c2f938e55c
commit
781a55659b
@ -1,17 +1,28 @@
|
|||||||
package comment
|
package comment
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/z7zmey/php-parser/position"
|
||||||
|
)
|
||||||
|
|
||||||
// Comment aggrigates information about comment /**
|
// Comment aggrigates information about comment /**
|
||||||
type Comment struct {
|
type Comment struct {
|
||||||
value string
|
value string
|
||||||
|
position *position.Position
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewComment - Comment constructor
|
// NewComment - Comment constructor
|
||||||
func NewComment(value string) *Comment {
|
func NewComment(value string, pos *position.Position) *Comment {
|
||||||
return &Comment{
|
return &Comment{
|
||||||
value,
|
value,
|
||||||
|
pos,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Comment) String() string {
|
func (c *Comment) String() string {
|
||||||
return c.value
|
return c.value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Position returns comment position
|
||||||
|
func (c *Comment) Position() *position.Position {
|
||||||
|
return c.position
|
||||||
|
}
|
||||||
|
@ -3,6 +3,8 @@ package comment_test
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/z7zmey/php-parser/position"
|
||||||
|
|
||||||
"github.com/z7zmey/php-parser/comment"
|
"github.com/z7zmey/php-parser/comment"
|
||||||
"github.com/z7zmey/php-parser/node"
|
"github.com/z7zmey/php-parser/node"
|
||||||
)
|
)
|
||||||
@ -11,8 +13,8 @@ func TestComments(t *testing.T) {
|
|||||||
n := node.NewIdentifier("test")
|
n := node.NewIdentifier("test")
|
||||||
|
|
||||||
commentGroup := []*comment.Comment{
|
commentGroup := []*comment.Comment{
|
||||||
comment.NewComment("/** hello world */"),
|
comment.NewComment("/** hello world */", nil),
|
||||||
comment.NewComment("// hello world"),
|
comment.NewComment("// hello world", nil),
|
||||||
}
|
}
|
||||||
|
|
||||||
comments := comment.Comments{}
|
comments := comment.Comments{}
|
||||||
@ -25,3 +27,15 @@ func TestComments(t *testing.T) {
|
|||||||
t.Errorf("expected and actual are not equal\n")
|
t.Errorf("expected and actual are not equal\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCommentPos(t *testing.T) {
|
||||||
|
expected := position.NewPosition(0, 0, 0, 0)
|
||||||
|
|
||||||
|
comment := comment.NewComment("/** hello world */", expected)
|
||||||
|
|
||||||
|
actual := comment.Position()
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("expected and actual are not equal\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
package position
|
package parser
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/z7zmey/php-parser/node"
|
"github.com/z7zmey/php-parser/node"
|
||||||
|
"github.com/z7zmey/php-parser/position"
|
||||||
"github.com/z7zmey/php-parser/scanner"
|
"github.com/z7zmey/php-parser/scanner"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Builder provide functions to constuct positions
|
// Builder provide functions to constuct positions
|
||||||
type Builder struct {
|
type Builder struct {
|
||||||
Positions *Positions
|
Positions *position.Positions
|
||||||
}
|
}
|
||||||
|
|
||||||
type startPos struct {
|
type startPos struct {
|
||||||
@ -79,8 +80,8 @@ func (b *Builder) getNodeEndPos(n node.Node) endPos {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewNodeListPosition returns new Position
|
// NewNodeListPosition returns new Position
|
||||||
func (b *Builder) NewNodeListPosition(list []node.Node) *Position {
|
func (b *Builder) NewNodeListPosition(list []node.Node) *position.Position {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
b.getListStartPos(list).startLine,
|
b.getListStartPos(list).startLine,
|
||||||
b.getListEndPos(list).endLine,
|
b.getListEndPos(list).endLine,
|
||||||
b.getListStartPos(list).startPos,
|
b.getListStartPos(list).startPos,
|
||||||
@ -89,8 +90,8 @@ func (b *Builder) NewNodeListPosition(list []node.Node) *Position {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewNodePosition returns new Position
|
// NewNodePosition returns new Position
|
||||||
func (b *Builder) NewNodePosition(n node.Node) *Position {
|
func (b *Builder) NewNodePosition(n node.Node) *position.Position {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
b.getNodeStartPos(n).startLine,
|
b.getNodeStartPos(n).startLine,
|
||||||
b.getNodeEndPos(n).endLine,
|
b.getNodeEndPos(n).endLine,
|
||||||
b.getNodeStartPos(n).startPos,
|
b.getNodeStartPos(n).startPos,
|
||||||
@ -99,8 +100,8 @@ func (b *Builder) NewNodePosition(n node.Node) *Position {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewTokenPosition returns new Position
|
// NewTokenPosition returns new Position
|
||||||
func (b *Builder) NewTokenPosition(t scanner.Token) *Position {
|
func (b *Builder) NewTokenPosition(t scanner.Token) *position.Position {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
t.StartLine,
|
t.StartLine,
|
||||||
t.EndLine,
|
t.EndLine,
|
||||||
t.StartPos,
|
t.StartPos,
|
||||||
@ -109,8 +110,8 @@ func (b *Builder) NewTokenPosition(t scanner.Token) *Position {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewTokensPosition returns new Position
|
// NewTokensPosition returns new Position
|
||||||
func (b *Builder) NewTokensPosition(startToken scanner.Token, endToken scanner.Token) *Position {
|
func (b *Builder) NewTokensPosition(startToken scanner.Token, endToken scanner.Token) *position.Position {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
startToken.StartLine,
|
startToken.StartLine,
|
||||||
endToken.EndLine,
|
endToken.EndLine,
|
||||||
startToken.StartPos,
|
startToken.StartPos,
|
||||||
@ -119,8 +120,8 @@ func (b *Builder) NewTokensPosition(startToken scanner.Token, endToken scanner.T
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewTokenNodePosition returns new Position
|
// NewTokenNodePosition returns new Position
|
||||||
func (b *Builder) NewTokenNodePosition(t scanner.Token, n node.Node) *Position {
|
func (b *Builder) NewTokenNodePosition(t scanner.Token, n node.Node) *position.Position {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
t.StartLine,
|
t.StartLine,
|
||||||
b.getNodeEndPos(n).endLine,
|
b.getNodeEndPos(n).endLine,
|
||||||
t.StartPos,
|
t.StartPos,
|
||||||
@ -129,8 +130,8 @@ func (b *Builder) NewTokenNodePosition(t scanner.Token, n node.Node) *Position {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewNodeTokenPosition returns new Position
|
// NewNodeTokenPosition returns new Position
|
||||||
func (b *Builder) NewNodeTokenPosition(n node.Node, t scanner.Token) *Position {
|
func (b *Builder) NewNodeTokenPosition(n node.Node, t scanner.Token) *position.Position {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
b.getNodeStartPos(n).startLine,
|
b.getNodeStartPos(n).startLine,
|
||||||
t.EndLine,
|
t.EndLine,
|
||||||
b.getNodeStartPos(n).startPos,
|
b.getNodeStartPos(n).startPos,
|
||||||
@ -139,8 +140,8 @@ func (b *Builder) NewNodeTokenPosition(n node.Node, t scanner.Token) *Position {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewNodesPosition returns new Position
|
// NewNodesPosition returns new Position
|
||||||
func (b *Builder) NewNodesPosition(startNode node.Node, endNode node.Node) *Position {
|
func (b *Builder) NewNodesPosition(startNode node.Node, endNode node.Node) *position.Position {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
b.getNodeStartPos(startNode).startLine,
|
b.getNodeStartPos(startNode).startLine,
|
||||||
b.getNodeEndPos(endNode).endLine,
|
b.getNodeEndPos(endNode).endLine,
|
||||||
b.getNodeStartPos(startNode).startPos,
|
b.getNodeStartPos(startNode).startPos,
|
||||||
@ -149,8 +150,8 @@ func (b *Builder) NewNodesPosition(startNode node.Node, endNode node.Node) *Posi
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewNodeListTokenPosition returns new Position
|
// NewNodeListTokenPosition returns new Position
|
||||||
func (b *Builder) NewNodeListTokenPosition(list []node.Node, t scanner.Token) *Position {
|
func (b *Builder) NewNodeListTokenPosition(list []node.Node, t scanner.Token) *position.Position {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
b.getListStartPos(list).startLine,
|
b.getListStartPos(list).startLine,
|
||||||
t.EndLine,
|
t.EndLine,
|
||||||
b.getListStartPos(list).startPos,
|
b.getListStartPos(list).startPos,
|
||||||
@ -159,8 +160,8 @@ func (b *Builder) NewNodeListTokenPosition(list []node.Node, t scanner.Token) *P
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewTokenNodeListPosition returns new Position
|
// NewTokenNodeListPosition returns new Position
|
||||||
func (b *Builder) NewTokenNodeListPosition(t scanner.Token, list []node.Node) *Position {
|
func (b *Builder) NewTokenNodeListPosition(t scanner.Token, list []node.Node) *position.Position {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
t.StartLine,
|
t.StartLine,
|
||||||
b.getListEndPos(list).endLine,
|
b.getListEndPos(list).endLine,
|
||||||
t.StartPos,
|
t.StartPos,
|
||||||
@ -169,8 +170,8 @@ func (b *Builder) NewTokenNodeListPosition(t scanner.Token, list []node.Node) *P
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewNodeNodeListPosition returns new Position
|
// NewNodeNodeListPosition returns new Position
|
||||||
func (b *Builder) NewNodeNodeListPosition(n node.Node, list []node.Node) *Position {
|
func (b *Builder) NewNodeNodeListPosition(n node.Node, list []node.Node) *position.Position {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
b.getNodeStartPos(n).startLine,
|
b.getNodeStartPos(n).startLine,
|
||||||
b.getListEndPos(list).endLine,
|
b.getListEndPos(list).endLine,
|
||||||
b.getNodeStartPos(n).startPos,
|
b.getNodeStartPos(n).startPos,
|
||||||
@ -179,9 +180,9 @@ func (b *Builder) NewNodeNodeListPosition(n node.Node, list []node.Node) *Positi
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewOptionalListTokensPosition returns new Position
|
// NewOptionalListTokensPosition returns new Position
|
||||||
func (b *Builder) NewOptionalListTokensPosition(list []node.Node, t scanner.Token, endToken scanner.Token) *Position {
|
func (b *Builder) NewOptionalListTokensPosition(list []node.Node, t scanner.Token, endToken scanner.Token) *position.Position {
|
||||||
if list == nil {
|
if list == nil {
|
||||||
return &Position{
|
return &position.Position{
|
||||||
t.StartLine,
|
t.StartLine,
|
||||||
endToken.EndLine,
|
endToken.EndLine,
|
||||||
t.StartPos,
|
t.StartPos,
|
||||||
@ -189,7 +190,7 @@ func (b *Builder) NewOptionalListTokensPosition(list []node.Node, t scanner.Toke
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Position{
|
return &position.Position{
|
||||||
b.getListStartPos(list).startLine,
|
b.getListStartPos(list).startLine,
|
||||||
endToken.EndLine,
|
endToken.EndLine,
|
||||||
b.getListStartPos(list).startPos,
|
b.getListStartPos(list).startPos,
|
@ -1,16 +1,17 @@
|
|||||||
package position_test
|
package parser_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/z7zmey/php-parser/node"
|
"github.com/z7zmey/php-parser/node"
|
||||||
|
"github.com/z7zmey/php-parser/parser"
|
||||||
"github.com/z7zmey/php-parser/position"
|
"github.com/z7zmey/php-parser/position"
|
||||||
|
|
||||||
"github.com/z7zmey/php-parser/scanner"
|
"github.com/z7zmey/php-parser/scanner"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNewTokenPosition(t *testing.T) {
|
func TestNewTokenPosition(t *testing.T) {
|
||||||
builder := position.Builder{}
|
builder := parser.Builder{}
|
||||||
|
|
||||||
tkn := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
tkn := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
||||||
|
|
||||||
@ -22,7 +23,7 @@ func TestNewTokenPosition(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNewTokensPosition(t *testing.T) {
|
func TestNewTokensPosition(t *testing.T) {
|
||||||
builder := position.Builder{}
|
builder := parser.Builder{}
|
||||||
|
|
||||||
token1 := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
token1 := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
||||||
token2 := scanner.NewToken([]byte(`foo`), 2, 2, 4, 6)
|
token2 := scanner.NewToken([]byte(`foo`), 2, 2, 4, 6)
|
||||||
@ -45,7 +46,7 @@ func TestNewNodePosition(t *testing.T) {
|
|||||||
EndPos: 3,
|
EndPos: 3,
|
||||||
})
|
})
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: p,
|
Positions: p,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +69,7 @@ func TestNewTokenNodePosition(t *testing.T) {
|
|||||||
EndPos: 12,
|
EndPos: 12,
|
||||||
})
|
})
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: p,
|
Positions: p,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +92,7 @@ func TestNewNodeTokenPosition(t *testing.T) {
|
|||||||
EndPos: 9,
|
EndPos: 9,
|
||||||
})
|
})
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: p,
|
Positions: p,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +107,7 @@ func TestNewNodeListPosition(t *testing.T) {
|
|||||||
n1 := node.NewIdentifier("test node")
|
n1 := node.NewIdentifier("test node")
|
||||||
n2 := node.NewIdentifier("test node")
|
n2 := node.NewIdentifier("test node")
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: &position.Positions{
|
Positions: &position.Positions{
|
||||||
n1: &position.Position{
|
n1: &position.Position{
|
||||||
StartLine: 1,
|
StartLine: 1,
|
||||||
@ -134,7 +135,7 @@ func TestNewNodesPosition(t *testing.T) {
|
|||||||
n1 := node.NewIdentifier("test node")
|
n1 := node.NewIdentifier("test node")
|
||||||
n2 := node.NewIdentifier("test node")
|
n2 := node.NewIdentifier("test node")
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: &position.Positions{
|
Positions: &position.Positions{
|
||||||
n1: &position.Position{
|
n1: &position.Position{
|
||||||
StartLine: 1,
|
StartLine: 1,
|
||||||
@ -163,7 +164,7 @@ func TestNewNodeListTokenPosition(t *testing.T) {
|
|||||||
n2 := node.NewIdentifier("test node")
|
n2 := node.NewIdentifier("test node")
|
||||||
tkn := scanner.NewToken([]byte(`foo`), 3, 3, 20, 22)
|
tkn := scanner.NewToken([]byte(`foo`), 3, 3, 20, 22)
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: &position.Positions{
|
Positions: &position.Positions{
|
||||||
n1: &position.Position{
|
n1: &position.Position{
|
||||||
StartLine: 1,
|
StartLine: 1,
|
||||||
@ -192,7 +193,7 @@ func TestNewTokenNodeListPosition(t *testing.T) {
|
|||||||
n1 := node.NewIdentifier("test node")
|
n1 := node.NewIdentifier("test node")
|
||||||
n2 := node.NewIdentifier("test node")
|
n2 := node.NewIdentifier("test node")
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: &position.Positions{
|
Positions: &position.Positions{
|
||||||
n1: &position.Position{
|
n1: &position.Position{
|
||||||
StartLine: 2,
|
StartLine: 2,
|
||||||
@ -221,7 +222,7 @@ func TestNewNodeNodeListPosition(t *testing.T) {
|
|||||||
n2 := node.NewIdentifier("test node")
|
n2 := node.NewIdentifier("test node")
|
||||||
n3 := node.NewIdentifier("test node")
|
n3 := node.NewIdentifier("test node")
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: &position.Positions{
|
Positions: &position.Positions{
|
||||||
n1: &position.Position{
|
n1: &position.Position{
|
||||||
StartLine: 1,
|
StartLine: 1,
|
||||||
@ -252,7 +253,7 @@ func TestNewNodeNodeListPosition(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNewOptionalListTokensPosition(t *testing.T) {
|
func TestNewOptionalListTokensPosition(t *testing.T) {
|
||||||
builder := position.Builder{}
|
builder := parser.Builder{}
|
||||||
|
|
||||||
token1 := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
token1 := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
||||||
token2 := scanner.NewToken([]byte(`foo`), 2, 2, 4, 6)
|
token2 := scanner.NewToken([]byte(`foo`), 2, 2, 4, 6)
|
||||||
@ -269,7 +270,7 @@ func TestNewOptionalListTokensPosition2(t *testing.T) {
|
|||||||
n2 := node.NewIdentifier("test node")
|
n2 := node.NewIdentifier("test node")
|
||||||
n3 := node.NewIdentifier("test node")
|
n3 := node.NewIdentifier("test node")
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: &position.Positions{
|
Positions: &position.Positions{
|
||||||
n1: &position.Position{
|
n1: &position.Position{
|
||||||
StartLine: 1,
|
StartLine: 1,
|
||||||
@ -303,7 +304,7 @@ func TestNewOptionalListTokensPosition2(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNilNodePos(t *testing.T) {
|
func TestNilNodePos(t *testing.T) {
|
||||||
builder := position.Builder{}
|
builder := parser.Builder{}
|
||||||
|
|
||||||
pos := builder.NewNodesPosition(nil, nil)
|
pos := builder.NewNodesPosition(nil, nil)
|
||||||
|
|
||||||
@ -315,7 +316,7 @@ func TestNilNodePos(t *testing.T) {
|
|||||||
func TestNilNodeListPos(t *testing.T) {
|
func TestNilNodeListPos(t *testing.T) {
|
||||||
n1 := node.NewIdentifier("test node")
|
n1 := node.NewIdentifier("test node")
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: &position.Positions{
|
Positions: &position.Positions{
|
||||||
n1: &position.Position{
|
n1: &position.Position{
|
||||||
StartLine: 1,
|
StartLine: 1,
|
||||||
@ -336,7 +337,7 @@ func TestNilNodeListPos(t *testing.T) {
|
|||||||
func TestNilNodeListTokenPos(t *testing.T) {
|
func TestNilNodeListTokenPos(t *testing.T) {
|
||||||
token1 := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
token1 := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
||||||
|
|
||||||
builder := position.Builder{}
|
builder := parser.Builder{}
|
||||||
|
|
||||||
pos := builder.NewNodeListTokenPosition(nil, token1)
|
pos := builder.NewNodeListTokenPosition(nil, token1)
|
||||||
|
|
||||||
@ -348,7 +349,7 @@ func TestNilNodeListTokenPos(t *testing.T) {
|
|||||||
func TestEmptyNodeListPos(t *testing.T) {
|
func TestEmptyNodeListPos(t *testing.T) {
|
||||||
n1 := node.NewIdentifier("test node")
|
n1 := node.NewIdentifier("test node")
|
||||||
|
|
||||||
builder := position.Builder{
|
builder := parser.Builder{
|
||||||
Positions: &position.Positions{
|
Positions: &position.Positions{
|
||||||
n1: &position.Position{
|
n1: &position.Position{
|
||||||
StartLine: 1,
|
StartLine: 1,
|
||||||
@ -369,7 +370,7 @@ func TestEmptyNodeListPos(t *testing.T) {
|
|||||||
func TestEmptyNodeListTokenPos(t *testing.T) {
|
func TestEmptyNodeListTokenPos(t *testing.T) {
|
||||||
token1 := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
token1 := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
||||||
|
|
||||||
builder := position.Builder{}
|
builder := parser.Builder{}
|
||||||
|
|
||||||
pos := builder.NewNodeListTokenPosition([]node.Node{}, token1)
|
pos := builder.NewNodeListTokenPosition([]node.Node{}, token1)
|
||||||
|
|
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/z7zmey/php-parser/comment"
|
"github.com/z7zmey/php-parser/comment"
|
||||||
"github.com/z7zmey/php-parser/errors"
|
"github.com/z7zmey/php-parser/errors"
|
||||||
"github.com/z7zmey/php-parser/node"
|
"github.com/z7zmey/php-parser/node"
|
||||||
|
"github.com/z7zmey/php-parser/parser"
|
||||||
"github.com/z7zmey/php-parser/position"
|
"github.com/z7zmey/php-parser/position"
|
||||||
"github.com/z7zmey/php-parser/scanner"
|
"github.com/z7zmey/php-parser/scanner"
|
||||||
)
|
)
|
||||||
@ -19,7 +20,7 @@ type Parser struct {
|
|||||||
*scanner.Lexer
|
*scanner.Lexer
|
||||||
path string
|
path string
|
||||||
lastToken *scanner.Token
|
lastToken *scanner.Token
|
||||||
positionBuilder *position.Builder
|
positionBuilder *parser.Builder
|
||||||
errors []*errors.Error
|
errors []*errors.Error
|
||||||
rootNode node.Node
|
rootNode node.Node
|
||||||
comments comment.Comments
|
comments comment.Comments
|
||||||
@ -63,7 +64,7 @@ func (l *Parser) Parse() int {
|
|||||||
l.rootNode = nil
|
l.rootNode = nil
|
||||||
l.comments = comment.Comments{}
|
l.comments = comment.Comments{}
|
||||||
l.positions = position.Positions{}
|
l.positions = position.Positions{}
|
||||||
l.positionBuilder = &position.Builder{
|
l.positionBuilder = &parser.Builder{
|
||||||
Positions: &l.positions,
|
Positions: &l.positions,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/z7zmey/php-parser/comment"
|
"github.com/z7zmey/php-parser/comment"
|
||||||
"github.com/z7zmey/php-parser/errors"
|
"github.com/z7zmey/php-parser/errors"
|
||||||
"github.com/z7zmey/php-parser/node"
|
"github.com/z7zmey/php-parser/node"
|
||||||
|
"github.com/z7zmey/php-parser/parser"
|
||||||
"github.com/z7zmey/php-parser/position"
|
"github.com/z7zmey/php-parser/position"
|
||||||
"github.com/z7zmey/php-parser/scanner"
|
"github.com/z7zmey/php-parser/scanner"
|
||||||
)
|
)
|
||||||
@ -19,7 +20,7 @@ type Parser struct {
|
|||||||
*scanner.Lexer
|
*scanner.Lexer
|
||||||
path string
|
path string
|
||||||
lastToken *scanner.Token
|
lastToken *scanner.Token
|
||||||
positionBuilder *position.Builder
|
positionBuilder *parser.Builder
|
||||||
errors []*errors.Error
|
errors []*errors.Error
|
||||||
rootNode node.Node
|
rootNode node.Node
|
||||||
comments comment.Comments
|
comments comment.Comments
|
||||||
@ -63,7 +64,7 @@ func (l *Parser) Parse() int {
|
|||||||
l.rootNode = nil
|
l.rootNode = nil
|
||||||
l.comments = comment.Comments{}
|
l.comments = comment.Comments{}
|
||||||
l.positions = position.Positions{}
|
l.positions = position.Positions{}
|
||||||
l.positionBuilder = &position.Builder{
|
l.positionBuilder = &parser.Builder{
|
||||||
Positions: &l.positions,
|
Positions: &l.positions,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,16 @@ type Position struct {
|
|||||||
EndPos int
|
EndPos int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewPosition Position constructor
|
||||||
|
func NewPosition(StartLine int, EndLine int, StartPos int, EndPos int) *Position {
|
||||||
|
return &Position{
|
||||||
|
StartLine: StartLine,
|
||||||
|
EndLine: EndLine,
|
||||||
|
StartPos: StartPos,
|
||||||
|
EndPos: EndPos,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (p Position) String() string {
|
func (p Position) String() string {
|
||||||
return fmt.Sprintf("Pos{Line: %d-%d Pos: %d-%d}", p.StartLine, p.EndLine, p.StartPos, p.EndPos)
|
return fmt.Sprintf("Pos{Line: %d-%d Pos: %d-%d}", p.StartLine, p.EndLine, p.StartPos, p.EndPos)
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,8 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
|
"github.com/z7zmey/php-parser/position"
|
||||||
|
|
||||||
"github.com/cznic/golex/lex"
|
"github.com/cznic/golex/lex"
|
||||||
"github.com/z7zmey/php-parser/comment"
|
"github.com/z7zmey/php-parser/comment"
|
||||||
)
|
)
|
||||||
@ -521,7 +523,17 @@ func (l *Lexer) newToken(chars []lex.Char) Token {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *Lexer) addComment(chars []lex.Char) {
|
func (l *Lexer) addComment(chars []lex.Char) {
|
||||||
c := comment.NewComment(string(l.charsToBytes(chars)))
|
firstChar := chars[0]
|
||||||
|
lastChar := chars[len(chars)-1]
|
||||||
|
|
||||||
|
pos := position.NewPosition(
|
||||||
|
l.File.Line(firstChar.Pos()),
|
||||||
|
l.File.Line(lastChar.Pos()),
|
||||||
|
int(firstChar.Pos()),
|
||||||
|
int(lastChar.Pos()),
|
||||||
|
)
|
||||||
|
|
||||||
|
c := comment.NewComment(string(l.charsToBytes(chars)), pos)
|
||||||
l.Comments = append(l.Comments, c)
|
l.Comments = append(l.Comments, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/z7zmey/php-parser/position"
|
||||||
|
|
||||||
"github.com/z7zmey/php-parser/comment"
|
"github.com/z7zmey/php-parser/comment"
|
||||||
|
|
||||||
"github.com/z7zmey/php-parser/scanner"
|
"github.com/z7zmey/php-parser/scanner"
|
||||||
@ -873,7 +875,7 @@ func TestCommentEnd(t *testing.T) {
|
|||||||
src := `<?php //test`
|
src := `<?php //test`
|
||||||
|
|
||||||
expected := []*comment.Comment{
|
expected := []*comment.Comment{
|
||||||
comment.NewComment("//test"),
|
comment.NewComment("//test", position.NewPosition(1, 1, 7, 12)),
|
||||||
}
|
}
|
||||||
|
|
||||||
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
||||||
@ -890,7 +892,7 @@ func TestCommentNewLine(t *testing.T) {
|
|||||||
src := "<?php //test\n$a"
|
src := "<?php //test\n$a"
|
||||||
|
|
||||||
expected := []*comment.Comment{
|
expected := []*comment.Comment{
|
||||||
comment.NewComment("//test\n"),
|
comment.NewComment("//test\n", position.NewPosition(1, 1, 7, 13)),
|
||||||
}
|
}
|
||||||
|
|
||||||
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
||||||
@ -907,7 +909,7 @@ func TestCommentNewLine1(t *testing.T) {
|
|||||||
src := "<?php //test\r$a"
|
src := "<?php //test\r$a"
|
||||||
|
|
||||||
expected := []*comment.Comment{
|
expected := []*comment.Comment{
|
||||||
comment.NewComment("//test\r"),
|
comment.NewComment("//test\r", position.NewPosition(1, 1, 7, 13)),
|
||||||
}
|
}
|
||||||
|
|
||||||
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
||||||
@ -924,7 +926,7 @@ func TestCommentNewLine2(t *testing.T) {
|
|||||||
src := "<?php #test\r\n$a"
|
src := "<?php #test\r\n$a"
|
||||||
|
|
||||||
expected := []*comment.Comment{
|
expected := []*comment.Comment{
|
||||||
comment.NewComment("#test\r\n"),
|
comment.NewComment("#test\r\n", position.NewPosition(1, 1, 7, 13)),
|
||||||
}
|
}
|
||||||
|
|
||||||
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
||||||
@ -942,7 +944,7 @@ func TestCommentWithPhpEndTag(t *testing.T) {
|
|||||||
//test?> test`
|
//test?> test`
|
||||||
|
|
||||||
expected := []*comment.Comment{
|
expected := []*comment.Comment{
|
||||||
comment.NewComment("//test"),
|
comment.NewComment("//test", position.NewPosition(2, 2, 8, 13)),
|
||||||
}
|
}
|
||||||
|
|
||||||
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
||||||
@ -960,7 +962,7 @@ func TestInlineComment(t *testing.T) {
|
|||||||
/*test*/`
|
/*test*/`
|
||||||
|
|
||||||
expected := []*comment.Comment{
|
expected := []*comment.Comment{
|
||||||
comment.NewComment("/*test*/"),
|
comment.NewComment("/*test*/", position.NewPosition(2, 2, 8, 15)),
|
||||||
}
|
}
|
||||||
|
|
||||||
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
||||||
@ -978,7 +980,7 @@ func TestEmptyInlineComment(t *testing.T) {
|
|||||||
/**/`
|
/**/`
|
||||||
|
|
||||||
expected := []*comment.Comment{
|
expected := []*comment.Comment{
|
||||||
comment.NewComment("/**/"),
|
comment.NewComment("/**/", position.NewPosition(2, 2, 8, 11)),
|
||||||
}
|
}
|
||||||
|
|
||||||
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
||||||
@ -996,7 +998,7 @@ func TestEmptyInlineComment2(t *testing.T) {
|
|||||||
/***/`
|
/***/`
|
||||||
|
|
||||||
expected := []*comment.Comment{
|
expected := []*comment.Comment{
|
||||||
comment.NewComment("/***/"),
|
comment.NewComment("/***/", position.NewPosition(2, 2, 8, 12)),
|
||||||
}
|
}
|
||||||
|
|
||||||
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
lexer := scanner.NewLexer(bytes.NewBufferString(src), "test.php")
|
||||||
|
@ -13,7 +13,7 @@ func TestToken(t *testing.T) {
|
|||||||
tkn := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
tkn := scanner.NewToken([]byte(`foo`), 1, 1, 0, 3)
|
||||||
|
|
||||||
c := []*comment.Comment{
|
c := []*comment.Comment{
|
||||||
comment.NewComment("test comment"),
|
comment.NewComment("test comment", nil),
|
||||||
}
|
}
|
||||||
|
|
||||||
tkn.SetComments(c)
|
tkn.SetComments(c)
|
||||||
|
Loading…
Reference in New Issue
Block a user