| use itertools::Itertools; |
| use std::fmt; |
| |
| #[derive(Debug, Clone, Default)] |
| pub struct ClippyConfiguration { |
| pub name: String, |
| pub default: String, |
| pub lints: &'static [&'static str], |
| pub doc: &'static str, |
| pub deprecation_reason: Option<&'static str>, |
| } |
| |
| impl fmt::Display for ClippyConfiguration { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| write!(f, "- `{}`: {}", self.name, self.doc)?; |
| if !self.default.is_empty() { |
| write!(f, "\n\n (default: `{}`)", self.default)?; |
| } |
| Ok(()) |
| } |
| } |
| |
| impl ClippyConfiguration { |
| pub fn to_markdown_paragraph(&self) -> String { |
| format!( |
| "## `{}`\n{}\n\n**Default Value:** `{}`\n\n---\n**Affected lints:**\n{}\n\n", |
| self.name, |
| self.doc.lines().map(|x| x.strip_prefix(' ').unwrap_or(x)).join("\n"), |
| self.default, |
| self.lints.iter().format_with("\n", |name, f| f(&format_args!( |
| "* [`{name}`](https://rust-lang.github.io/rust-clippy/master/index.html#{name})" |
| ))), |
| ) |
| } |
| |
| pub fn to_markdown_link(&self) -> String { |
| const BOOK_CONFIGS_PATH: &str = "https://doc.rust-lang.org/clippy/lint_configuration.html"; |
| format!("[`{}`]: {BOOK_CONFIGS_PATH}#{}", self.name, self.name) |
| } |
| } |