Skip to content

Commit 8d27ad1

Browse files
committed
refactor: add range to text, see #498
1 parent 9de401c commit 8d27ad1

8 files changed

+106
-19
lines changed

.version

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.2.723
1+
0.2.724

parser/v2/elementparser.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type elementOpenTag struct {
2121
}
2222

2323
var elementOpenTagParser = parse.Func(func(pi *parse.Input) (e elementOpenTag, ok bool, err error) {
24-
start := pi.Index()
24+
start := pi.Position()
2525

2626
// <
2727
if _, ok, err = lt.Parse(pi); err != nil || !ok {
@@ -31,13 +31,13 @@ var elementOpenTagParser = parse.Func(func(pi *parse.Input) (e elementOpenTag, o
3131
// Element name.
3232
l := pi.Position().Line
3333
if e.Name, ok, err = elementNameParser.Parse(pi); err != nil || !ok {
34-
pi.Seek(start)
34+
pi.Seek(start.Index)
3535
return
3636
}
3737
e.NameRange = NewRange(pi.PositionAt(pi.Index()-len(e.Name)), pi.Position())
3838

3939
if e.Attributes, ok, err = (attributesParser{}).Parse(pi); err != nil || !ok {
40-
pi.Seek(start)
40+
pi.Seek(start.Index)
4141
return
4242
}
4343

@@ -48,7 +48,7 @@ var elementOpenTagParser = parse.Func(func(pi *parse.Input) (e elementOpenTag, o
4848

4949
// Optional whitespace.
5050
if _, _, err = parse.OptionalWhitespace.Parse(pi); err != nil {
51-
pi.Seek(start)
51+
pi.Seek(start.Index)
5252
return
5353
}
5454

parser/v2/elementparser_test.go

+33-3
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,15 @@ func TestElementParser(t *testing.T) {
597597
From: Position{Index: 1, Line: 0, Col: 1},
598598
To: Position{Index: 9, Line: 0, Col: 9},
599599
},
600-
Children: []Node{Text{Value: "Content"}},
600+
Children: []Node{
601+
Text{
602+
Value: "Content",
603+
Range: Range{
604+
From: Position{Index: 10, Line: 0, Col: 10},
605+
To: Position{Index: 17, Line: 0, Col: 17},
606+
},
607+
},
608+
},
601609
},
602610
},
603611
{
@@ -654,7 +662,15 @@ func TestElementParser(t *testing.T) {
654662
From: Position{Index: 1, Line: 0, Col: 1},
655663
To: Position{Index: 6, Line: 0, Col: 6},
656664
},
657-
Children: []Node{Text{Value: "Text"}},
665+
Children: []Node{
666+
Text{
667+
Value: "Text",
668+
Range: Range{
669+
From: Position{Index: 7, Line: 0, Col: 7},
670+
To: Position{Index: 11, Line: 0, Col: 11},
671+
},
672+
},
673+
},
658674
},
659675
},
660676
{
@@ -1008,6 +1024,10 @@ func TestElementParser(t *testing.T) {
10081024
Children: []Node{
10091025
Text{
10101026
Value: "Test",
1027+
Range: Range{
1028+
From: Position{Index: 70, Line: 4, Col: 1},
1029+
To: Position{Index: 74, Line: 4, Col: 5},
1030+
},
10111031
},
10121032
},
10131033
TrailingSpace: SpaceVertical,
@@ -1215,7 +1235,13 @@ func TestElementParser(t *testing.T) {
12151235
},
12161236
IndentAttrs: true,
12171237
Children: []Node{
1218-
Text{Value: "Test"},
1238+
Text{
1239+
Value: "Test",
1240+
Range: Range{
1241+
From: Position{Index: 66, Line: 4, Col: 1},
1242+
To: Position{Index: 70, Line: 4, Col: 5},
1243+
},
1244+
},
12191245
},
12201246
},
12211247
},
@@ -1242,6 +1268,10 @@ func TestElementParser(t *testing.T) {
12421268
Children: []Node{
12431269
Text{
12441270
Value: "The text",
1271+
Range: Range{
1272+
From: Position{Index: 3, Line: 0, Col: 3},
1273+
To: Position{Index: 11, Line: 0, Col: 11},
1274+
},
12451275
},
12461276
},
12471277
},

parser/v2/ifexpressionparser_test.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,14 @@ func TestIfExpression(t *testing.T) {
162162
},
163163
Then: []Node{
164164
Whitespace{Value: " "},
165-
Text{Value: "text", TrailingSpace: SpaceVertical},
165+
Text{
166+
Value: "text",
167+
Range: Range{
168+
From: Position{Index: 15, Line: 1, Col: 2},
169+
To: Position{Index: 19, Line: 1, Col: 6},
170+
},
171+
TrailingSpace: SpaceVertical,
172+
},
166173
},
167174
},
168175
},

parser/v2/templateparser_test.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,13 @@ func TestTemplateParser(t *testing.T) {
628628
},
629629
},
630630
Whitespace{Value: " "},
631-
Text{Value: "Home"},
631+
Text{
632+
Value: "Home",
633+
Range: Range{
634+
From: Position{Index: 48, Line: 1, Col: 36},
635+
To: Position{Index: 52, Line: 1, Col: 40},
636+
},
637+
},
632638
},
633639
TrailingSpace: SpaceVertical,
634640
},

