squawk_parser/
syntax_kind.rs1pub use crate::generated::syntax_kind::SyntaxKind;
4
5impl From<u16> for SyntaxKind {
6 #[inline]
7 fn from(d: u16) -> SyntaxKind {
8 assert!(d <= (SyntaxKind::__LAST as u16));
9 unsafe { std::mem::transmute::<u16, SyntaxKind>(d) }
10 }
11}
12
13impl From<SyntaxKind> for u16 {
14 #[inline]
15 fn from(k: SyntaxKind) -> u16 {
16 k as u16
17 }
18}
19
20impl SyntaxKind {
21 #[inline]
22 pub fn is_trivia(self) -> bool {
23 matches!(self, SyntaxKind::WHITESPACE | SyntaxKind::COMMENT)
24 }
25}
26
27#[inline]
28pub fn is_reserved_keyword(kind: SyntaxKind) -> bool {
29 kind <= SyntaxKind::WHITESPACE && crate::generated::token_sets::RESERVED_KEYWORDS.contains(kind)
30}
31
32#[inline]
33pub fn is_col_name_keyword(kind: SyntaxKind) -> bool {
34 kind <= SyntaxKind::WHITESPACE
35 && crate::generated::token_sets::COL_NAME_KEYWORD_FIRST.contains(kind)
36}
37
38#[inline]
39pub fn is_type_func_name_keyword(kind: SyntaxKind) -> bool {
40 kind <= SyntaxKind::WHITESPACE
41 && crate::generated::token_sets::TYPE_FUNC_NAME_KEYWORDS.contains(kind)
42}
43
44#[cfg(test)]
45mod tests {
46 use super::{SyntaxKind, is_col_name_keyword, is_reserved_keyword, is_type_func_name_keyword};
47
48 #[test]
49 fn keyword_categories() {
50 assert!(is_reserved_keyword(SyntaxKind::SELECT_KW));
51 assert!(is_col_name_keyword(SyntaxKind::BETWEEN_KW));
52 assert!(is_type_func_name_keyword(SyntaxKind::LEFT_KW));
53
54 assert!(!is_reserved_keyword(SyntaxKind::IDENT));
55 assert!(!is_reserved_keyword(SyntaxKind::SELECT));
56 }
57}