bytebraise_syntax/syntax/
syntax_kind.rs1use bytebraise_lexer::token::TokenKind;
2
3pub fn syntax_kind_for_token_kind(token_kind: TokenKind) -> SyntaxKind {
4 match token_kind {
5 TokenKind::Error(_) => unimplemented!("TODO return error too"),
6 TokenKind::AddHandler => SyntaxKind::AddHandler,
7 TokenKind::AddTask => SyntaxKind::AddTask,
8 TokenKind::After => SyntaxKind::After,
9 TokenKind::Before => SyntaxKind::Before,
10 TokenKind::CloseParenthesis => SyntaxKind::CloseParenthesis,
11 TokenKind::Colon => SyntaxKind::Colon,
12 TokenKind::ColonEquals => SyntaxKind::ColonEquals,
13 TokenKind::Comment => SyntaxKind::Comment,
14 TokenKind::DefaultEquals => SyntaxKind::DefaultEquals,
15 TokenKind::DelTask => SyntaxKind::DelTask,
16 TokenKind::DotEquals => SyntaxKind::DotEquals,
17 TokenKind::DoubleQuote => SyntaxKind::DoubleQuote,
18 TokenKind::DoubleQuotedValue => SyntaxKind::DoubleQuotedValue,
19 TokenKind::EndOfInput => SyntaxKind::EndOfInput,
20 TokenKind::Equals => SyntaxKind::Equals,
21 TokenKind::EqualsDot => SyntaxKind::EqualsDot,
22 TokenKind::EqualsPlus => SyntaxKind::EqualsPlus,
23 TokenKind::EscapedNewline => SyntaxKind::EscapedNewline,
24 TokenKind::Export => SyntaxKind::Export,
25 TokenKind::ExportFunctions => SyntaxKind::ExportFunctions,
26 TokenKind::Fakeroot => SyntaxKind::Fakeroot,
27 TokenKind::Identifier => SyntaxKind::Identifier,
28 TokenKind::DirectiveArgument => SyntaxKind::DirectiveArgument,
29 TokenKind::Include => SyntaxKind::Include,
30 TokenKind::Inherit => SyntaxKind::Inherit,
31 TokenKind::Newline => SyntaxKind::Newline,
32 TokenKind::OpenParenthesis => SyntaxKind::OpenParenthesis,
33 TokenKind::PlusEquals => SyntaxKind::PlusEquals,
34 TokenKind::Python => SyntaxKind::Python,
35 TokenKind::PythonDefKeyword => SyntaxKind::PythonDefKeyword,
36 TokenKind::PythonDefFunctionName => SyntaxKind::PythonDefFunctionName,
37 TokenKind::PythonDefFunctionArgs => SyntaxKind::PythonDefFunctionArgs,
38 TokenKind::PythonDefFunctionBody => SyntaxKind::PythonDefFunctionBody,
39 TokenKind::Require => SyntaxKind::Require,
40 TokenKind::SingleQuote => SyntaxKind::SingleQuote,
41 TokenKind::SingleQuotedValue => SyntaxKind::SingleQuotedValue,
42 TokenKind::SquareCloseBracket => SyntaxKind::SquareCloseBracket,
43 TokenKind::SquareOpenBracket => SyntaxKind::SquareOpenBracket,
44 TokenKind::Task => SyntaxKind::Task,
45 TokenKind::UnquotedValue => SyntaxKind::UnquotedValue,
46 TokenKind::Unset => SyntaxKind::Unset,
47 TokenKind::Varflag => SyntaxKind::Varflag,
48 TokenKind::WeakEquals => SyntaxKind::WeakEquals,
49 TokenKind::Whitespace => SyntaxKind::Whitespace,
50 }
51}
52
53#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
54#[repr(u16)]
55pub enum SyntaxKind {
56 Error = 0,
57
58 AddHandler,
60 AddTask,
61 After,
62 Before,
63 CloseParenthesis,
64 Colon,
65 ColonEquals,
66 Comment,
67 DefaultEquals,
68 DelTask,
69 DotEquals,
70 DoubleQuote,
71 DoubleQuotedValue,
72 EndOfInput,
73 Equals,
74 EqualsDot,
75 EqualsPlus,
76 EscapedNewline,
77 Export,
78 ExportFunctions,
79 Fakeroot,
80 Identifier,
81 DirectiveArgument,
82 Include,
83 Inherit,
84 Newline,
85 OpenParenthesis,
86 PlusEquals,
87 Python,
88 PythonDefKeyword,
89 PythonDefFunctionName,
90 PythonDefFunctionArgs,
91 PythonDefFunctionBody,
92 Require,
93 SingleQuote,
94 SingleQuotedValue,
95 SquareCloseBracket,
96 SquareOpenBracket,
97 Task,
98 UnquotedValue,
99 Unset,
100 Varflag,
101 WeakEquals,
102 Whitespace = 0x200, AssignmentNode,
106 ExportNode,
107 IncludeNode,
108 RequireNode,
109 TaskNode,
110 UnsetNode,
111 ExportFunctionsNode,
112 InheritNode,
113 PythonDefNode,
114 AddTaskNode,
115 DelTaskNode,
116 AddHandlerNode,
117
118 IdentifierExpressionNode,
120
121 RootNode,
124}
125
126impl SyntaxKind {
127 pub fn is_token(&self) -> bool {
128 (*self as u16) <= (SyntaxKind::Whitespace as u16)
129 }
130
131 pub fn is_node(&self) -> bool {
132 !self.is_token()
133 }
134
135 pub fn is_whitespace(&self) -> bool {
136 matches!(self, SyntaxKind::Whitespace | SyntaxKind::Newline)
137 }
138
139 pub fn is_end_of_input(&self) -> bool {
140 matches!(self, SyntaxKind::EndOfInput)
141 }
142
143 pub fn is_assignment_operator(&self) -> bool {
144 matches!(
145 self,
146 SyntaxKind::Equals
147 | SyntaxKind::EqualsPlus
148 | SyntaxKind::EqualsDot
149 | SyntaxKind::WeakEquals
150 | SyntaxKind::DefaultEquals
151 | SyntaxKind::DotEquals
152 | SyntaxKind::PlusEquals
153 | SyntaxKind::ColonEquals
154 )
155 }
156}