1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
macro_rules! merge_linters {
($name:ident => $($linter:ident),* => $desc:expr) => {
pub use merge_rule_hidden::$name;
mod merge_rule_hidden {
use paste::paste;
use crate::{Document, linting::{Lint, Linter}, remove_overlaps};
$(
use super::$linter;
)*
paste! {
#[derive(Default)]
pub struct $name {
$(
[< $linter:snake >]: $linter,
)*
}
impl Linter for $name {
fn lint(&mut self, document: &Document) -> Vec<Lint>{
let mut lints = Vec::new();
$(
lints.extend(self.[< $linter:snake >].lint(document));
)*
remove_overlaps(&mut lints);
lints
}
fn description(&self) -> &'static str {
$desc
}
}
}
}
};
}
pub(crate) use merge_linters;