aboutsummaryrefslogtreecommitdiff
path: root/lib/src/lib.rs
blob: 537f4b3d437ef529b2b849e29c12607bd669c60b (plain)
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
44
45
46
47
pub mod lints;

use rnix::{SyntaxElement, SyntaxKind, TextRange};
use std::ops::Deref;

pub trait Rule {
    fn validate(&self, node: &SyntaxElement) -> Option<Diagnostic>;
}

#[derive(Debug)]
pub struct Diagnostic {
    pub at: TextRange,
    pub message: String,
}

impl Diagnostic {
    pub fn new(at: TextRange, message: String) -> Self {
        Self { at, message }
    }
}

pub trait Metadata {
    fn name(&self) -> &str;
    fn note(&self) -> &str;
    fn match_with(&self, with: &SyntaxKind) -> bool;
}

pub trait Lint: Metadata + Rule + Send + Sync {}

// #[macro_export]
// macro_rules! lint_map {
//     ($($s:ident),*,) => {
//         lint_map($($s),*);
//     }
//     ($($s:ident),*) => {
//         use ::std::collections::HashMap;
//         use rnix::SyntaxKind;
//         $(
//             mod $s;
//         )*
//         ::lazy_static::lazy_static! {
//             pub static ref RULES: HashMap<SyntaxKind, &'static Box<dyn $crate::Lint>> = {
//                 vec![$(&*$s::LINT,)*]
//             }
//         }
//     }
// }