about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-07-20 02:11:55 +0000
committerbors <bors@rust-lang.org>2021-07-20 02:11:55 +0000
commitc9aa2595d9ba2313bbfcc8e0244231baa9c5d9e0 (patch)
treedf615d0337b8a367f9531217b7ac9ff3ff025d64
parent6535449a002264ee08dec8e741f1aadd97428fae (diff)
parent25c66a13a9b9a646e247f8ed15828d621cdf30fa (diff)
downloadrust-c9aa2595d9ba2313bbfcc8e0244231baa9c5d9e0.tar.gz
rust-c9aa2595d9ba2313bbfcc8e0244231baa9c5d9e0.zip
Auto merge of #84959 - camsteffen:lint-suggest-group, r=estebank
Suggest lint groups

Fixes rust-lang/rust-clippy#6986
-rw-r--r--compiler/rustc_lint/src/context.rs14
-rw-r--r--src/test/rustdoc-ui/unknown-renamed-lints.stderr2
-rw-r--r--src/test/ui/lint/lint-unknown-lint.rs4
-rw-r--r--src/test/ui/lint/lint-unknown-lint.stderr8
4 files changed, 19 insertions, 9 deletions
diff --git a/compiler/rustc_lint/src/context.rs b/compiler/rustc_lint/src/context.rs
index c44df407f6b..c16d46efb88 100644
--- a/compiler/rustc_lint/src/context.rs
+++ b/compiler/rustc_lint/src/context.rs
@@ -481,17 +481,17 @@ impl LintStore {
 
     fn no_lint_suggestion(&self, lint_name: &str) -> CheckLintNameResult<'_> {
         let name_lower = lint_name.to_lowercase();
-        let symbols =
-            self.get_lints().iter().map(|l| Symbol::intern(&l.name_lower())).collect::<Vec<_>>();
 
         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)
+            return CheckLintNameResult::NoLint(Some(Symbol::intern(&name_lower)));
         }
+        // ...if not, search for lints with a similar name
+        let groups = self.lint_groups.keys().copied().map(Symbol::intern);
+        let lints = self.lints.iter().map(|l| Symbol::intern(&l.name_lower()));
+        let names: Vec<Symbol> = groups.chain(lints).collect();
+        let suggestion = find_best_match_for_name(&names, Symbol::intern(&name_lower), None);
+        CheckLintNameResult::NoLint(suggestion)
     }
 
     fn check_tool_name_for_backwards_compat(
diff --git a/src/test/rustdoc-ui/unknown-renamed-lints.stderr b/src/test/rustdoc-ui/unknown-renamed-lints.stderr
index ad814b82352..b105f47d751 100644
--- a/src/test/rustdoc-ui/unknown-renamed-lints.stderr
+++ b/src/test/rustdoc-ui/unknown-renamed-lints.stderr
@@ -14,7 +14,7 @@ error: unknown lint: `rustdoc::x`
   --> $DIR/unknown-renamed-lints.rs:7:9
    |
 LL | #![deny(rustdoc::x)]
-   |         ^^^^^^^^^^
+   |         ^^^^^^^^^^ help: did you mean: `rustdoc::all`
 
 error: lint `intra_doc_link_resolution_failure` has been renamed to `rustdoc::broken_intra_doc_links`
   --> $DIR/unknown-renamed-lints.rs:9:9
diff --git a/src/test/ui/lint/lint-unknown-lint.rs b/src/test/ui/lint/lint-unknown-lint.rs
index c36a8b2a4bf..2d842d51420 100644
--- a/src/test/ui/lint/lint-unknown-lint.rs
+++ b/src/test/ui/lint/lint-unknown-lint.rs
@@ -6,4 +6,8 @@
                    //~| HELP did you mean
                    //~| SUGGESTION dead_code
 
+#![deny(rust_2018_idiots)] //~ ERROR unknown lint
+                           //~| HELP did you mean
+                           //~| SUGGESTION rust_2018_idioms
+
 fn main() {}
diff --git a/src/test/ui/lint/lint-unknown-lint.stderr b/src/test/ui/lint/lint-unknown-lint.stderr
index 3a102769e85..0cb6b49578c 100644
--- a/src/test/ui/lint/lint-unknown-lint.stderr
+++ b/src/test/ui/lint/lint-unknown-lint.stderr
@@ -16,5 +16,11 @@ error: unknown lint: `dead_cod`
 LL | #![deny(dead_cod)]
    |         ^^^^^^^^ help: did you mean: `dead_code`
 
-error: aborting due to 2 previous errors
+error: unknown lint: `rust_2018_idiots`
+  --> $DIR/lint-unknown-lint.rs:9:9
+   |
+LL | #![deny(rust_2018_idiots)]
+   |         ^^^^^^^^^^^^^^^^ help: did you mean: `rust_2018_idioms`
+
+error: aborting due to 3 previous errors