diff --git a/crates/oxc_linter/src/lib.rs b/crates/oxc_linter/src/lib.rs index 753001b8f..f22fa1e52 100644 --- a/crates/oxc_linter/src/lib.rs +++ b/crates/oxc_linter/src/lib.rs @@ -18,10 +18,12 @@ mod rules; mod service; mod utils; -use rustc_hash::FxHashMap; use std::{io::Write, rc::Rc, sync::Arc}; +use rustc_hash::{FxHashMap, FxHashSet}; + use oxc_diagnostics::Report; +use oxc_semantic::AstNode; pub use crate::{ config::ESLintConfig, @@ -36,7 +38,6 @@ use crate::{ rule::RuleCategory, rules::{RuleEnum, RULES}, }; -use oxc_semantic::AstNode; #[cfg(target_pointer_width = "64")] #[test] @@ -124,7 +125,11 @@ impl Linter { ctx.into_message() } + /// # Panics pub fn print_rules(writer: &mut W) { + let default_rules = + Linter::default().rules.into_iter().map(|(name, _)| name).collect::>(); + let rules_by_category = RULES.iter().fold( FxHashMap::default(), |mut map: FxHashMap>, rule| { @@ -133,14 +138,40 @@ impl Linter { }, ); + let mut default_count = 0; + for (category, rules) in rules_by_category { - writeln!(writer, "{} ({}):", category, rules.len()).unwrap(); + writeln!(writer, "## {} ({}):", category, rules.len()).unwrap(); + + let rule_width = rules.iter().map(|r| r.name().len()).max().unwrap(); + let plugin_width = rules.iter().map(|r| r.plugin_name().len()).max().unwrap(); + let x = ""; + writeln!( + writer, + "| {: