Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
add_type_neq_err_label: don't .unwrap
  • Loading branch information
Centril committed Apr 3, 2020
1 parent 537ccdf commit 9c08269
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 18 deletions.
32 changes: 14 additions & 18 deletions src/librustc_typeck/check/op.rs
Expand Up @@ -481,7 +481,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
}

/// If one of the types is an uncalled function and calling it would yield the other type,
/// suggest calling the function. Returns whether a suggestion was given.
/// suggest calling the function. Returns `true` if suggestion would apply (even if not given).
fn add_type_neq_err_label(
&self,
err: &mut rustc_errors::DiagnosticBuilder<'_>,
Expand Down Expand Up @@ -514,24 +514,20 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
.lookup_op_method(fn_sig.output(), &[other_ty], Op::Binary(op, is_assign))
.is_ok()
{
let (variable_snippet, applicability) = if !fn_sig.inputs().is_empty() {
(
format!("{}( /* arguments */ )", source_map.span_to_snippet(span).unwrap()),
Applicability::HasPlaceholders,
)
} else {
(
format!("{}()", source_map.span_to_snippet(span).unwrap()),
Applicability::MaybeIncorrect,
)
};
if let Ok(snippet) = source_map.span_to_snippet(span) {
let (variable_snippet, applicability) = if !fn_sig.inputs().is_empty() {
(format!("{}( /* arguments */ )", snippet), Applicability::HasPlaceholders)
} else {
(format!("{}()", snippet), Applicability::MaybeIncorrect)
};

err.span_suggestion(
span,
"you might have forgotten to call this function",
variable_snippet,
applicability,
);
err.span_suggestion(
span,
"you might have forgotten to call this function",
variable_snippet,
applicability,
);
}
return true;
}
}
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/issues/issue-70724-add_type_neq_err_label-unwrap.rs
@@ -0,0 +1,10 @@
fn a() -> i32 {
3
}

pub fn main() {
assert_eq!(a, 0);
//~^ ERROR binary operation `==` cannot
//~| ERROR mismatched types
//~| ERROR doesn't implement
}
@@ -0,0 +1,41 @@
error[E0369]: binary operation `==` cannot be applied to type `fn() -> i32 {a}`
--> $DIR/issue-70724-add_type_neq_err_label-unwrap.rs:6:5
|
LL | assert_eq!(a, 0);
| ^^^^^^^^^^^^^^^^^
| |
| fn() -> i32 {a}
| {integer}
| help: you might have forgotten to call this function: `*left_val()`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
--> $DIR/issue-70724-add_type_neq_err_label-unwrap.rs:6:5
|
LL | assert_eq!(a, 0);
| ^^^^^^^^^^^^^^^^^ expected fn item, found integer
|
= note: expected fn item `fn() -> i32 {a}`
found type `i32`
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0277]: `fn() -> i32 {a}` doesn't implement `std::fmt::Debug`
--> $DIR/issue-70724-add_type_neq_err_label-unwrap.rs:6:5
|
LL | fn a() -> i32 {
| - consider calling this function
...
LL | assert_eq!(a, 0);
| ^^^^^^^^^^^^^^^^^ `fn() -> i32 {a}` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
|
= help: the trait `std::fmt::Debug` is not implemented for `fn() -> i32 {a}`
= help: use parentheses to call the function: `a()`
= note: required because of the requirements on the impl of `std::fmt::Debug` for `&fn() -> i32 {a}`
= note: required by `std::fmt::Debug::fmt`
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to 3 previous errors

Some errors have detailed explanations: E0277, E0308, E0369.
For more information about an error, try `rustc --explain E0277`.

0 comments on commit 9c08269

Please sign in to comment.