Skip to content

Commit cd30b6e

Browse files
authored
parser: make sure interface field names use uppercase letters (#14228)
1 parent 08fd0ce commit cd30b6e

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
vlib/v/checker/tests/interface_field_name_err.vv:2:2: error: field name `Age` cannot contain uppercase letters, use snake_case instead
2+
1 | interface Animal {
3+
2 | Age int
4+
| ~~~
5+
3 | Foo &int
6+
4 | Bar []string
7+
vlib/v/checker/tests/interface_field_name_err.vv:3:2: error: field name `Foo` cannot contain uppercase letters, use snake_case instead
8+
1 | interface Animal {
9+
2 | Age int
10+
3 | Foo &int
11+
| ~~~
12+
4 | Bar []string
13+
5 | }
14+
vlib/v/checker/tests/interface_field_name_err.vv:4:2: error: field name `Bar` cannot contain uppercase letters, use snake_case instead
15+
2 | Age int
16+
3 | Foo &int
17+
4 | Bar []string
18+
| ~~~
19+
5 | }
20+
6 |
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
interface Animal {
2+
Age int
3+
Foo &int
4+
Bar []string
5+
}
6+
7+
fn main() {
8+
}

vlib/v/parser/struct.v

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,8 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl {
517517
mut ifaces := []ast.InterfaceEmbedding{}
518518
for p.tok.kind != .rcbr && p.tok.kind != .eof {
519519
if p.tok.kind == .name && p.tok.lit.len > 0 && p.tok.lit[0].is_capital()
520-
&& p.peek_tok.kind != .lpar {
520+
&& (p.peek_tok.line_nr != p.tok.line_nr
521+
|| p.peek_tok.kind !in [.name, .amp, .lsbr, .lpar]) {
521522
iface_pos := p.tok.pos()
522523
mut iface_name := p.tok.lit
523524
iface_type := p.parse_type()

0 commit comments

Comments
 (0)