Do not make typo suggestions when suggesting pattern matching
Fixes #103909.
This commit is contained in:
parent
160b194295
commit
b1994ce806
@ -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(
|
||||
|
9
src/test/ui/did_you_mean/issue-103909.rs
Normal file
9
src/test/ui/did_you_mean/issue-103909.rs
Normal 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
|
||||
}
|
||||
}
|
21
src/test/ui/did_you_mean/issue-103909.stderr
Normal file
21
src/test/ui/did_you_mean/issue-103909.stderr
Normal 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`.
|
Loading…
Reference in New Issue
Block a user