This code ```rust trait Foo { fn foo(&mut self, x: i32, y: i32) -> i32; } impl Foo for i32 { fn foo( &mut self, x: i32 ) { } } ``` [shows the error](https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=d271dc2dc5cefe103078ca0ac0e4e851) ``` error[E0050]: method `foo` has 2 parameters but the declaration in trait `Foo::foo` has 3 --> src/lib.rs:8:12 | 2 | fn foo(&mut self, x: i32, y: i32) -> i32; | --- trait requires 3 parameters ... 8 | x: i32 | ^^^ expected 3 parameters, found 2 error: aborting due to previous error ``` It is rather odd that it points at the type of the last parameter. In particular when there is just one parameter per line, this span is not helpful. The span should probably encompass all parameters.