parser/v2/templelementparser_test.go

+13-2
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,12 @@ func TestTemplElementExpressionParser(t *testing.T) {
105105
},
106106
Children: []Node{
107107
Whitespace{Value: "\n\t"},
108-
Text{Value: "some words",
108+
Text{
109+
Value: "some words",
110+
Range: Range{
111+
From: Position{Index: 18, Line: 1, Col: 1},
112+
To: Position{Index: 28, Line: 1, Col: 11},
113+
},
109114
TrailingSpace: SpaceVertical,
110115
},
111116
},
@@ -394,7 +399,13 @@ func TestTemplElementExpressionParser(t *testing.T) {
394399
To: Position{Index: 42, Line: 1, Col: 6},
395400
},
396401
Children: []Node{
397-
Text{Value: "hello"},
402+
Text{
403+
Value: "hello",
404+
Range: Range{
405+
From: Position{Index: 43, Line: 1, Col: 7},
406+
To: Position{Index: 48, Line: 1, Col: 12},
407+
},
408+
},
398409
},
399410
TrailingSpace: SpaceVertical,
400411
},

parser/v2/textparser.go

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ var textParser = parse.Func(func(pi *parse.Input) (n Node, ok bool, err error) {
2323
err = parse.Error("textParser: unterminated text, expected tag open, templ expression open, or newline", from)
2424
return
2525
}
26+
t.Range = NewRange(from, pi.Position())
2627

2728
// Parse trailing whitespace.
2829
ws, _, err := parse.Whitespace.Parse(pi)

parser/v2/textparser_test.go

+39-7
Original file line numberDiff line numberDiff line change
@@ -18,56 +18,88 @@ func TestTextParser(t *testing.T) {
1818
input: `abcdef<a href="https://example.com">More</a>`,
1919
expected: Text{
2020
Value: "abcdef",
21+
Range: Range{
22+
From: Position{Index: 0, Line: 0, Col: 0},
23+
To: Position{Index: 6, Line: 0, Col: 6},
24+
},
2125
},
2226
},
2327
{
2428
name: "Text ends at a templ expression start",
25-
input: `abcdef{%= "test" %}`,
29+
input: `abcdef{ "test" }`,
2630
expected: Text{
2731
Value: "abcdef",
32+
Range: Range{
33+
From: Position{Index: 0, Line: 0, Col: 0},
34+
To: Position{Index: 6, Line: 0, Col: 6},
35+
},
2836
},
2937
},
3038
{
3139
name: "Text may contain spaces",
32-
input: `abcdef ghijk{%= "test" %}`,
40+
input: `abcdef ghijk{ "test" }`,
3341
expected: Text{
3442
Value: "abcdef ghijk",
43+
Range: Range{
44+
From: Position{Index: 0, Line: 0, Col: 0},
45+
To: Position{Index: 12, Line: 0, Col: 12},
46+
},
3547
},
3648
},
3749
{
3850
name: "Text may contain named references",
39-
input: `abcdef&nbsp;ghijk{%= "test" %}`,
51+
input: `abcdef&nbsp;ghijk{ "test" }`,
4052
expected: Text{
4153
Value: "abcdef&nbsp;ghijk",
54+
Range: Range{
55+
From: Position{Index: 0, Line: 0, Col: 0},
56+
To: Position{Index: 17, Line: 0, Col: 17},
57+
},
4258
},
4359
},
4460
{
4561
name: "Text may contain base 10 numeric references",
46-
input: `abcdef&#32;ghijk{%= "test" %}`,
62+
input: `abcdef&#32;ghijk{ "test" }`,
4763
expected: Text{
4864
Value: "abcdef&#32;ghijk",
65+
Range: Range{
66+
From: Position{Index: 0, Line: 0, Col: 0},
67+
To: Position{Index: 16, Line: 0, Col: 16},
68+
},
4969
},
5070
},
5171
{
5272
name: "Text may contain hexadecimal numeric references",
53-
input: `abcdef&#x20;ghijk{%= "test" %}`,
73+
input: `abcdef&#x20;ghijk{ "test" }`,
5474
expected: Text{
5575
Value: "abcdef&#x20;ghijk",
76+
Range: Range{
77+
From: Position{Index: 0, Line: 0, Col: 0},
78+
To: Position{Index: 17, Line: 0, Col: 17},
79+
},
5680
},
5781
},
5882
{
5983
name: "Multiline text is colected line by line",
6084
input: "Line 1\nLine 2",
6185
expected: Text{
62-
Value: "Line 1",
86+
Value: "Line 1",
87+
Range: Range{
88+
From: Position{Index: 0, Line: 0, Col: 0},
89+
To: Position{Index: 6, Line: 0, Col: 6},
90+
},
6391
TrailingSpace: "\n",
6492
},
6593
},
6694
{
6795
name: "Multiline text is colected line by line (Windows)",
6896
input: "Line 1\r\nLine 2",
6997
expected: Text{
70-
Value: "Line 1",
98+
Value: "Line 1",
99+
Range: Range{
100+
From: Position{Index: 0, Line: 0, Col: 0},
101+
To: Position{Index: 6, Line: 0, Col: 6},
102+
},
71103
TrailingSpace: "\n",
72104
},
73105
},

0 commit comments

Comments
 (0)