oak_bash/lexer/
token_type.rs1use oak_core::{TokenType, UniversalTokenRole};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
5#[repr(u16)]
6pub enum BashTokenType {
8 Whitespace,
10 Newline,
12 Comment,
14 StringLiteral,
16 Variable,
18 NumberLiteral,
20 Identifier,
22 Keyword,
24 Operator,
26 Delimiter,
28 Command,
30 Path,
32 Heredoc,
34 GlobPattern,
36 SpecialChar,
38 Text,
40 Error,
42 Eof,
44}
45
46impl TokenType for BashTokenType {
47 const END_OF_STREAM: Self = Self::Eof;
48 type Role = UniversalTokenRole;
49
50 fn is_ignored(&self) -> bool {
51 matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
52 }
53
54 fn is_comment(&self) -> bool {
55 matches!(self, Self::Comment)
56 }
57
58 fn is_whitespace(&self) -> bool {
59 matches!(self, Self::Whitespace | Self::Newline)
60 }
61
62 fn role(&self) -> Self::Role {
63 match self {
64 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
65 Self::Comment => UniversalTokenRole::Comment,
66 Self::Keyword => UniversalTokenRole::Keyword,
67 Self::Identifier | Self::Variable | Self::Command => UniversalTokenRole::Name,
68 Self::StringLiteral | Self::NumberLiteral => UniversalTokenRole::Literal,
69 Self::Operator => UniversalTokenRole::Operator,
70 Self::Delimiter | Self::SpecialChar => UniversalTokenRole::Punctuation,
71 Self::Eof => UniversalTokenRole::Eof,
72 Self::Error => UniversalTokenRole::Error,
73 _ => UniversalTokenRole::None,
74 }
75 }
76}