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