From 51bdec18b085b338a18256ae06692e2d200abdf3 Mon Sep 17 00:00:00 2001 From: Jaemin Moon Date: Mon, 28 Oct 2013 17:18:11 +0900 Subject: [PATCH 1/2] Show the name of the trait in the error message --- src/librustc/middle/typeck/check/mod.rs | 12 +++++++----- .../compile-fail/trait-impl-different-num-params.rs | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index f567a880db527..e0aa7760c5e70 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -863,11 +863,13 @@ pub fn compare_impl_method(tcx: ty::ctxt, if impl_m.fty.sig.inputs.len() != trait_m.fty.sig.inputs.len() { tcx.sess.span_err( impl_m_span, - format!("method `{}` has {} parameter(s) \ - but the trait has {} parameter(s)", - tcx.sess.str_of(trait_m.ident), - impl_m.fty.sig.inputs.len(), - trait_m.fty.sig.inputs.len())); + format!("method `{}` has {} parameter{} \ + but the trait method `{}` has {}", + tcx.sess.str_of(trait_m.ident), + impl_m.fty.sig.inputs.len(), + if impl_m.fty.sig.inputs.len() == 1 { "" } else { "s" }, + ty::item_path_str(tcx, trait_m.def_id), + trait_m.fty.sig.inputs.len())); return; } diff --git a/src/test/compile-fail/trait-impl-different-num-params.rs b/src/test/compile-fail/trait-impl-different-num-params.rs index 940c1b3a237b8..1d13bcf6b21d4 100644 --- a/src/test/compile-fail/trait-impl-different-num-params.rs +++ b/src/test/compile-fail/trait-impl-different-num-params.rs @@ -13,7 +13,7 @@ trait foo { } impl foo for int { fn bar(&self) -> int { - //~^ ERROR method `bar` has 0 parameter(s) but the trait has 1 + //~^ ERROR method `bar` has 0 parameters but the trait method `foo::bar` has 1 *self } } From ab9e3a6652a03d6e7d4b6b9c02228174cc5ddab0 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Fri, 15 Nov 2013 23:57:12 -0500 Subject: [PATCH 2/2] Adjust error message for method type mismatch Closes #10118, Closes #5925 --- src/librustc/middle/typeck/check/mod.rs | 2 +- src/test/compile-fail/trait-impl-different-num-params.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index e0aa7760c5e70..e46b92ae49537 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -864,7 +864,7 @@ pub fn compare_impl_method(tcx: ty::ctxt, tcx.sess.span_err( impl_m_span, format!("method `{}` has {} parameter{} \ - but the trait method `{}` has {}", + but the declaration in trait `{}` has {}", tcx.sess.str_of(trait_m.ident), impl_m.fty.sig.inputs.len(), if impl_m.fty.sig.inputs.len() == 1 { "" } else { "s" }, diff --git a/src/test/compile-fail/trait-impl-different-num-params.rs b/src/test/compile-fail/trait-impl-different-num-params.rs index 1d13bcf6b21d4..f293644840a1c 100644 --- a/src/test/compile-fail/trait-impl-different-num-params.rs +++ b/src/test/compile-fail/trait-impl-different-num-params.rs @@ -13,7 +13,7 @@ trait foo { } impl foo for int { fn bar(&self) -> int { - //~^ ERROR method `bar` has 0 parameters but the trait method `foo::bar` has 1 + //~^ ERROR method `bar` has 0 parameters but the declaration in trait `foo::bar` has 1 *self } }