Skip to main content

oak_solidity/lexer/
token_type.rs

1use oak_core::{TokenType, UniversalTokenRole};
2
3/// Solidity token types.
4#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum SolidityTokenType {
7    /// End of file.
8    Eof,
9    /// Whitespace.
10    Whitespace,
11    /// Comment.
12    Comment,
13    /// Identifier.
14    Identifier,
15    /// String literal.
16    String,
17    /// Number literal.
18    Number,
19    /// "pragma" keyword.
20    Pragma,
21    /// "contract" keyword.
22    Contract,
23}
24
25impl TokenType for SolidityTokenType {
26    type Role = UniversalTokenRole;
27    const END_OF_STREAM: Self = Self::Eof;
28
29    fn is_ignored(&self) -> bool {
30        matches!(self, Self::Whitespace | Self::Comment)
31    }
32
33    fn role(&self) -> Self::Role {
34        match self {
35            Self::Eof => UniversalTokenRole::Eof,
36            Self::Whitespace => UniversalTokenRole::Whitespace,
37            Self::Comment => UniversalTokenRole::Comment,
38            Self::Identifier => UniversalTokenRole::Name,
39            Self::String | Self::Number => UniversalTokenRole::Literal,
40            Self::Pragma | Self::Contract => UniversalTokenRole::Keyword,
41        }
42    }
43}