More advanced unknown lint suggestion

This copies the unknown_lints code clippy uses for its
unknown_clippy_lints lint to rustc. The unknown_clippy_lints code is
more advanced, because it doesn't suggest renamed or removed lints and
correctly suggest lower casing lints.
This commit is contained in:
flip1995 2021-01-16 17:11:26 +01:00
parent c819a4c025
commit 5e3df4266a
No known key found for this signature in database
GPG Key ID: 2CEFCDB27ED0BE79

View File

@ -412,12 +412,18 @@ impl LintStore {
}
fn no_lint_suggestion(&self, lint_name: &str) -> CheckLintNameResult<'_> {
let symbols = self.by_name.keys().map(|name| Symbol::intern(&name)).collect::<Vec<_>>();
let name_lower = lint_name.to_lowercase();
let symbols =
self.get_lints().iter().map(|l| Symbol::intern(&l.name_lower())).collect::<Vec<_>>();
let suggestion =
find_best_match_for_name(&symbols, Symbol::intern(&lint_name.to_lowercase()), None);
CheckLintNameResult::NoLint(suggestion)
if lint_name.chars().any(char::is_uppercase) && self.find_lints(&name_lower).is_ok() {
// First check if the lint name is (partly) in upper case instead of lower case...
CheckLintNameResult::NoLint(Some(Symbol::intern(&name_lower)))
} else {
// ...if not, search for lints with a similar name
let suggestion = find_best_match_for_name(&symbols, Symbol::intern(&name_lower), None);
CheckLintNameResult::NoLint(suggestion)
}
}
fn check_tool_name_for_backwards_compat(