Change:
From: src/test/compile- Error E0057 needs a span_label, updating it from: To: Bonus 1: The note seems excessive. Check other E0057 errors. If it is not needed, remove the note. Bonus 2: The span for the error could likely focus on the parameters rather than the whole call.
I'm taking this one.
I think I've got most of this fix/working, but I'm having a problem fixing one of the unit test cases - issue- The other related test cases (issue-, issue-4935, method-call-err-msg, not-enough-arguments, overloaded-calls-bad and variadic-ffi-3) I was able to fix by following your blog guide. For some reason, issue-3044 is 'different' and I don't understand why. Not sure how to proceed...
- can you show the errors you get when you try to get issue-3044 to pass?
I think I fixed the problem. I'm now trying to get my code checked in and pushed to by fork. Having some ssh key/cert issues. I think once I do that, I can do a PR?
I just submitted a PR, but not sure if I did it correctly.
The note of and this one are printed by the same function, can I modify it to print the expected types directly in the label? I also did the bonus2 part for both E0060 and E0061.
Freeing this one up as part of the final push for .
Actually, according to the comments in maybe this is already closed? , can you confirm?
I think should be closed, and progress is under way in .

Discussion:
let mut expected_arg_tys = expected_arg_tys; let expected_arg_count = fn_inputs.len(); <ins> let sp_args = if args.len() > 0 { let (first, args) = args.split_at(1); let mut sp_tmp = first[0].span; for arg in args { let sp_opt = self.sess().codemap().merge_spans(sp_tmp, arg.span); if ! sp_opt.is_some() { break; } sp_tmp = sp_opt.unwrap(); }; sp_tmp } else { sp }; </ins> fn parameter_count_error<'tcx>(sess: &Session, sp: Span, fn_inputs: &[Ty<'tcx>], expected_count: usize, arg_count: usize, error_code: &str, variadic: bool) {

let tuple_type = self.structurally_resolved_type(sp, fn_inputs[0]); match tuple_type.sty { ty::TyTuple(arg_types) if arg_types.len() != args.len() => { <del> parameter_count_error(tcx.sess, sp, fn_inputs, arg_types.len(), args.len(), </del> <ins> parameter_count_error(tcx.sess, sp_args, fn_inputs, arg_types.len(), args.len(), </ins> "E0057", false); expected_arg_tys = &[]; self.err_args(args.len())

if supplied_arg_count >= expected_arg_count { fn_inputs.to_vec() } else { <del> parameter_count_error(tcx.sess, sp, fn_inputs, expected_arg_count, </del> <ins> parameter_count_error(tcx.sess, sp_args, fn_inputs, expected_arg_count, </ins> supplied_arg_count, "E0060", true); expected_arg_tys = &[]; self.err_args(supplied_arg_count) } } else { <del> parameter_count_error(tcx.sess, sp, fn_inputs, expected_arg_count, supplied_arg_count, "E0061", false); </del> <ins> parameter_count_error(tcx.sess, sp_args, fn_inputs, expected_arg_count, supplied_arg_count, "E0061", false); </ins> expected_arg_tys = &[]; self.err_args(supplied_arg_count) };

<ins> // Copyright 2016 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. fn main() { let f = |x| x * 3; let a = f(); //~ ERROR E0057 let b = f(4); let c = f(2, 3); //~ ERROR E0057 } </ins>

<ins> error[E0057]: this function takes 1 parameter but 0 parameters were supplied --> $DIR/E0057.rs:13:13 | 13 |     let a = f(); //~ ERROR E0057 |             ^^^ | = note: the following parameter type was expected: (_,) error[E0057]: this function takes 1 parameter but 2 parameters were supplied --> $DIR/E0057.rs:15:15 | 15 |     let c = f(2, 3); //~ ERROR E0057 |               ^^^^ | = note: the following parameter type was expected: (_,) error: aborting due to 2 previous errors </ins>