Closed
Description
In https://www.reddit.com/r/rust/comments/gpw2ra/how_is_the_rust_compiler_able_to_tell_the_visible/ I noticed this surprising spelling suggestion:
#![feature(non_ascii_idents)]
fn main() {
let _ = 读文;
}
error[E0425]: cannot find value `读文` in this scope
--> src/main.rs:45:13
|
45 | let _ = 读文;
| ^^^^ help: a tuple variant with a similar name exists: `Ok`
To me 读文
and Ok
don't seem like they would be similar enough to meet the threshold for showing such a suggestion. Can we calibrate this better for short idents?
For comparison, even kO
doesn't assume you mean Ok
.
error[E0425]: cannot find value `kO` in this scope
--> src/main.rs:45:13
|
45 | let _ = kO;
| ^^ not found in this scope
rustc 1.45.0-nightly (8970e8b 2020-05-23)
Mentioning @estebank who worked on suggestions most recently in #65421.
Activity
Enselic commentedon Nov 16, 2023
I debugged it a bit.
Ok
is selected as the candidate because the edit distance is just 2 to 读文.The code to fix is likely in or around
fn find_best_match_for_name_impl
. I tried some quick tricks but got ICEs and failing tests and gave up. One thing I didn't try that could perhaps work is to consider edit distance between characters of different alphabets/logogram sets as infinite, rather than 1, which is the case right now.dtolnay commentedon Nov 16, 2023
Thank you for investigating!
Independent of what we do with different logogram sets (your suggestion sounds plausible), an edit distance of 2 for a string of length 2 should not meet the threshold for showing a suggestion, even within a single logogram set.
Enselic commentedon Nov 17, 2023
I think edit distance of 1 for a string of length 1 is reasonable (a lot of existing UI tests relies on it), but maybe an edit distance of 2 for a string of length 2 is not reasonable indeed.
As you point out, with regular chars, the edit distance is still 2 but
Ok
is not suggested. So maybe there is a simpler fix to be made for读文
than looking at what alphabets/logogram sets characters belong to.Rollup merge of rust-lang#118381 - Enselic:edit-dist-len, r=WaffleLapkin
Rollup merge of rust-lang#118381 - Enselic:edit-dist-len, r=WaffleLapkin
Unrolled build for rust-lang#118381