Please do not do this with only edit distance. This can lead to comically bad suggestions. The suggestion should only be made if it actually fits in the surrounding code. For example, if the suggestion would cause type errors, it's a bad suggestion and should not be made. It's not clear to me the compiler is set up for that kind of analysis, in which case the suggestions should simply not be made.
One of the things I strongly dislike about clang is its nonsensical suggestions. There needs to be a prior probability assigned to "maybe the thing really is undefined" instead of trying to match it to something that is defined. I got this once, which illustrates the problem with edit distance nicely:
use of undeclared identifier 'deadline_'; did you mean 'readlink'?
No, even though the edit distance is small, no one types deadline_ instead of readlink. No one. Edit distance clearly doesn't capture the typos people actually make.
If we're going to make further changes to suggestions, I would like to see actual data about the kinds of mistakes people make first.
That's a great point @rsc. While experimenting offline, I noticed the same problem, comically bad suggestions also present in the CL test/fixedbugs/*.go file e.g TOOOOOOOOL -> did you mean Id?.
For sure, I look forward to hearing from @dr2chase and other folks.
You need to have a limit on the distance for this to work.
FWIW rustc just uses edit distance with a bound and the suggestions are pretty good. It does no type analysis. Yes, it has its flaws with things like deadline/readlink, but it seems to work pretty ok. I find such cases pretty rare.