miden_assembly_syntax_cst/
syntax.rs1use rowan::Language;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
5#[repr(u16)]
6pub enum SyntaxKind {
7 Tombstone = 0,
8 Error,
9 SourceFile,
10 Doc,
11 Namespace,
12 ExternPackage,
13 Submodule,
14 Import,
15 ImportList,
16 ImportSpecifier,
17 Constant,
18 TypeDecl,
19 AdviceMap,
20 BeginBlock,
21 Procedure,
22 Attribute,
23 Visibility,
24 Signature,
25 Block,
26 IfOp,
27 WhileOp,
28 DoWhileOp,
29 RepeatOp,
30 Instruction,
31 Path,
32 Expr,
33 TypeBody,
34 Whitespace,
35 Newline,
36 Comment,
37 DocComment,
38 Ident,
39 SpecialIdent,
40 Number,
41 QuotedIdent,
42 QuotedString,
43 At,
44 Bang,
45 Colon,
46 ColonColon,
47 Comma,
48 Dot,
49 DotDot,
50 Equal,
51 LAngle,
52 LBrace,
53 LBracket,
54 LParen,
55 Minus,
56 Plus,
57 RAngle,
58 RArrow,
59 RBrace,
60 RBracket,
61 RParen,
62 Semicolon,
63 Slash,
64 SlashSlash,
65 Star,
66}
67
68impl SyntaxKind {
69 pub fn is_trivia(self) -> bool {
72 matches!(self, Self::Whitespace | Self::Newline | Self::Comment | Self::DocComment)
73 }
74}
75
76impl From<SyntaxKind> for rowan::SyntaxKind {
77 fn from(kind: SyntaxKind) -> Self {
78 Self(kind as u16)
79 }
80}
81
82const ALL_KINDS: [SyntaxKind; SyntaxKind::Star as usize + 1] = [
83 SyntaxKind::Tombstone,
84 SyntaxKind::Error,
85 SyntaxKind::SourceFile,
86 SyntaxKind::Doc,
87 SyntaxKind::Namespace,
88 SyntaxKind::ExternPackage,
89 SyntaxKind::Submodule,
90 SyntaxKind::Import,
91 SyntaxKind::ImportList,
92 SyntaxKind::ImportSpecifier,
93 SyntaxKind::Constant,
94 SyntaxKind::TypeDecl,
95 SyntaxKind::AdviceMap,
96 SyntaxKind::BeginBlock,
97 SyntaxKind::Procedure,
98 SyntaxKind::Attribute,
99 SyntaxKind::Visibility,
100 SyntaxKind::Signature,
101 SyntaxKind::Block,
102 SyntaxKind::IfOp,
103 SyntaxKind::WhileOp,
104 SyntaxKind::DoWhileOp,
105 SyntaxKind::RepeatOp,
106 SyntaxKind::Instruction,
107 SyntaxKind::Path,
108 SyntaxKind::Expr,
109 SyntaxKind::TypeBody,
110 SyntaxKind::Whitespace,
111 SyntaxKind::Newline,
112 SyntaxKind::Comment,
113 SyntaxKind::DocComment,
114 SyntaxKind::Ident,
115 SyntaxKind::SpecialIdent,
116 SyntaxKind::Number,
117 SyntaxKind::QuotedIdent,
118 SyntaxKind::QuotedString,
119 SyntaxKind::At,
120 SyntaxKind::Bang,
121 SyntaxKind::Colon,
122 SyntaxKind::ColonColon,
123 SyntaxKind::Comma,
124 SyntaxKind::Dot,
125 SyntaxKind::DotDot,
126 SyntaxKind::Equal,
127 SyntaxKind::LAngle,
128 SyntaxKind::LBrace,
129 SyntaxKind::LBracket,
130 SyntaxKind::LParen,
131 SyntaxKind::Minus,
132 SyntaxKind::Plus,
133 SyntaxKind::RAngle,
134 SyntaxKind::RArrow,
135 SyntaxKind::RBrace,
136 SyntaxKind::RBracket,
137 SyntaxKind::RParen,
138 SyntaxKind::Semicolon,
139 SyntaxKind::Slash,
140 SyntaxKind::SlashSlash,
141 SyntaxKind::Star,
142];
143
144#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
146pub enum MasmLanguage {}
147
148impl Language for MasmLanguage {
149 type Kind = SyntaxKind;
150
151 fn kind_from_raw(raw: rowan::SyntaxKind) -> Self::Kind {
152 ALL_KINDS
153 .get(raw.0 as usize)
154 .copied()
155 .unwrap_or_else(|| panic!("invalid syntax kind: {}", raw.0))
156 }
157
158 fn kind_to_raw(kind: Self::Kind) -> rowan::SyntaxKind {
159 kind.into()
160 }
161}
162
163pub type SyntaxNode = rowan::SyntaxNode<MasmLanguage>;
165pub type SyntaxToken = rowan::SyntaxToken<MasmLanguage>;
167pub type SyntaxElement = rowan::SyntaxElement<MasmLanguage>;