Skip to content

Commit 66a86f5

Browse files
authored
Merge pull request #76 from nicored/master
feat: added lastPos to fields
2 parents c45546a + 84958cd commit 66a86f5

18 files changed

+673
-23
lines changed

parser/enum.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ func (e *Enum) Accept(v Visitor) {
102102
}
103103

104104
// ParseEnum parses the enum.
105-
// enum = "enum" enumName enumBody
105+
//
106+
// enum = "enum" enumName enumBody
106107
//
107108
// See https://developers.google.com/protocol-buffers/docs/reference/proto3-spec#enum_definition
108109
func (p *Parser) ParseEnum() (*Enum, error) {
@@ -263,7 +264,7 @@ func (p *Parser) parseEnumField() (*EnumField, error) {
263264
Ident: ident,
264265
Number: intLit,
265266
EnumValueOptions: enumValueOptions,
266-
Meta: meta.Meta{Pos: startPos.Position},
267+
Meta: meta.Meta{Pos: startPos.Position, LastPos: p.lex.Pos.Position},
267268
}, nil
268269
}
269270

parser/enum_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ func TestParser_ParseEnum(t *testing.T) {
7272
Line: 3,
7373
Column: 3,
7474
},
75+
LastPos: meta.Position{
76+
Offset: 67,
77+
Line: 3,
78+
Column: 14,
79+
},
7580
},
7681
},
7782
&parser.EnumField{
@@ -83,6 +88,11 @@ func TestParser_ParseEnum(t *testing.T) {
8388
Line: 4,
8489
Column: 3,
8590
},
91+
LastPos: meta.Position{
92+
Offset: 82,
93+
Line: 4,
94+
Column: 14,
95+
},
8696
},
8797
},
8898
&parser.EnumField{
@@ -100,6 +110,11 @@ func TestParser_ParseEnum(t *testing.T) {
100110
Line: 5,
101111
Column: 3,
102112
},
113+
LastPos: meta.Position{
114+
Offset: 131,
115+
Line: 5,
116+
Column: 48,
117+
},
103118
},
104119
},
105120
},
@@ -145,6 +160,11 @@ func TestParser_ParseEnum(t *testing.T) {
145160
Line: 2,
146161
Column: 3,
147162
},
163+
LastPos: meta.Position{
164+
Offset: 107,
165+
Line: 2,
166+
Column: 83,
167+
},
148168
},
149169
},
150170
},
@@ -233,6 +253,11 @@ func TestParser_ParseEnum(t *testing.T) {
233253
Line: 5,
234254
Column: 3,
235255
},
256+
LastPos: meta.Position{
257+
Offset: 92,
258+
Line: 5,
259+
Column: 14,
260+
},
236261
},
237262
},
238263
},
@@ -315,6 +340,11 @@ func TestParser_ParseEnum(t *testing.T) {
315340
Line: 3,
316341
Column: 3,
317342
},
343+
LastPos: meta.Position{
344+
Offset: 101,
345+
Line: 3,
346+
Column: 14,
347+
},
318348
},
319349
},
320350
},
@@ -494,6 +524,11 @@ func TestParser_ParseEnum(t *testing.T) {
494524
Line: 2,
495525
Column: 3,
496526
},
527+
LastPos: meta.Position{
528+
Offset: 47,
529+
Line: 2,
530+
Column: 37,
531+
},
497532
},
498533
},
499534
&parser.Reserved{
@@ -507,6 +542,11 @@ func TestParser_ParseEnum(t *testing.T) {
507542
Line: 3,
508543
Column: 3,
509544
},
545+
LastPos: meta.Position{
546+
Offset: 72,
547+
Line: 3,
548+
Column: 24,
549+
},
510550
},
511551
},
512552
},
@@ -595,6 +635,11 @@ func TestParser_ParseEnum(t *testing.T) {
595635
Line: 2,
596636
Column: 3,
597637
},
638+
LastPos: meta.Position{
639+
Offset: 141,
640+
Line: 4,
641+
Column: 16,
642+
},
598643
},
599644
},
600645
},
@@ -632,6 +677,11 @@ func TestParser_ParseEnum(t *testing.T) {
632677
Line: 2,
633678
Column: 3,
634679
},
680+
LastPos: meta.Position{
681+
Offset: 49,
682+
Line: 2,
683+
Column: 25,
684+
},
635685
},
636686
},
637687
&parser.EnumField{
@@ -643,6 +693,11 @@ func TestParser_ParseEnum(t *testing.T) {
643693
Line: 3,
644694
Column: 3,
645695
},
696+
LastPos: meta.Position{
697+
Offset: 70,
698+
Line: 3,
699+
Column: 20,
700+
},
646701
},
647702
},
648703
&parser.EnumField{
@@ -654,6 +709,11 @@ func TestParser_ParseEnum(t *testing.T) {
654709
Line: 4,
655710
Column: 3,
656711
},
712+
LastPos: meta.Position{
713+
Offset: 95,
714+
Line: 4,
715+
Column: 24,
716+
},
657717
},
658718
},
659719
},

