diff --git a/vlib/v/checker/assign.v b/vlib/v/checker/assign.v index c0c980a8ab8294..e5fdc797770540 100644 --- a/vlib/v/checker/assign.v +++ b/vlib/v/checker/assign.v @@ -80,10 +80,18 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { c.error('assignment mismatch: ${node.left.len} variable(s) but `${right_first.name}()` returns ${right_len} value(s)', node.pos) } else if right_first is ast.ParExpr { - if right_first.expr is ast.CallExpr { - if right_first.expr.return_type == ast.void_type { - c.error('assignment mismatch: expected ${node.left.len} value(s) but `${right_first.expr.name}()` returns ${right_len} value(s)', - node.pos) + mut right_next := right_first + for { + if right_next.expr is ast.CallExpr { + if (right_next.expr as ast.CallExpr).return_type == ast.void_type { + c.error('assignment mismatch: expected ${node.left.len} value(s) but `${(right_next.expr as ast.CallExpr).name}()` returns ${right_len} value(s)', + node.pos) + } + break + } else if right_next.expr is ast.ParExpr { + right_next = right_next.expr as ast.ParExpr + } else { + break } } } else { diff --git a/vlib/v/checker/tests/par_expr_assign_void_right_type_err.out b/vlib/v/checker/tests/par_expr_assign_void_right_type_err.out index 7e4d140b8393dd..4945afaf0f81b5 100644 --- a/vlib/v/checker/tests/par_expr_assign_void_right_type_err.out +++ b/vlib/v/checker/tests/par_expr_assign_void_right_type_err.out @@ -1,3 +1,12 @@ +vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv:1:6: warning: redundant parentheses are used + 1 | _ := ((((print(10))))) + | ~~~~~~~~~~~~~~~~~ +vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv:1:7: warning: redundant parentheses are used + 1 | _ := ((((print(10))))) + | ~~~~~~~~~~~~~~~ +vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv:1:8: warning: redundant parentheses are used + 1 | _ := ((((print(10))))) + | ~~~~~~~~~~~~~ vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv:1:3: error: assignment mismatch: expected 1 value(s) but `print()` returns 0 value(s) - 1 | _ := (print(10)) + 1 | _ := ((((print(10))))) | ~~ diff --git a/vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv b/vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv index 18d271318c5412..cbea74a8663e0f 100644 --- a/vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv +++ b/vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv @@ -1 +1 @@ -_ := (print(10)) +_ := ((((print(10)))))