Skip to content

Commit 6b8a2fd

Browse files
authored
Merge pull request #32 from yoheimuta/rpc-block-followed-by-semicolon
fix: Allow a block followed by semicolon for RPC
2 parents ba7aaf0 + c0241e1 commit 6b8a2fd

File tree

3 files changed

+50
-4
lines changed

3 files changed

+50
-4
lines changed

_testdata/simple.proto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,6 @@ message outer {
1919
EnumAllowingAlias enum_field =3;
2020
map<int32, string> my_map = 4;
2121
}
22+
service HelloService {
23+
rpc SayHello (HelloRequest) returns (HelloResponse) {};
24+
}

parser/service.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@ func (p *Parser) parseRPC() (*RPC, error) {
237237
if err != nil {
238238
return nil, err
239239
}
240+
if p.permissive {
241+
// accept a block followed by semicolon. See https://github.com/yoheimuta/go-protoparser/issues/30.
242+
p.lex.ConsumeToken(scanner.TSEMICOLON)
243+
}
240244
case scanner.TSEMICOLON:
241245
break
242246
default:

parser/service_test.go

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -595,21 +595,60 @@ service SearchService {
595595
{
596596
name: "parsing a block followed by semicolon",
597597
input: `
598-
service SearchService {};
598+
service SearchService {
599+
rpc Search (SearchRequest) returns (SearchResponse) {};
600+
};
599601
`,
600602
permissive: true,
601603
wantService: &parser.Service{
602604
ServiceName: "SearchService",
605+
ServiceBody: []parser.Visitee{
606+
&parser.RPC{
607+
RPCName: "Search",
608+
RPCRequest: &parser.RPCRequest{
609+
MessageType: "SearchRequest",
610+
Meta: meta.Meta{
611+
Pos: meta.Position{
612+
Offset: 38,
613+
Line: 3,
614+
Column: 14,
615+
},
616+
},
617+
},
618+
RPCResponse: &parser.RPCResponse{
619+
MessageType: "SearchResponse",
620+
Meta: meta.Meta{
621+
Pos: meta.Position{
622+
Offset: 62,
623+
Line: 3,
624+
Column: 38,
625+
},
626+
},
627+
},
628+
Meta: meta.Meta{
629+
Pos: meta.Position{
630+
Offset: 27,
631+
Line: 3,
632+
Column: 3,
633+
},
634+
LastPos: meta.Position{
635+
Offset: 81,
636+
Line: 3,
637+
Column: 57,
638+
},
639+
},
640+
},
641+
},
603642
Meta: meta.Meta{
604643
Pos: meta.Position{
605644
Offset: 1,
606645
Line: 2,
607646
Column: 1,
608647
},
609648
LastPos: meta.Position{
610-
Offset: 24,
611-
Line: 2,
612-
Column: 24,
649+
Offset: 83,
650+
Line: 4,
651+
Column: 1,
613652
},
614653
},
615654
},

0 commit comments

Comments
 (0)