skullbrain_parser/cst/
mod.rs1mod expr;
2mod nodes;
3mod tokens;
4mod utils;
5
6use crate::SyntaxKind;
7use utils::{define_cst_node, define_cst_token};
8
9pub use expr::*;
10pub use nodes::*;
11pub use tokens::*;
12
13pub type SyntaxNode = cstree::syntax::SyntaxNode<SyntaxKind>;
15pub type SyntaxToken = cstree::syntax::SyntaxToken<SyntaxKind>;
17pub type SyntaxNodeChildren<'a> = cstree::syntax::SyntaxNodeChildren<'a, SyntaxKind>;
19pub type SyntaxElementRef<'a> = cstree::syntax::SyntaxElementRef<'a, SyntaxKind>;
21
22pub trait CstNode: Sized {
24 fn can_cast(kind: SyntaxKind) -> bool;
26
27 fn cast(node: SyntaxNode) -> Option<Self>;
31
32 fn syntax(&self) -> &SyntaxNode;
34}
35
36pub trait CstToken: Sized {
38 fn can_cast(kind: SyntaxKind) -> bool;
40
41 fn cast(token: SyntaxToken) -> Option<Self>;
45
46 fn token(&self) -> &SyntaxToken;
48}