Do not make typo suggestions when suggesting pattern matching

Fixes #103909.
This commit is contained in:
Deadbeef 2022-11-03 14:35:15 +00:00
parent 160b194295
commit b1994ce806
3 changed files with 43 additions and 2 deletions

View File

@ -322,7 +322,12 @@ pub(crate) fn smart_resolve_report_errors(
}
self.suggest_bare_struct_literal(&mut err);
self.suggest_pattern_match_with_let(&mut err, source, span);
if self.suggest_pattern_match_with_let(&mut err, source, span) {
// Fallback label.
err.span_label(base_error.span, &base_error.fallback_label);
return (err, Vec::new());
}
self.suggest_self_or_self_ref(&mut err, path, span);
self.detect_assoct_type_constraint_meant_as_path(&mut err, &base_error);
@ -341,7 +346,11 @@ pub(crate) fn smart_resolve_report_errors(
if !self.type_ascription_suggestion(&mut err, base_error.span) {
let mut fallback =
self.suggest_trait_and_bounds(&mut err, source, res, span, &base_error);
// if we have suggested using pattern matching, then don't add needless suggestions
// for typos.
fallback |= self.suggest_typo(&mut err, source, path, span, &base_error);
if fallback {
// Fallback label.
err.span_label(base_error.span, &base_error.fallback_label);
@ -937,7 +946,7 @@ fn suggest_pattern_match_with_let(
err: &mut Diagnostic,
source: PathSource<'_>,
span: Span,
) {
) -> bool {
if let PathSource::Expr(_) = source &&
let Some(Expr {
span: expr_span,
@ -954,8 +963,10 @@ fn suggest_pattern_match_with_let(
"let ",
Applicability::MaybeIncorrect,
);
return true;
}
}
false
}
fn get_single_associated_item(

View File

@ -0,0 +1,9 @@
#![allow(unused_variables)]
use std::fs::File;
fn main() {
if Err(err) = File::open("hello.txt") {
//~^ ERROR: cannot find value `err` in this scope
//~| ERROR: mismatched types
}
}

View File

@ -0,0 +1,21 @@
error[E0425]: cannot find value `err` in this scope
--> $DIR/issue-103909.rs:5:12
|
LL | if Err(err) = File::open("hello.txt") {
| ^^^ not found in this scope
|
help: you might have meant to use pattern matching
|
LL | if let Err(err) = File::open("hello.txt") {
| +++
error[E0308]: mismatched types
--> $DIR/issue-103909.rs:5:8
|
LL | if Err(err) = File::open("hello.txt") {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `bool`, found `()`
error: aborting due to 2 previous errors
Some errors have detailed explanations: E0308, E0425.
For more information about an error, try `rustc --explain E0308`.