mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
parser: improve precision of struct field type positions in errors
This commit is contained in:
parent
5b4a16e864
commit
de5ae63401
@ -1,7 +1,7 @@
|
||||
vlib/v/checker/tests/generics_interface_field_type_err.vv:34:18: error: `IComponentStore` type is generic interface, must specify the generic type names, e.g. IComponentStore[T], IComponentStore[int]
|
||||
vlib/v/checker/tests/generics_interface_field_type_err.vv:34:7: error: `IComponentStore` type is generic interface, must specify the generic type names, e.g. IComponentStore[T], IComponentStore[int]
|
||||
32 | struct Registry {
|
||||
33 | pub mut:
|
||||
34 | data map[string]IComponentStore
|
||||
| ~~~~~~~~~~~~~~~
|
||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
35 | }
|
||||
36 |
|
||||
|
@ -1,7 +1,7 @@
|
||||
vlib/v/checker/tests/generics_struct_field_type_err.vv:4:9: error: `LL` type is generic struct, must specify the generic type names, e.g. LL[T], LL[int]
|
||||
vlib/v/checker/tests/generics_struct_field_type_err.vv:4:8: error: `LL` type is generic struct, must specify the generic type names, e.g. LL[T], LL[int]
|
||||
2 | mut:
|
||||
3 | value T
|
||||
4 | next &LL = unsafe { 0 }
|
||||
| ~~
|
||||
| ~~~
|
||||
5 | }
|
||||
6 |
|
||||
|
@ -1,5 +1,5 @@
|
||||
vlib/v/checker/tests/map_unknown_value.vv:2:23: error: unknown type `DoesNotExist`
|
||||
vlib/v/checker/tests/map_unknown_value.vv:2:12: error: unknown type `DoesNotExist`
|
||||
1 | struct App {
|
||||
2 | my_map map[string]DoesNotExist
|
||||
| ~~~~~~~~~~~~
|
||||
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||
3 | }
|
||||
|
@ -1,7 +1,7 @@
|
||||
vlib/v/checker/tests/struct_field_generic_struct_unknown_type_err.vv:9:24: error: unknown type `UnknownType`
|
||||
vlib/v/checker/tests/struct_field_generic_struct_unknown_type_err.vv:9:7: error: unknown type `UnknownType`
|
||||
7 | }
|
||||
8 | struct MyType {
|
||||
9 | a Maybe[UnknownType]
|
||||
| ^
|
||||
| ~~~~~~~~~~~~~~~~~~
|
||||
10 | }
|
||||
11 |
|
||||
|
@ -1,6 +1,6 @@
|
||||
vlib/v/checker/tests/struct_multi_return_field_err.vv:2:16: error: cannot use multi return as field type
|
||||
1 | struct Tuple{
|
||||
2 | data (int, int)
|
||||
| ^
|
||||
3 | }
|
||||
4 |
|
||||
vlib/v/checker/tests/struct_multi_return_field_err.vv:2:7: error: cannot use multi return as field type
|
||||
1 | struct Tuple{
|
||||
2 | data (int, int)
|
||||
| ~~~~~~~~~~
|
||||
3 | }
|
||||
4 |
|
||||
|
@ -1,7 +1,7 @@
|
||||
vlib/v/checker/tests/unknown_array_element_type_b.vv:2:6: error: unknown type `abc`.
|
||||
vlib/v/checker/tests/unknown_array_element_type_b.vv:2:4: error: unknown type `abc`.
|
||||
Did you mean `Aaa`?
|
||||
1 | struct Aaa {
|
||||
2 | a []abc
|
||||
| ~~~
|
||||
| ~~~~~
|
||||
3 | }
|
||||
4 |
|
||||
|
@ -1,9 +1,9 @@
|
||||
vlib/v/checker/tests/unknown_method_suggest_name.vv:13:12: error: unknown type `hash.crc32.Crc33`.
|
||||
vlib/v/checker/tests/unknown_method_suggest_name.vv:13:6: error: unknown type `hash.crc32.Crc33`.
|
||||
Did you mean `crc32.Crc32`?
|
||||
11 | y int
|
||||
12 | z int
|
||||
13 | ccc crc32.Crc33
|
||||
| ~~~~~
|
||||
| ~~~~~~~~~~~
|
||||
14 | }
|
||||
15 |
|
||||
vlib/v/checker/tests/unknown_method_suggest_name.vv:27:9: error: unknown method or field: `Point.tranzlate`.
|
||||
|
@ -252,15 +252,16 @@ fn (mut p Parser) struct_decl(is_anon bool) ast.StructDecl {
|
||||
typ = p.table.find_type_idx(anon_struct_decl.name)
|
||||
}
|
||||
} else {
|
||||
start_type_pos := p.tok.pos()
|
||||
typ = p.parse_type()
|
||||
type_pos = start_type_pos.extend(p.prev_tok.pos())
|
||||
}
|
||||
p.inside_struct_field_decl = false
|
||||
if typ.idx() == 0 {
|
||||
// error is set in parse_type
|
||||
return ast.StructDecl{}
|
||||
}
|
||||
type_pos = p.prev_tok.pos()
|
||||
field_pos = field_start_pos.extend(type_pos)
|
||||
field_pos = field_start_pos.extend(p.prev_tok.pos())
|
||||
if typ.has_flag(.optional) || typ.has_flag(.result) {
|
||||
optional_pos = p.peek_token(-2).pos()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user