Rollup merge of #103927 - fee1-dead-contrib:E0425-no-typo-when-pattern-matching, r=cjgillot

Do not make typo suggestions when suggesting pattern matching

Fixes #103909.
This commit is contained in:
Matthias Krüger 2022-11-05 18:06:06 +01:00 committed by GitHub
commit 51287f264c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 2 deletions

View File

@ -322,7 +322,12 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
}
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 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
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 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
err: &mut Diagnostic,
source: PathSource<'_>,
span: Span,
) {
) -> bool {
if let PathSource::Expr(_) = source &&
let Some(Expr {
span: expr_span,
@ -954,8 +963,10 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
"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`.