From b276aaccf9bfd31c48e06dda29ad38fd4bdcdcb2 Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Wed, 13 Mar 2024 17:51:57 +0530 Subject: [PATCH] checker: disallow void return value lambdas in array.map method calls (#21011) --- vlib/v/checker/fn.v | 7 +++++++ vlib/v/checker/tests/map_lambda_void_return_err.out | 4 ++++ vlib/v/checker/tests/map_lambda_void_return_err.vv | 2 ++ 3 files changed, 13 insertions(+) create mode 100644 vlib/v/checker/tests/map_lambda_void_return_err.out create mode 100644 vlib/v/checker/tests/map_lambda_void_return_err.vv diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index a18237f6e1..9f54923481 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -2739,6 +2739,13 @@ fn (mut c Checker) check_map_and_filter(is_map bool, elem_typ ast.Type, node ast c.error('array append cannot be used in an expression', arg_expr.pos) } } + ast.LambdaExpr { + if arg_expr.expr is ast.CallExpr && is_map + && arg_expr.expr.return_type in [ast.void_type, 0] { + c.error('type mismatch, `${arg_expr.expr.name}` does not return anything', + arg_expr.expr.pos) + } + } else {} } } diff --git a/vlib/v/checker/tests/map_lambda_void_return_err.out b/vlib/v/checker/tests/map_lambda_void_return_err.out new file mode 100644 index 0000000000..51aab2a82f --- /dev/null +++ b/vlib/v/checker/tests/map_lambda_void_return_err.out @@ -0,0 +1,4 @@ +vlib/v/checker/tests/map_lambda_void_return_err.vv:2:13: error: type mismatch, `println` does not return anything + 1 | arr := ['a', 'b', 'c'] + 2 | arr.map(|x| println(x)) + | ~~~~~~~~~~ diff --git a/vlib/v/checker/tests/map_lambda_void_return_err.vv b/vlib/v/checker/tests/map_lambda_void_return_err.vv new file mode 100644 index 0000000000..4c24aa33c9 --- /dev/null +++ b/vlib/v/checker/tests/map_lambda_void_return_err.vv @@ -0,0 +1,2 @@ +arr := ['a', 'b', 'c'] +arr.map(|x| println(x))