summaryrefslogtreecommitdiff
path: root/cli/lint.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lint.rs')
-rw-r--r--cli/lint.rs27
1 files changed, 21 insertions, 6 deletions
diff --git a/cli/lint.rs b/cli/lint.rs
index 02cf269c9..1ac680bac 100644
--- a/cli/lint.rs
+++ b/cli/lint.rs
@@ -96,14 +96,29 @@ pub async fn lint_files(
Ok(())
}
-pub fn print_rules_list() {
+fn rule_to_json(rule: Box<dyn LintRule>) -> serde_json::Value {
+ serde_json::json!({
+ "code": rule.code(),
+ "tags": rule.tags(),
+ "docs": rule.docs(),
+ })
+}
+
+pub fn print_rules_list(json: bool) {
let lint_rules = rules::get_recommended_rules();
- // The rules should still be printed even if `--quiet` option is enabled,
- // so use `println!` here instead of `info!`.
- println!("Available rules:");
- for rule in lint_rules {
- println!(" - {}", rule.code());
+ if json {
+ let json_rules: Vec<serde_json::Value> =
+ lint_rules.into_iter().map(rule_to_json).collect();
+ let json_str = serde_json::to_string_pretty(&json_rules).unwrap();
+ println!("{}", json_str);
+ } else {
+ // The rules should still be printed even if `--quiet` option is enabled,
+ // so use `println!` here instead of `info!`.
+ println!("Available rules:");
+ for rule in lint_rules {
+ println!(" - {}", rule.code());
+ }
}
}