use oak_core::{Token, TokenType, UniversalTokenRole};
pub type VueToken = Token<VueTokenType>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum VueTokenType {
Whitespace,
Comment,
Import, Export, Default, From, As, Const, Let, Var, Function, If, Else, While, For, Return, Break, Continue, Switch, Try, Throw, In, Of, True, False, Null,
Identifier,
StringLiteral,
NumberLiteral,
BooleanLiteral,
NullLiteral,
Text,
Plus, Minus, Star, Slash, Percent, Eq, EqEq, EqEqEq, NotEq, NotEqEq, Lt, Gt, LtEq, GtEq, And, Or, Bang, PlusPlus, MinusMinus, Dot, Arrow, Colon, Comma, Semicolon, Question, Amp, Pipe, Hash, At,
LeftParen, RightParen, LeftBrace, RightBrace, LeftBracket, RightBracket,
InterpolationStart, InterpolationEnd, SlashGt, LtSlash,
ScriptStart, StyleStart, TemplateStart, DocTypeStart,
Eof,
Error,
Root,
Directive,
Modifier,
TemplateElement,
Program,
Element,
Tag, CloseTag, DocType, Attribute,
AttributeName,
AttributeValue,
Interpolation,
TextNode,
CommentNode,
Expression,
Literal,
BinaryExpr,
UnaryExpr,
CallExpr,
MemberExpr,
ArrayExpr,
ObjectExpr,
ObjectProperty,
ArrowFunction,
ConditionalExpr,
TemplateLiteral,
ForExpr,
ForInExpr,
ForOfExpr,
Pattern,
ImportStmt,
ImportSpecifier,
ExportStmt,
VariableDecl,
VariableDeclarator,
FunctionDecl,
ExpressionStmt,
ReturnStmt,
IfStmt,
WhileStmt,
ForStmt,
BlockStmt,
BreakStmt,
ContinueStmt,
TseElement,
TseAttribute,
}
impl TokenType for VueTokenType {
type Role = UniversalTokenRole;
const END_OF_STREAM: Self = Self::Eof;
fn is_ignored(&self) -> bool {
matches!(self, Self::Whitespace | Self::Comment)
}
fn role(&self) -> Self::Role {
match self {
Self::Import | Self::Export | Self::Default | Self::Const | Self::Let | Self::Var | Self::Function | Self::If | Self::Else | Self::While | Self::For | Self::Return | Self::True | Self::False | Self::Null => UniversalTokenRole::Keyword,
Self::Identifier => UniversalTokenRole::Name,
Self::StringLiteral => UniversalTokenRole::Literal,
Self::NumberLiteral => UniversalTokenRole::Literal,
Self::Text => UniversalTokenRole::Literal,
Self::Plus | Self::Minus | Self::Star | Self::Slash | Self::Eq | Self::Dot | Self::Colon | Self::Comma | Self::Semicolon | Self::Hash | Self::At | Self::Question | Self::Bang | Self::Amp | Self::Pipe | Self::Percent | Self::Lt | Self::Gt => {
UniversalTokenRole::Operator
}
Self::LeftParen | Self::RightParen | Self::LeftBrace | Self::RightBrace | Self::LeftBracket | Self::RightBracket => UniversalTokenRole::Punctuation,
Self::InterpolationStart | Self::InterpolationEnd | Self::SlashGt | Self::LtSlash => UniversalTokenRole::Punctuation,
Self::ScriptStart | Self::StyleStart | Self::TemplateStart | Self::DocTypeStart => UniversalTokenRole::Keyword,
Self::Whitespace => UniversalTokenRole::Whitespace,
Self::Comment => UniversalTokenRole::Comment,
Self::Error => UniversalTokenRole::Error,
_ => UniversalTokenRole::None,
}
}
}