Skip to content

Commit 15c62bc

Browse files
authored
parser: improve error messages of 'for val in array' (#14459)
1 parent 25812e5 commit 15c62bc

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

vlib/v/parser/for.v

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ fn (mut p Parser) for_stmt() ast.Stmt {
125125
is_stack_obj: true
126126
})
127127
} else if p.scope.known_var(val_var_name) {
128-
return p.error('redefinition of value iteration variable `$val_var_name`')
128+
return p.error_with_pos('redefinition of value iteration variable `$val_var_name`, use `for ($val_var_name in array) {` if you want to check for a condition instead',
129+
val_var_pos)
129130
}
130131
p.check(.key_in)
131132
if p.tok.kind == .name && p.tok.lit in [key_var_name, val_var_name] {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
vlib/v/parser/tests/for_val_in_array_err.vv:5:6: error: redefinition of value iteration variable `val`, use `for (val in array) {` if you want to check for a condition instead
2+
3 | fn main() {
3+
4 | val := `+`
4+
5 | for val in [TokenValue(`+`), TokenValue(`-`)] {
5+
| ~~~
6+
6 | println("ok")
7+
7 | break
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
type TokenValue = rune | u64
2+
3+
fn main() {
4+
val := `+`
5+
for val in [TokenValue(`+`), TokenValue(`-`)] {
6+
println("ok")
7+
break
8+
}
9+
}

0 commit comments

Comments
 (0)