From cc637e5ee8f779a429ff71f4c89a742668befee0 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Tue, 29 Mar 2022 23:51:02 +0300 Subject: [PATCH] checker: make the misssing shared/mut modifer in fn and method calls error clearer --- vlib/v/checker/fn.v | 8 ++++---- vlib/v/checker/tests/chan_args.out | 2 +- vlib/v/checker/tests/mut_arg.out | 12 ++++++------ vlib/v/checker/tests/mut_interface_param_err.out | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index 2f8f3ac33..8f3ed07b7 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -812,8 +812,8 @@ pub fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) } else { if param.is_mut { tok := call_arg.share.str() - c.error('`$node.name` parameter `$param.name` is `$tok`, you need to provide `$tok` e.g. `$tok arg${ - i + 1}`', call_arg.expr.pos()) + c.error('function `$node.name` parameter `$param.name` is `$tok`, so use `$tok $call_arg.expr` instead', + call_arg.expr.pos()) } else { c.fail_if_unreadable(call_arg.expr, typ, 'argument') } @@ -1307,8 +1307,8 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { } else { if param_is_mut { tok := arg.share.str() - c.error('`$node.name` parameter `$param.name` is `$tok`, you need to provide `$tok` e.g. `$tok arg${ - i + 1}`', arg.expr.pos()) + c.error('method `$node.name` parameter `$param.name` is `$tok`, so use `$tok $arg.expr` instead', + arg.expr.pos()) } else { c.fail_if_unreadable(arg.expr, got_arg_typ, 'argument') } diff --git a/vlib/v/checker/tests/chan_args.out b/vlib/v/checker/tests/chan_args.out index 605bcfe79..7941e23a5 100644 --- a/vlib/v/checker/tests/chan_args.out +++ b/vlib/v/checker/tests/chan_args.out @@ -12,7 +12,7 @@ vlib/v/checker/tests/chan_args.vv:5:19: error: cannot use `float literal` as `&f | ~~~ 6 | b := 2.5 7 | _ := ch.try_pop(b) -vlib/v/checker/tests/chan_args.vv:7:18: error: `try_pop` parameter `obj` is `mut`, you need to provide `mut` e.g. `mut arg1` +vlib/v/checker/tests/chan_args.vv:7:18: error: method `try_pop` parameter `obj` is `mut`, so use `mut b` instead 5 | _ := ch.try_push(2.5) 6 | b := 2.5 7 | _ := ch.try_pop(b) diff --git a/vlib/v/checker/tests/mut_arg.out b/vlib/v/checker/tests/mut_arg.out index f18c28594..1a546ff0a 100644 --- a/vlib/v/checker/tests/mut_arg.out +++ b/vlib/v/checker/tests/mut_arg.out @@ -1,25 +1,25 @@ -vlib/v/checker/tests/mut_arg.vv:6:3: error: `f` parameter `par` is `mut`, you need to provide `mut` e.g. `mut arg1` +vlib/v/checker/tests/mut_arg.vv:6:3: error: function `f` parameter `par` is `mut`, so use `mut [3, 4]` instead 4 | } - 5 | + 5 | 6 | f([3,4]) | ~~~~~ 7 | mut a := [1,2] 8 | f(a) -vlib/v/checker/tests/mut_arg.vv:8:3: error: `f` parameter `par` is `mut`, you need to provide `mut` e.g. `mut arg1` +vlib/v/checker/tests/mut_arg.vv:8:3: error: function `f` parameter `par` is `mut`, so use `mut a` instead 6 | f([3,4]) 7 | mut a := [1,2] 8 | f(a) | ^ - 9 | + 9 | 10 | g(mut [3,4]) vlib/v/checker/tests/mut_arg.vv:10:7: error: array literal can not be modified 8 | f(a) - 9 | + 9 | 10 | g(mut [3,4]) | ~~~~~ 11 | g(mut a) vlib/v/checker/tests/mut_arg.vv:11:7: error: `g` parameter `par` is not `mut`, `mut` is not needed` - 9 | + 9 | 10 | g(mut [3,4]) 11 | g(mut a) | ^ diff --git a/vlib/v/checker/tests/mut_interface_param_err.out b/vlib/v/checker/tests/mut_interface_param_err.out index b2e62565f..2257a8198 100644 --- a/vlib/v/checker/tests/mut_interface_param_err.out +++ b/vlib/v/checker/tests/mut_interface_param_err.out @@ -1,4 +1,4 @@ -vlib/v/checker/tests/mut_interface_param_err.vv:19:10: error: `add` parameter `widget` is `mut`, you need to provide `mut` e.g. `mut arg1` +vlib/v/checker/tests/mut_interface_param_err.vv:19:10: error: method `add` parameter `widget` is `mut`, so use `mut btn` instead 17 | mut win := Window{} 18 | mut btn := Button{} 19 | win.add(btn) // should be an error here -- 2.39.5