mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
refactor(linter): render --rules in a table
This commit is contained in:
parent
bf932be94f
commit
222030c4c5
1 changed files with 37 additions and 6 deletions
|
|
@ -18,10 +18,12 @@ mod rules;
|
||||||
mod service;
|
mod service;
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
use rustc_hash::FxHashMap;
|
|
||||||
use std::{io::Write, rc::Rc, sync::Arc};
|
use std::{io::Write, rc::Rc, sync::Arc};
|
||||||
|
|
||||||
|
use rustc_hash::{FxHashMap, FxHashSet};
|
||||||
|
|
||||||
use oxc_diagnostics::Report;
|
use oxc_diagnostics::Report;
|
||||||
|
use oxc_semantic::AstNode;
|
||||||
|
|
||||||
pub use crate::{
|
pub use crate::{
|
||||||
config::ESLintConfig,
|
config::ESLintConfig,
|
||||||
|
|
@ -36,7 +38,6 @@ use crate::{
|
||||||
rule::RuleCategory,
|
rule::RuleCategory,
|
||||||
rules::{RuleEnum, RULES},
|
rules::{RuleEnum, RULES},
|
||||||
};
|
};
|
||||||
use oxc_semantic::AstNode;
|
|
||||||
|
|
||||||
#[cfg(target_pointer_width = "64")]
|
#[cfg(target_pointer_width = "64")]
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -124,7 +125,11 @@ impl Linter {
|
||||||
ctx.into_message()
|
ctx.into_message()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// # Panics
|
||||||
pub fn print_rules<W: Write>(writer: &mut W) {
|
pub fn print_rules<W: Write>(writer: &mut W) {
|
||||||
|
let default_rules =
|
||||||
|
Linter::default().rules.into_iter().map(|(name, _)| name).collect::<FxHashSet<&str>>();
|
||||||
|
|
||||||
let rules_by_category = RULES.iter().fold(
|
let rules_by_category = RULES.iter().fold(
|
||||||
FxHashMap::default(),
|
FxHashMap::default(),
|
||||||
|mut map: FxHashMap<RuleCategory, Vec<&RuleEnum>>, rule| {
|
|mut map: FxHashMap<RuleCategory, Vec<&RuleEnum>>, rule| {
|
||||||
|
|
@ -133,14 +138,40 @@ impl Linter {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let mut default_count = 0;
|
||||||
|
|
||||||
for (category, rules) in rules_by_category {
|
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,
|
||||||
|
"| {:<rule_width$} | {:<plugin_width$} | Default |",
|
||||||
|
"Rule name", "Source"
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
writeln!(writer, "| {x:-<rule_width$} | {x:-<plugin_width$} | {x:-<7} |").unwrap();
|
||||||
|
|
||||||
for rule in rules {
|
for rule in rules {
|
||||||
// Separate the category and rule name so people don't copy the combination as a whole for `--allow` and `--deny`,
|
let rule_name = rule.name();
|
||||||
// resulting invalid rule names.
|
let plugin_name = rule.plugin_name();
|
||||||
writeln!(writer, "• {}: {}", rule.plugin_name(), rule.name()).unwrap();
|
let (default, default_width) = if default_rules.contains(rule_name) {
|
||||||
|
default_count += 1;
|
||||||
|
("✅", 6)
|
||||||
|
} else {
|
||||||
|
("", 7)
|
||||||
|
};
|
||||||
|
writeln!(
|
||||||
|
writer,
|
||||||
|
"| {rule_name:<rule_width$} | {plugin_name:<plugin_width$} | {default:<default_width$} |"
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
writeln!(writer).unwrap();
|
||||||
}
|
}
|
||||||
|
writeln!(writer, "Default: {default_count}").unwrap();
|
||||||
writeln!(writer, "Total: {}", RULES.len()).unwrap();
|
writeln!(writer, "Total: {}", RULES.len()).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue