about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2016-08-30 10:39:08 +0200
committerGitHub <noreply@github.com>2016-08-30 10:39:08 +0200
commit9a3cfe91291c78c8c1e3fc75e274693b523dece6 (patch)
tree432620c658bf420428f46aefaa2a964f44eae618
parenteb3304444951f6480a0e014ae57cc47eb61b1239 (diff)
parent01083baec26591a0b48752b3003fd73f4e07631e (diff)
downloadrust-9a3cfe91291c78c8c1e3fc75e274693b523dece6.tar.gz
rust-9a3cfe91291c78c8c1e3fc75e274693b523dece6.zip
Rollup merge of #36103 - zjhmale:fix-E0089, r=jonathandturner
Update E0089 to new error format

Fixes #35227.
Part of #35233.

r? @jonathandturner
-rw-r--r--src/librustc_typeck/check/mod.rs20
-rw-r--r--src/test/compile-fail/E0089.rs4
2 files changed, 15 insertions, 9 deletions
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs
index fb24971c425..a8463833099 100644
--- a/src/librustc_typeck/check/mod.rs
+++ b/src/librustc_typeck/check/mod.rs
@@ -4427,14 +4427,18 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
             // use inference variables instead of the provided types.
             *segment = None;
         } else if !(can_omit && types.len() == 0) && types.len() < required_len {
-            let qualifier =
-                if type_defs.len() != required_len { "at least " } else { "" };
-            span_err!(self.tcx.sess, span, E0089,
-                      "too few type parameters provided: \
-                       expected {}{}, found {}",
-                      qualifier,
-                      count(required_len),
-                      count(types.len()));
+            let adjust = |len| if len > 1 { "parameters" } else { "parameter" };
+            let required_param_str = adjust(required_len);
+            let actual_param_str = adjust(types.len());
+            struct_span_err!(self.tcx.sess, span, E0089,
+                             "too few type parameters provided: \
+                              expected {} {}, found {} {}",
+                             count(required_len),
+                             required_param_str,
+                             count(types.len()),
+                             actual_param_str)
+                .span_label(span, &format!("expected {} type {}", required_len, required_param_str))
+                .emit();
         }
 
         if !bindings.is_empty() {
diff --git a/src/test/compile-fail/E0089.rs b/src/test/compile-fail/E0089.rs
index 3b52f76bf09..9ce36523709 100644
--- a/src/test/compile-fail/E0089.rs
+++ b/src/test/compile-fail/E0089.rs
@@ -11,5 +11,7 @@
 fn foo<T, U>() {}
 
 fn main() {
-    foo::<f64>(); //~ ERROR E0089
+    foo::<f64>();
+//~^ ERROR E0089
+//~| NOTE expected 2 type parameters
 }