From 7693bb9e1d122bea1b0645dcc201c6ed79c910e2 Mon Sep 17 00:00:00 2001 From: Reese Williams Date: Mon, 2 Dec 2019 21:52:04 -0500 Subject: Add long error for E0631 and update ui tests. --- src/librustc_error_codes/error_codes/E0631.md | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/librustc_error_codes/error_codes/E0631.md (limited to 'src/librustc_error_codes/error_codes') diff --git a/src/librustc_error_codes/error_codes/E0631.md b/src/librustc_error_codes/error_codes/E0631.md new file mode 100644 index 00000000000..ad419f82250 --- /dev/null +++ b/src/librustc_error_codes/error_codes/E0631.md @@ -0,0 +1,29 @@ +This error indicates a type mismatch in closure arguments. + +Erroneous code example: + +```compile_fail,E0631 +fn test_strings(string_vec: Vec) -> Vec { + string_vec + .iter() + .map(|arg: &i32| arg.eq("Test String")) + .collect() +} +``` + +The closure passed to `map` expects a `&String` argument, since `some_vec` +has the type `Vec`. +However, the closure argument is annotated as an `&i32`, which does not match +the type of the iterable. + +This can be resolved by changing the type annotation or removing it entirely +if it can be inferred. + +``` +fn test_strings(string_vec: Vec) -> Vec { + string_vec + .iter() + .map(|arg| arg.eq("Test String")) + .collect() +} +``` -- cgit 1.4.1-3-g733a5 From 26a1ba85b890cdf7bbb7066c3a18aab84aef171f Mon Sep 17 00:00:00 2001 From: Reese Williams Date: Tue, 3 Dec 2019 07:51:11 -0500 Subject: Use simpler code example for E0631 long error. --- src/librustc_error_codes/error_codes/E0631.md | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'src/librustc_error_codes/error_codes') diff --git a/src/librustc_error_codes/error_codes/E0631.md b/src/librustc_error_codes/error_codes/E0631.md index ad419f82250..6188d5f61a7 100644 --- a/src/librustc_error_codes/error_codes/E0631.md +++ b/src/librustc_error_codes/error_codes/E0631.md @@ -3,27 +3,25 @@ This error indicates a type mismatch in closure arguments. Erroneous code example: ```compile_fail,E0631 -fn test_strings(string_vec: Vec) -> Vec { - string_vec - .iter() - .map(|arg: &i32| arg.eq("Test String")) - .collect() +fn foo(f: F) { +} + +fn main() { + foo(|x: &str| {}); } ``` -The closure passed to `map` expects a `&String` argument, since `some_vec` -has the type `Vec`. -However, the closure argument is annotated as an `&i32`, which does not match -the type of the iterable. +The error occurs because `foo` accepts a closure that takes an `i32` argument, +but in `main`, it is passed a closure with a `&str` argument. This can be resolved by changing the type annotation or removing it entirely if it can be inferred. ``` -fn test_strings(string_vec: Vec) -> Vec { - string_vec - .iter() - .map(|arg| arg.eq("Test String")) - .collect() +fn foo(f: F) { +} + +fn main() { + foo(|x: i32| {}); } ``` -- cgit 1.4.1-3-g733a5