#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(u16)]
pub enum SyntaxKind {
Whitespace = 0,
LineComment,
BlockComment,
Ident,
DelimitedIdent,
SingleQuotedString,
DoubleQuotedString,
TripleQuotedString,
Integer,
Decimal,
LongNumber,
Date,
DateTime,
Time,
DollarIdent,
MetadataPrefix,
LParen,
RParen,
LBrace,
RBrace,
LBracket,
RBracket,
Comma,
Semicolon,
Colon,
Dot,
DotDot,
Arrow,
Eq,
EqEq,
Neq,
Tilde,
NotTilde,
Lt,
Le,
Gt,
Ge,
Shl,
Shr,
Plus,
Minus,
Star,
Slash,
Amp,
Pipe,
Percent,
Unknown,
SourceFile,
Metadata,
ConceptMap,
ConceptMapPrefix,
ConceptMapUnmapped,
ConceptMapEntry,
ConceptMapCode,
ConceptMapRelation,
MapDeclaration,
UsesDeclaration,
UsesAlias,
ImportsDeclaration,
ConstantDeclaration,
Group,
ParameterList,
Parameter,
TypeAnnotation,
ExtendsClause,
TypeMode,
RuleBlock,
Rule,
SourceList,
Source,
Cardinality,
DefaultClause,
SourceListMode,
Alias,
WhereClause,
CheckClause,
LogClause,
TargetList,
Target,
Transform,
TargetListMode,
Invocation,
ArgumentList,
DependentClause,
IdentityList,
RuleName,
QualifiedName,
Literal,
Quantity,
NameRef,
ExternalConstant,
ParenExpr,
MemberExpr,
CallExpr,
IndexExpr,
PrefixExpr,
BinaryExpr,
TypeExpr,
NullLiteral,
Error,
}
impl SyntaxKind {
pub fn is_trivia(self) -> bool {
matches!(
self,
SyntaxKind::Whitespace | SyntaxKind::LineComment | SyntaxKind::BlockComment
)
}
pub fn is_comment(self) -> bool {
matches!(self, SyntaxKind::LineComment | SyntaxKind::BlockComment)
}
fn from_raw(raw: u16) -> SyntaxKind {
assert!(raw <= SyntaxKind::Error as u16, "invalid syntax kind {raw}");
unsafe { std::mem::transmute::<u16, SyntaxKind>(raw) }
}
}
impl From<SyntaxKind> for rowan::SyntaxKind {
fn from(kind: SyntaxKind) -> Self {
rowan::SyntaxKind(kind as u16)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum FmlLanguage {}
impl rowan::Language for FmlLanguage {
type Kind = SyntaxKind;
fn kind_from_raw(raw: rowan::SyntaxKind) -> SyntaxKind {
SyntaxKind::from_raw(raw.0)
}
fn kind_to_raw(kind: SyntaxKind) -> rowan::SyntaxKind {
kind.into()
}
}
pub type SyntaxNode = rowan::SyntaxNode<FmlLanguage>;
pub type SyntaxToken = rowan::SyntaxToken<FmlLanguage>;
pub type SyntaxElement = rowan::SyntaxElement<FmlLanguage>;