use oak_core::{TokenType, UniversalTokenRole};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum CppTokenType {
Whitespace,
Newline,
Comment,
StringLiteral,
CharacterLiteral,
IntegerLiteral,
FloatLiteral,
BooleanLiteral,
Identifier,
Keyword,
Plus,
Minus,
Star,
Slash,
Percent,
Assign,
PlusAssign,
MinusAssign,
StarAssign,
SlashAssign,
PercentAssign,
Equal,
NotEqual,
Less,
Greater,
LessEqual,
GreaterEqual,
LogicalAnd,
LogicalOr,
LogicalNot,
BitAnd,
BitOr,
BitXor,
BitNot,
LeftShift,
RightShift,
AndAssign,
OrAssign,
XorAssign,
LeftShiftAssign,
RightShiftAssign,
Increment,
Decrement,
Arrow,
Scope,
Question,
Colon,
Semicolon,
Comma,
Dot,
DotStar,
ArrowStar,
LeftParen,
RightParen,
LeftBracket,
RightBracket,
LeftBrace,
RightBrace,
Hash,
DoubleHash,
Preprocessor,
EndOfFile,
Unknown,
Error,
}
impl TokenType for CppTokenType {
type Role = UniversalTokenRole;
const END_OF_STREAM: Self = Self::EndOfFile;
fn role(&self) -> UniversalTokenRole {
match self {
Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
Self::Comment => UniversalTokenRole::Comment,
Self::StringLiteral | Self::CharacterLiteral | Self::IntegerLiteral | Self::FloatLiteral => UniversalTokenRole::Literal,
Self::BooleanLiteral => UniversalTokenRole::Keyword,
Self::Identifier => UniversalTokenRole::Name,
Self::Keyword => UniversalTokenRole::Keyword,
Self::Plus
| Self::Minus
| Self::Star
| Self::Slash
| Self::Percent
| Self::Assign
| Self::PlusAssign
| Self::MinusAssign
| Self::StarAssign
| Self::SlashAssign
| Self::PercentAssign
| Self::Equal
| Self::NotEqual
| Self::Less
| Self::Greater
| Self::LessEqual
| Self::GreaterEqual
| Self::LogicalAnd
| Self::LogicalOr
| Self::LogicalNot
| Self::BitAnd
| Self::BitOr
| Self::BitXor
| Self::BitNot
| Self::LeftShift
| Self::RightShift
| Self::AndAssign
| Self::OrAssign
| Self::XorAssign
| Self::LeftShiftAssign
| Self::RightShiftAssign
| Self::Increment
| Self::Decrement
| Self::Arrow
| Self::Scope
| Self::Question
| Self::Colon
| Self::Dot
| Self::DotStar
| Self::ArrowStar => UniversalTokenRole::Operator,
Self::Semicolon | Self::Comma => UniversalTokenRole::Punctuation,
Self::LeftParen | Self::RightParen | Self::LeftBracket | Self::RightBracket | Self::LeftBrace | Self::RightBrace => UniversalTokenRole::Punctuation,
Self::Hash | Self::DoubleHash | Self::Preprocessor => UniversalTokenRole::Operator,
Self::EndOfFile => UniversalTokenRole::Eof,
Self::Unknown | Self::Error => UniversalTokenRole::Error,
}
}
}