parser/extend_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ extend Foo {
4545
Line: 3,
4646
Column: 3,
4747
},
48+
LastPos: meta.Position{
49+
Offset: 31,
50+
Line: 3,
51+
Column: 18,
52+
},
4853
},
4954
},
5055
},
@@ -99,6 +104,11 @@ extend google.protobuf.MethodOptions {
99104
Line: 4,
100105
Column: 3,
101106
},
107+
LastPos: meta.Position{
108+
Offset: 85,
109+
Line: 4,
110+
Column: 27,
111+
},
102112
},
103113
},
104114
},

parser/extensions.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ func (e *Extensions) Accept(v Visitor) {
3737
}
3838

3939
// ParseExtensions parses the extensions.
40-
// extensions = "extensions" ranges ";"
40+
//
41+
// extensions = "extensions" ranges ";"
4142
//
4243
// See https://developers.google.com/protocol-buffers/docs/reference/proto2-spec#extensions
4344
func (p *Parser) ParseExtensions() (*Extensions, error) {
@@ -59,6 +60,6 @@ func (p *Parser) ParseExtensions() (*Extensions, error) {
5960

6061
return &Extensions{
6162
Ranges: ranges,
62-
Meta: meta.Meta{Pos: startPos.Position},
63+
Meta: meta.Meta{Pos: startPos.Position, LastPos: p.lex.Pos.Position},
6364
}, nil
6465
}

parser/extensions_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"strings"
66
"testing"
77

8+
"github.com/yoheimuta/go-protoparser/v4/internal/util_test"
89
"github.com/yoheimuta/go-protoparser/v4/lexer"
910
"github.com/yoheimuta/go-protoparser/v4/parser"
1011
"github.com/yoheimuta/go-protoparser/v4/parser/meta"
@@ -47,6 +48,11 @@ func TestParser_ParseExtensions(t *testing.T) {
4748
Line: 1,
4849
Column: 1,
4950
},
51+
LastPos: meta.Position{
52+
Offset: 21,
53+
Line: 1,
54+
Column: 22,
55+
},
5056
},
5157
},
5258
},
@@ -69,6 +75,11 @@ func TestParser_ParseExtensions(t *testing.T) {
6975
Line: 1,
7076
Column: 1,
7177
},
78+
LastPos: meta.Position{
79+
Offset: 23,
80+
Line: 1,
81+
Column: 24,
82+
},
7283
},
7384
},
7485
},
@@ -91,7 +102,7 @@ func TestParser_ParseExtensions(t *testing.T) {
91102
}
92103

93104
if !reflect.DeepEqual(got, test.wantExtensions) {
94-
t.Errorf("got %v, but want %v", got, test.wantExtensions)
105+
t.Errorf("got %v, but want %v", util_test.PrettyFormat(got), util_test.PrettyFormat(test.wantExtensions))
95106
}
96107

97108
if !p.IsEOF() {

parser/field.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,14 @@ func (f *Field) Accept(v Visitor) {
4949
}
5050

5151
// ParseField parses the field.
52-
// field = [ "repeated" ] type fieldName "=" fieldNumber [ "[" fieldOptions "]" ] ";"
53-
// field = [ "required" | "optional" | "repeated" ] type fieldName "=" fieldNumber [ "[" fieldOptions "]" ] ";"
52+
//
53+
// field = [ "repeated" ] type fieldName "=" fieldNumber [ "[" fieldOptions "]" ] ";"
54+
// field = [ "required" | "optional" | "repeated" ] type fieldName "=" fieldNumber [ "[" fieldOptions "]" ] ";"
5455
//
5556
// See
56-
// https://developers.google.com/protocol-buffers/docs/reference/proto3-spec#normal_field
57-
// https://developers.google.com/protocol-buffers/docs/reference/proto2-spec#normal_field
57+
//
58+
// https://developers.google.com/protocol-buffers/docs/reference/proto3-spec#normal_field
59+
// https://developers.google.com/protocol-buffers/docs/reference/proto2-spec#normal_field
5860
func (p *Parser) ParseField() (*Field, error) {
5961
var isRepeated bool
6062
var isRequired bool
@@ -111,7 +113,7 @@ func (p *Parser) ParseField() (*Field, error) {
111113
FieldName: fieldName,
112114
FieldNumber: fieldNumber,
113115
FieldOptions: fieldOptions,
114-
Meta: meta.Meta{Pos: startPos.Position},
116+
Meta: meta.Meta{Pos: startPos.Position, LastPos: p.lex.Pos.Position},
115117
}, nil
116118
}
117119

@@ -204,8 +206,10 @@ var typeConstants = map[string]struct{}{
204206
}
205207

206208
// type = "double" | "float" | "int32" | "int64" | "uint32" | "uint64"
207-
// | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64"
208-
// | "bool" | "string" | "bytes" | messageType | enumType
209+
//
210+
// | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64"
211+
// | "bool" | "string" | "bytes" | messageType | enumType
212+
//
209213
// See https://developers.google.com/protocol-buffers/docs/reference/proto3-spec#fields
210214
func (p *Parser) parseType() (string, scanner.Position, error) {
211215
p.lex.Next()

0 commit comments

Comments
 (0)