Skip to content

Commit 056f1b7

Browse files
committed
parser: improve error message for fn (a Foo<Foo<T>>) baz(){}
1 parent 27d8f23 commit 056f1b7

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

vlib/v/parser/parse_type.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,7 @@ pub fn (mut p Parser) parse_generic_inst_type(name string) ast.Type {
682682
p.error_with_pos('cannot use multi return as generic concrete type', type_pos)
683683
}
684684
if !is_instance && gts.name.len > 1 {
685-
p.error_with_pos('generic struct parameter name needs to be exactly one char',
685+
p.error_with_pos('the parameter type name of a generic struct, must be a single capital letter placeholder name, like T or X, or a non-generic type name like int, string, etc.',
686686
type_pos)
687687
}
688688
bs_name += gts.name

vlib/v/parser/tests/generic_struct_parameter_err.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
vlib/v/parser/tests/generic_struct_parameter_err.vv:10:17: error: generic struct parameter name needs to be exactly one char
1+
vlib/v/parser/tests/generic_struct_parameter_err.vv:10:17: error: the parameter type name of a generic struct, must be a single capital letter placeholder name, like T or X, or a non-generic type name like int, string, etc.
22
8 | struct MyContainer<T> {
33
9 | mut:
44
10 | lst LinkedList<MyNode<T>>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
vlib/v/parser/tests/generic_struct_receiver_nested_generic_err.vv:5:11: error: the parameter type name of a generic struct, must be a single capital letter placeholder name, like T or X, or a non-generic type name like int, string, etc.
2+
3 | }
3+
4 |
4+
5 | fn (a Foo<Foo<T>>) baz() {}
5+
| ~~~~~~
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
struct Foo<T> {
2+
bar T
3+
}
4+
5+
fn (a Foo<Foo<T>>) baz() {}

0 commit comments

Comments
 (0)