未验证 提交 0d7e6cf9 编写于 作者: F Freyskeyd

refac Move levenchstein before context dependent check

Signed-off-by: NFreyskeyd <simon.paitrault@gmail.com>
上级 0777c757
...@@ -2312,6 +2312,14 @@ fn smart_resolve_path_fragment(&mut self, ...@@ -2312,6 +2312,14 @@ fn smart_resolve_path_fragment(&mut self,
} }
} }
let mut levenshtein_worked = false;
// Try Levenshtein.
if let Some(candidate) = this.lookup_typo_candidate(path, ns, is_expected) {
err.span_label(ident_span, &format!("did you mean `{}`?", candidate));
levenshtein_worked = true;
}
// Try context dependent help if relaxed lookup didn't work. // Try context dependent help if relaxed lookup didn't work.
if let Some(def) = def { if let Some(def) = def {
match (def, source) { match (def, source) {
...@@ -2354,14 +2362,10 @@ fn smart_resolve_path_fragment(&mut self, ...@@ -2354,14 +2362,10 @@ fn smart_resolve_path_fragment(&mut self,
} }
} }
// Try Levenshtein if nothing else worked.
if let Some(candidate) = this.lookup_typo_candidate(path, ns, is_expected) {
err.span_label(ident_span, &format!("did you mean `{}`?", candidate));
return err;
}
// Fallback label. // Fallback label.
if !levenshtein_worked {
err.span_label(base_span, &fallback_label); err.span_label(base_span, &fallback_label);
}
err err
}; };
let report_errors = |this: &mut Self, def: Option<Def>| { let report_errors = |this: &mut Self, def: Option<Def>| {
......
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
struct Handle {}
struct Something {
handle: Handle
}
fn main() {
let handle: Handle = Handle {};
let s: Something = Something {
handle: Handle
//~^ ERROR cannot find value `Handle` in this scope
//~| NOTE did you mean `handle`?
};
}
error[E0423]: expected value, found struct `Handle`
--> $DIR/issue-39226.rs:20:17
|
20 | handle: Handle
| ^^^^^^
| |
| did you mean `handle`?
| did you mean `Handle { /* fields */ }`?
error: aborting due to previous error
...@@ -8,7 +8,10 @@ error[E0404]: expected trait, found type alias `K` ...@@ -8,7 +8,10 @@ error[E0404]: expected trait, found type alias `K`
--> $DIR/issue-5035.rs:13:6 --> $DIR/issue-5035.rs:13:6
| |
13 | impl K for isize {} //~ ERROR expected trait, found type alias `K` 13 | impl K for isize {} //~ ERROR expected trait, found type alias `K`
| ^ type aliases cannot be used for traits | ^
| |
| type aliases cannot be used for traits
| did you mean `I`?
error: cannot continue compilation due to previous error error: cannot continue compilation due to previous error
...@@ -5,6 +5,7 @@ error[E0423]: expected value, found struct `Z` ...@@ -5,6 +5,7 @@ error[E0423]: expected value, found struct `Z`
| ^ | ^
| | | |
| did you mean `Z { /* fields */ }`? | did you mean `Z { /* fields */ }`?
| did you mean `S`?
| constructor is not visible here due to private fields | constructor is not visible here due to private fields
| |
= help: possible better candidate is found in another module, you can import it into scope: = help: possible better candidate is found in another module, you can import it into scope:
......
...@@ -26,8 +26,9 @@ error[E0423]: expected value, found module `a::b` ...@@ -26,8 +26,9 @@ error[E0423]: expected value, found module `a::b`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:45:5 --> $DIR/suggest-path-instead-of-mod-dot-item.rs:45:5
| |
45 | a::b.J 45 | a::b.J
| ^^^^-- | ^^^---
| | | | |
| | did you mean `I`?
| did you mean `a::b::J`? | did you mean `a::b::J`?
error[E0423]: expected value, found module `a` error[E0423]: expected value, found module `a`
...@@ -50,8 +51,9 @@ error[E0423]: expected value, found module `a::b` ...@@ -50,8 +51,9 @@ error[E0423]: expected value, found module `a::b`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:61:5 --> $DIR/suggest-path-instead-of-mod-dot-item.rs:61:5
| |
61 | a::b.f() 61 | a::b.f()
| ^^^^---- | ^^^-----
| | | | |
| | did you mean `I`?
| did you mean `a::b::f(...)`? | did you mean `a::b::f(...)`?
error[E0423]: expected value, found module `a::b` error[E0423]: expected value, found module `a::b`
......
...@@ -14,13 +14,19 @@ error[E0423]: expected function, found type alias `A` ...@@ -14,13 +14,19 @@ error[E0423]: expected function, found type alias `A`
--> $DIR/tuple-struct-alias.rs:24:13 --> $DIR/tuple-struct-alias.rs:24:13
| |
24 | let s = A(0, 1); 24 | let s = A(0, 1);
| ^ did you mean `A { /* fields */ }`? | ^
| |
| did you mean `S`?
| did you mean `A { /* fields */ }`?
error[E0532]: expected tuple struct/variant, found type alias `A` error[E0532]: expected tuple struct/variant, found type alias `A`
--> $DIR/tuple-struct-alias.rs:26:9 --> $DIR/tuple-struct-alias.rs:26:9
| |
26 | A(..) => {} 26 | A(..) => {}
| ^ did you mean `A { /* fields */ }`? | ^
| |
| did you mean `S`?
| did you mean `A { /* fields */ }`?
error: aborting due to 4 previous errors error: aborting due to 4 previous errors
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册