quickmark_core/rules/
mod.rs

1use std::rc::Rc;
2
3use crate::linter::{Context, RuleLinter};
4
5pub mod md001;
6pub mod md003;
7pub mod md004;
8pub mod md005;
9pub mod md007;
10pub mod md009;
11pub mod md010;
12pub mod md011;
13pub mod md012;
14pub mod md013;
15pub mod md014;
16pub mod md018;
17pub mod md019;
18pub mod md020;
19pub mod md021;
20pub mod md022;
21pub mod md023;
22pub mod md024;
23pub mod md025;
24pub mod md026;
25pub mod md027;
26pub mod md028;
27pub mod md029;
28pub mod md030;
29pub mod md031;
30pub mod md032;
31pub mod md033;
32pub mod md034;
33pub mod md035;
34pub mod md036;
35pub mod md037;
36pub mod md038;
37pub mod md039;
38pub mod md040;
39pub mod md041;
40pub mod md042;
41pub mod md043;
42pub mod md044;
43pub mod md045;
44pub mod md046;
45pub mod md047;
46pub mod md048;
47pub mod md049;
48pub mod md050;
49pub mod md051;
50pub mod md052;
51pub mod md053;
52pub mod md054;
53pub mod md055;
54pub mod md056;
55pub mod md058;
56pub mod md059;
57
58#[derive(Debug, Clone, Copy, PartialEq, Eq)]
59pub enum RuleType {
60    /// Rules that primarily analyze raw text lines (e.g., line length, whitespace)
61    Line,
62    /// Rules that analyze specific AST node types (e.g., headings, lists, code blocks)
63    Token,
64    /// Rules that require full document analysis (e.g., duplicate headings, cross-references)
65    Document,
66    /// Rules that need both AST nodes and line context (blank line spacing around elements)
67    Hybrid,
68}
69
70#[derive(Debug)]
71pub struct Rule {
72    pub id: &'static str,
73    pub alias: &'static str,
74    pub tags: &'static [&'static str],
75    pub description: &'static str,
76    pub rule_type: RuleType,
77    pub required_nodes: &'static [&'static str], // For caching optimization
78    pub new_linter: fn(Rc<Context>) -> Box<dyn RuleLinter>,
79}
80
81pub const ALL_RULES: &[Rule] = &[
82    md001::MD001,
83    md003::MD003,
84    md004::MD004,
85    md005::MD005,
86    md007::MD007,
87    md009::MD009,
88    md010::MD010,
89    md011::MD011,
90    md012::MD012,
91    md013::MD013,
92    md014::MD014,
93    md018::MD018,
94    md019::MD019,
95    md020::MD020,
96    md021::MD021,
97    md022::MD022,
98    md023::MD023,
99    md024::MD024,
100    md025::MD025,
101    md026::MD026,
102    md027::MD027,
103    md028::MD028,
104    md029::MD029,
105    md030::MD030,
106    md031::MD031,
107    md032::MD032,
108    md033::MD033,
109    md034::MD034,
110    md035::MD035,
111    md036::MD036,
112    md037::MD037,
113    md038::MD038,
114    md039::MD039,
115    md040::MD040,
116    md041::MD041,
117    md042::MD042,
118    md043::MD043,
119    md044::MD044,
120    md045::MD045,
121    md046::MD046,
122    md047::MD047,
123    md048::MD048,
124    md049::MD049,
125    md050::MD050,
126    md051::MD051,
127    md052::MD052,
128    md053::MD053,
129    md054::MD054,
130    md055::MD055,
131    md056::MD056,
132    md058::MD058,
133    md059::MD059,
134];