1use rowan::SyntaxKind as RowanSyntaxKind;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
4#[repr(u16)]
5pub enum SyntaxKind {
6 Ident,
7 String,
8 Comment,
9 Whitespace,
10 Newline,
11 Indent,
12 Bang,
13 Percent,
14 Colon,
15 Question,
16 Amp,
17 Eq,
18 At,
19 LParen,
20 RParen,
21 LBracket,
22 RBracket,
23 ShellKw,
24 ShellFallbackKw,
25 Unknown,
26 Eof,
27 Document,
28 Directive,
29 DocComment,
30 NamespaceBlock,
31 TaskDecl,
32 Error,
33}
34
35impl SyntaxKind {
36 const MAX: u16 = SyntaxKind::Error as u16;
37}
38
39impl From<SyntaxKind> for RowanSyntaxKind {
40 fn from(value: SyntaxKind) -> Self {
41 RowanSyntaxKind(value as u16)
42 }
43}
44
45impl From<RowanSyntaxKind> for SyntaxKind {
46 fn from(raw: RowanSyntaxKind) -> Self {
47 if raw.0 <= Self::MAX {
48 unsafe { std::mem::transmute::<u16, SyntaxKind>(raw.0) }
51 } else {
52 SyntaxKind::Unknown
53 }
54 }
55}