about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--clippy_lints/src/lib.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/clippy_lints/src/lib.rs b/clippy_lints/src/lib.rs
index efc9fe6f315..e927d9a2d5b 100644
--- a/clippy_lints/src/lib.rs
+++ b/clippy_lints/src/lib.rs
@@ -524,8 +524,28 @@ impl LintInfo {
 
 pub fn explain(name: &str) -> i32 {
     let target = format!("clippy::{}", name.to_ascii_uppercase());
+
     if let Some(info) = declared_lints::LINTS.iter().find(|info| info.lint.name == target) {
-        println!("{}", info.explanation);
+        // Remove tags and hidden code:
+        let mut explanation = String::with_capacity(128);
+        let mut in_code = false;
+        for line in info.explanation.lines().map(|line| line.trim()) {
+            if let Some(lang) = line.strip_prefix("```") {
+                let tag = lang.split_once(',').map_or(lang, |(left, _)| left);
+                if !in_code && matches!(tag, "" | "rust" | "ignore" | "should_panic" | "no_run" | "compile_fail") {
+                    explanation += "```rust\n";
+                } else {
+                    explanation += line;
+                    explanation.push('\n');
+                }
+                in_code = !in_code;
+            } else if !(in_code && line.starts_with("# ")) {
+                explanation += line;
+                explanation.push('\n');
+            }
+        }
+
+        println!("{}", explanation);
         // Check if the lint has configuration
         let mut mdconf = get_configuration_metadata();
         let name = name.to_ascii_lowercase();