1
Fork 0

Fix issue when there are multiple candidates for edit_distance_with_substrings

This commit is contained in:
yukang 2023-03-20 22:48:26 +08:00
parent c90eb4825a
commit a860a720ba
3 changed files with 36 additions and 4 deletions

View file

@ -174,10 +174,10 @@ pub fn find_best_match_for_name(
fn find_best_match_for_name_impl( fn find_best_match_for_name_impl(
use_substring_score: bool, use_substring_score: bool,
candidates: &[Symbol], candidates: &[Symbol],
lookup: Symbol, lookup_symbol: Symbol,
dist: Option<usize>, dist: Option<usize>,
) -> Option<Symbol> { ) -> Option<Symbol> {
let lookup = lookup.as_str(); let lookup = lookup_symbol.as_str();
let lookup_uppercase = lookup.to_uppercase(); let lookup_uppercase = lookup.to_uppercase();
// Priority of matches: // Priority of matches:
@ -190,6 +190,7 @@ fn find_best_match_for_name_impl(
let mut dist = dist.unwrap_or_else(|| cmp::max(lookup.len(), 3) / 3); let mut dist = dist.unwrap_or_else(|| cmp::max(lookup.len(), 3) / 3);
let mut best = None; let mut best = None;
let mut next_candidates = vec![];
for c in candidates { for c in candidates {
match if use_substring_score { match if use_substring_score {
edit_distance_with_substrings(lookup, c.as_str(), dist) edit_distance_with_substrings(lookup, c.as_str(), dist)
@ -198,12 +199,27 @@ fn find_best_match_for_name_impl(
} { } {
Some(0) => return Some(*c), Some(0) => return Some(*c),
Some(d) => { Some(d) => {
dist = d - 1; if use_substring_score {
best = Some(*c); dist = d;
next_candidates.push(*c);
best = Some(*c);
} else {
dist = d - 1;
best = Some(*c);
}
} }
None => {} None => {}
} }
} }
if next_candidates.len() > 1 {
best = find_best_match_for_name_impl(
false,
&next_candidates,
lookup_symbol,
Some(lookup.len()),
);
}
if best.is_some() { if best.is_some() {
return best; return best;
} }

View file

@ -0,0 +1,4 @@
fn main() {
println!("Custom backtrace: {}", std::backtrace::Backtrace::forced_capture());
//~^ ERROR no function or associated item name
}

View file

@ -0,0 +1,12 @@
error[E0599]: no function or associated item named `forced_capture` found for struct `Backtrace` in the current scope
--> $DIR/issue-109291.rs:2:65
|
LL | println!("Custom backtrace: {}", std::backtrace::Backtrace::forced_capture());
| ^^^^^^^^^^^^^^
| |
| function or associated item not found in `Backtrace`
| help: there is an associated function with a similar name: `force_capture`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0599`.