Skip to content

Commit

Permalink
More advanced unknown lint suggestion
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
flip1995 committed Jan 16, 2021
1 parent c819a4c commit 5e3df42
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions compiler/rustc_lint/src/context.rs
Expand Up @@ -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(
Expand Down

0 comments on commit 5e3df42

Please sign in to comment.