checker: check argument mismatch of array.filter/all/any() (#14273)
parent
0669e5952b
commit
f9c4cbdb15
|
@ -1778,6 +1778,11 @@ fn (mut c Checker) check_map_and_filter(is_map bool, elem_typ ast.Type, node ast
|
|||
c.error('type mismatch, `$arg_expr.name` must return a bool', arg_expr.pos)
|
||||
}
|
||||
}
|
||||
ast.StringLiteral, ast.StringInterLiteral {
|
||||
if !is_map {
|
||||
c.error('type mismatch, should use e.g. `${node.name}(it > 2)`', arg_expr.pos)
|
||||
}
|
||||
}
|
||||
else {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
vlib/v/checker/tests/array_filter_arg_mismatch_err.vv:17:20: error: type mismatch, should use e.g. `filter(it > 2)`
|
||||
15 | }]
|
||||
16 |
|
||||
17 | a1 := list.filter('it.value > 2')
|
||||
| ~~~~~~~~~~~~~~
|
||||
18 | println(a1)
|
||||
19 |
|
||||
vlib/v/checker/tests/array_filter_arg_mismatch_err.vv:20:17: error: type mismatch, should use e.g. `any(it > 2)`
|
||||
18 | println(a1)
|
||||
19 |
|
||||
20 | a2 := list.any('it.value > 2')
|
||||
| ~~~~~~~~~~~~~~
|
||||
21 | println(a2)
|
||||
22 |
|
||||
vlib/v/checker/tests/array_filter_arg_mismatch_err.vv:23:17: error: type mismatch, should use e.g. `all(it > 2)`
|
||||
21 | println(a2)
|
||||
22 |
|
||||
23 | a3 := list.all('it.value > 2')
|
||||
| ~~~~~~~~~~~~~~
|
||||
24 | println(a3)
|
||||
25 | }
|
|
@ -0,0 +1,25 @@
|
|||
module main
|
||||
|
||||
pub struct Row {
|
||||
pub mut:
|
||||
value int
|
||||
}
|
||||
|
||||
fn main() {
|
||||
mut list := [Row{
|
||||
value: 1
|
||||
}, Row{
|
||||
value: 2
|
||||
}, Row{
|
||||
value: 3
|
||||
}]
|
||||
|
||||
a1 := list.filter('it.value > 2')
|
||||
println(a1)
|
||||
|
||||
a2 := list.any('it.value > 2')
|
||||
println(a2)
|
||||
|
||||
a3 := list.all('it.value > 2')
|
||||
println(a3)
|
||||
}
|
Loading…
Reference in New Issue