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 GroupKw,
14 Bang,
15 Colon,
16 Question,
17 Amp,
18 Eq,
19 At,
20 LParen,
21 RParen,
22 LBracket,
23 RBracket,
24 LBrace,
25 RBrace,
26 Comma,
27 ShellKw,
28 ShellFallbackKw,
29 Unknown,
30 Eof,
31 Document,
32 Directive,
33 MetadataComment,
34 NamespaceBlock,
35 TaskDecl,
36 TaskHeader,
37 TaskName,
38 ParameterList,
39 Parameter,
40 ConditionClause,
41 DependencyClause,
42 ShellClause,
43 HeaderTerminator,
44 Error,
45}
46
47impl SyntaxKind {
48 const MAX: u16 = SyntaxKind::Error as u16;
49}
50
51impl From<SyntaxKind> for RowanSyntaxKind {
52 fn from(value: SyntaxKind) -> Self {
53 RowanSyntaxKind(value as u16)
54 }
55}
56
57impl From<RowanSyntaxKind> for SyntaxKind {
58 fn from(raw: RowanSyntaxKind) -> Self {
59 if raw.0 <= Self::MAX {
60 unsafe { std::mem::transmute::<u16, SyntaxKind>(raw.0) }
63 } else {
64 SyntaxKind::Unknown
65 }
66 }
67}