checker: add a suggestion for misspelled mod.const_name + a test

Delyan Angelov 2022-05-16 10:29:38 +03:00 committed by Jef Roosens
parent baf72a7459
commit ff02e5667b
Signed by: Jef Roosens
GPG Key ID: B75D4F293C7052DB
3 changed files with 24 additions and 1 deletions

View File

@ -3395,10 +3395,24 @@ pub fn (mut c Checker) ident(mut node ast.Ident) ast.Type {
if c.inside_ct_attr {
c.note('`[if $node.name]` is deprecated. Use `[if $node.name?]` instead',
node.pos)
} else {
cname_mod := node.name.all_before('.')
if cname_mod.len != node.name.len {
mut const_names_in_mod := []string{}
for _, so in c.table.global_scope.objects {
if so is ast.ConstField {
if so.mod == cname_mod {
const_names_in_mod << so.name
}
}
}
c.error(util.new_suggestion(node.name, const_names_in_mod).say('undefined ident: `$node.name`'),
node.pos)
} else {
c.error('undefined ident: `$node.name`', node.pos)
}
}
}
if c.table.known_type(node.name) {
// e.g. `User` in `json.decode(User, '...')`
return ast.void_type

View File

@ -0,0 +1,6 @@
vlib/v/checker/tests/misspelled_mod_const_should_have_suggestion.vv:3:21: error: undefined ident: `time.secondz`.
Did you mean `time.second`?
1 | import time
2 |
3 | time.sleep(1 * time.secondz)
| ~~~~~~~

View File

@ -0,0 +1,3 @@
import time
time.sleep(1 * time.secondz)