mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-16 05:56:56 +00:00
Auto merge of #4963 - JohnTitor:unknown-clippy-lint, r=phansch
Suggest similar lint name on `unknown_clippy_lints` Suggest a similar lint name with Levenshtein distance on `unknown_clippy_lints`. And lowercase suggestion behavior is also changed. changelog: Suggest similar lint name on `unknown_clippy_lints`
This commit is contained in:
commit
0fec5905d8
@ -18,6 +18,7 @@ use rustc_session::declare_tool_lint;
|
||||
use semver::Version;
|
||||
use syntax::ast::{AttrKind, AttrStyle, Attribute, Lit, LitKind, MetaItemKind, NestedMetaItem};
|
||||
use syntax::source_map::Span;
|
||||
use syntax::util::lev_distance::find_best_match_for_name;
|
||||
use syntax_pos::symbol::Symbol;
|
||||
|
||||
declare_clippy_lint! {
|
||||
@ -329,24 +330,30 @@ fn check_clippy_lint_names(cx: &LateContext<'_, '_>, items: &[NestedMetaItem]) {
|
||||
lint.span(),
|
||||
&format!("unknown clippy lint: clippy::{}", name),
|
||||
|db| {
|
||||
if name.as_str().chars().any(char::is_uppercase) {
|
||||
let name_lower = name.as_str().to_lowercase();
|
||||
match lint_store.check_lint_name(
|
||||
&name_lower,
|
||||
Some(tool_name.name)
|
||||
) {
|
||||
// FIXME: can we suggest similar lint names here?
|
||||
// https://github.com/rust-lang/rust/pull/56992
|
||||
CheckLintNameResult::NoLint(None) => (),
|
||||
_ => {
|
||||
db.span_suggestion(
|
||||
lint.span(),
|
||||
"lowercase the lint name",
|
||||
name_lower,
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
}
|
||||
}
|
||||
let name_lower = name.as_str().to_lowercase();
|
||||
let symbols = lint_store.get_lints().iter().map(
|
||||
|l| Symbol::intern(&l.name_lower())
|
||||
).collect::<Vec<_>>();
|
||||
let sugg = find_best_match_for_name(
|
||||
symbols.iter(),
|
||||
&format!("clippy::{}", name_lower),
|
||||
None,
|
||||
);
|
||||
if name.as_str().chars().any(char::is_uppercase)
|
||||
&& lint_store.find_lints(&format!("clippy::{}", name_lower)).is_ok() {
|
||||
db.span_suggestion(
|
||||
lint.span(),
|
||||
"lowercase the lint name",
|
||||
format!("clippy::{}", name_lower),
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
} else if let Some(sugg) = sugg {
|
||||
db.span_suggestion(
|
||||
lint.span(),
|
||||
"did you mean",
|
||||
sugg.to_string(),
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
18
tests/ui/unknown_clippy_lints.fixed
Normal file
18
tests/ui/unknown_clippy_lints.fixed
Normal file
@ -0,0 +1,18 @@
|
||||
// run-rustfix
|
||||
|
||||
#![warn(clippy::pedantic)]
|
||||
// Should suggest lowercase
|
||||
#![allow(clippy::all)]
|
||||
#![warn(clippy::cmp_nan)]
|
||||
|
||||
// Should suggest similar clippy lint name
|
||||
#[warn(clippy::if_not_else)]
|
||||
#[warn(clippy::unnecessary_cast)]
|
||||
#[warn(clippy::useless_transmute)]
|
||||
// Shouldn't suggest rustc lint name(`dead_code`)
|
||||
#[warn(clippy::drop_copy)]
|
||||
// Shouldn't suggest removed/deprecated clippy lint name(`unused_collect`)
|
||||
#[warn(clippy::unused_self)]
|
||||
// Shouldn't suggest renamed clippy lint name(`const_static_lifetime`)
|
||||
#[warn(clippy::redundant_static_lifetimes)]
|
||||
fn main() {}
|
@ -1,5 +1,18 @@
|
||||
#![allow(clippy::All)]
|
||||
#![warn(clippy::pedantic)]
|
||||
// run-rustfix
|
||||
|
||||
#![warn(clippy::pedantic)]
|
||||
// Should suggest lowercase
|
||||
#![allow(clippy::All)]
|
||||
#![warn(clippy::CMP_NAN)]
|
||||
|
||||
// Should suggest similar clippy lint name
|
||||
#[warn(clippy::if_not_els)]
|
||||
#[warn(clippy::UNNecsaRy_cAst)]
|
||||
#[warn(clippy::useles_transute)]
|
||||
// Shouldn't suggest rustc lint name(`dead_code`)
|
||||
#[warn(clippy::dead_cod)]
|
||||
// Shouldn't suggest removed/deprecated clippy lint name(`unused_collect`)
|
||||
#[warn(clippy::unused_colle)]
|
||||
// Shouldn't suggest renamed clippy lint name(`const_static_lifetime`)
|
||||
#[warn(clippy::const_static_lifetim)]
|
||||
fn main() {}
|
||||
|
@ -1,16 +1,52 @@
|
||||
error: unknown clippy lint: clippy::if_not_els
|
||||
--> $DIR/unknown_clippy_lints.rs:4:8
|
||||
--> $DIR/unknown_clippy_lints.rs:9:8
|
||||
|
|
||||
LL | #[warn(clippy::if_not_els)]
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^ help: did you mean: `clippy::if_not_else`
|
||||
|
|
||||
= note: `-D clippy::unknown-clippy-lints` implied by `-D warnings`
|
||||
|
||||
error: unknown clippy lint: clippy::UNNecsaRy_cAst
|
||||
--> $DIR/unknown_clippy_lints.rs:10:8
|
||||
|
|
||||
LL | #[warn(clippy::UNNecsaRy_cAst)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: did you mean: `clippy::unnecessary_cast`
|
||||
|
||||
error: unknown clippy lint: clippy::useles_transute
|
||||
--> $DIR/unknown_clippy_lints.rs:11:8
|
||||
|
|
||||
LL | #[warn(clippy::useles_transute)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: did you mean: `clippy::useless_transmute`
|
||||
|
||||
error: unknown clippy lint: clippy::dead_cod
|
||||
--> $DIR/unknown_clippy_lints.rs:13:8
|
||||
|
|
||||
LL | #[warn(clippy::dead_cod)]
|
||||
| ^^^^^^^^^^^^^^^^ help: did you mean: `clippy::drop_copy`
|
||||
|
||||
error: unknown clippy lint: clippy::unused_colle
|
||||
--> $DIR/unknown_clippy_lints.rs:15:8
|
||||
|
|
||||
LL | #[warn(clippy::unused_colle)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: did you mean: `clippy::unused_self`
|
||||
|
||||
error: unknown clippy lint: clippy::const_static_lifetim
|
||||
--> $DIR/unknown_clippy_lints.rs:17:8
|
||||
|
|
||||
LL | #[warn(clippy::const_static_lifetim)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: did you mean: `clippy::redundant_static_lifetimes`
|
||||
|
||||
error: unknown clippy lint: clippy::All
|
||||
--> $DIR/unknown_clippy_lints.rs:1:10
|
||||
--> $DIR/unknown_clippy_lints.rs:5:10
|
||||
|
|
||||
LL | #![allow(clippy::All)]
|
||||
| ^^^^^^^^^^^ help: lowercase the lint name: `all`
|
||||
| ^^^^^^^^^^^ help: lowercase the lint name: `clippy::all`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: unknown clippy lint: clippy::CMP_NAN
|
||||
--> $DIR/unknown_clippy_lints.rs:6:9
|
||||
|
|
||||
LL | #![warn(clippy::CMP_NAN)]
|
||||
| ^^^^^^^^^^^^^^^ help: lowercase the lint name: `clippy::cmp_nan`
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user