-#[allow(clippy::find_map, clippy::filter_map)]
-fn describe_lints() {
- use lintlist::{Level, Lint, ALL_LINTS, LINT_LEVELS};
- use rustc_data_structures::fx::FxHashSet;
-
- println!(
- "
-Available lint options:
- -W <foo> Warn about <foo>
- -A <foo> Allow <foo>
- -D <foo> Deny <foo>
- -F <foo> Forbid <foo> (deny <foo> and all attempts to override)
-
-"
- );
-
- let lint_level = |lint: &Lint| {
- LINT_LEVELS
- .iter()
- .find(|level_mapping| level_mapping.0 == lint.group)
- .map(|(_, level)| match level {
- Level::Allow => "allow",
- Level::Warn => "warn",
- Level::Deny => "deny",
- })
- .unwrap()
- };
-
- let mut lints: Vec<_> = ALL_LINTS.iter().collect();
- // The sort doesn't case-fold but it's doubtful we care.
- lints.sort_by_cached_key(|x: &&Lint| (lint_level(x), x.name));
-
- let max_lint_name_len = lints
- .iter()
- .map(|lint| lint.name.len())
- .map(|len| len + "clippy::".len())
- .max()
- .unwrap_or(0);
-
- let padded = |x: &str| {
- let mut s = " ".repeat(max_lint_name_len - x.chars().count());
- s.push_str(x);
- s
- };
-
- let scoped = |x: &str| format!("clippy::{}", x);
-
- let lint_groups: FxHashSet<_> = lints.iter().map(|lint| lint.group).collect();
-
- println!("Lint checks provided by clippy:\n");
- println!(" {} {:7.7} meaning", padded("name"), "default");
- println!(" {} {:7.7} -------", padded("----"), "-------");
-
- let print_lints = |lints: &[&Lint]| {
- for lint in lints {
- let name = lint.name.replace("_", "-");
- println!(
- " {} {:7.7} {}",
- padded(&scoped(&name)),
- lint_level(lint),
- lint.desc
- );
- }
- println!("\n");
- };
-
- print_lints(&lints);
-
- let max_group_name_len = std::cmp::max(
- "clippy::all".len(),
- lint_groups
- .iter()
- .map(|group| group.len())
- .map(|len| len + "clippy::".len())
- .max()
- .unwrap_or(0),
- );
-
- let padded_group = |x: &str| {
- let mut s = " ".repeat(max_group_name_len - x.chars().count());
- s.push_str(x);
- s
- };
-
- println!("Lint groups provided by clippy:\n");
- println!(" {} sub-lints", padded_group("name"));
- println!(" {} ---------", padded_group("----"));
- println!(" {} the set of all clippy lints", padded_group("clippy::all"));
-
- let print_lint_groups = || {
- for group in lint_groups {
- let name = group.to_lowercase().replace("_", "-");
- let desc = lints
- .iter()
- .filter(|&lint| lint.group == group)
- .map(|lint| lint.name)
- .map(|name| name.replace("_", "-"))
- .collect::<Vec<String>>()
- .join(", ");
- println!(" {} {}", padded_group(&scoped(&name)), desc);
- }
- println!("\n");
- };
-
- print_lint_groups();
-}
-