Skip to content

Commit

Permalink
Reorder type mismatch suggestions
Browse files Browse the repository at this point in the history
Suggestions are reordered to to make sure potential missing expect on Option/Result runs
before the suggestion to remove the last method call
  • Loading branch information
3tilley committed Nov 8, 2023
1 parent d1611e3 commit ac19d49
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 2 deletions.
4 changes: 2 additions & 2 deletions compiler/rustc_hir_typeck/src/demand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {

// Use `||` to give these suggestions a precedence
let suggested = self.suggest_missing_parentheses(err, expr)
|| self.suggest_missing_unwrap_expect(err, expr, expected, expr_ty)
|| self.suggest_remove_last_method_call(err, expr, expected)
|| self.suggest_associated_const(err, expr, expected)
|| self.suggest_deref_ref_or_into(err, expr, expected, expr_ty, expected_ty_expr)
Expand All @@ -58,8 +59,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|| self.suggest_into(err, expr, expr_ty, expected)
|| self.suggest_floating_point_literal(err, expr, expected)
|| self.suggest_null_ptr_for_literal_zero_given_to_ptr_arg(err, expr, expected)
|| self.suggest_coercing_result_via_try_operator(err, expr, expected, expr_ty)
|| self.suggest_missing_unwrap_expect(err, expr, expected, expr_ty);
|| self.suggest_coercing_result_via_try_operator(err, expr, expected, expr_ty);

if !suggested {
self.note_source_of_type_mismatch_constraint(
Expand Down
3 changes: 3 additions & 0 deletions tests/ui/suggestions/issue-117669.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
fn main() {
let abs: i32 = 3i32.checked_abs();
}
17 changes: 17 additions & 0 deletions tests/ui/suggestions/issue-117669.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
error[E0308]: mismatched types
--> $DIR/issue-177699.rs:2:20
|
2 | let abs: i32 = 3i32.checked_abs();
| --- ^^^^^^^^^^^^^^^^^^ expected `i32`, found `Option<i32>`
| |
| expected due to this
|
= note: expected type `i32`
found enum `Option<i32>`
help: consider using `Option::expect` to unwrap the `Option<i32>` value, panicking if the value is an `Option::None`
|
2 | let abs: i32 = 3i32.checked_abs().expect("REASON");
| +++++++++++++++++

For more information about this error, try `rustc --explain E0308`.

0 comments on commit ac19d49

Please sign in to comment.