diff options
| author | Ian Wrzesinski <133046678+wrzian@users.noreply.github.com> | 2024-10-22 09:25:52 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-22 13:25:52 +0000 |
| commit | b8034a343831e8609aec2ec81eb7eeda57aa5d81 (patch) | |
| tree | 88653a330c7d08e5e5eb302e9c5628b885c1723e /crates/typst-syntax/src/set.rs | |
| parent | 33b9d1c7db460e0ecb24762c08a8d3a085ba4e63 (diff) | |
Syntax set macro (#5138)
Co-authored-by: Laurenz <laurmaedje@gmail.com>
Diffstat (limited to 'crates/typst-syntax/src/set.rs')
| -rw-r--r-- | crates/typst-syntax/src/set.rs | 153 |
1 files changed, 58 insertions, 95 deletions
diff --git a/crates/typst-syntax/src/set.rs b/crates/typst-syntax/src/set.rs index 2297cacb..eaee7ef2 100644 --- a/crates/typst-syntax/src/set.rs +++ b/crates/typst-syntax/src/set.rs @@ -39,54 +39,34 @@ const fn bit(kind: SyntaxKind) -> u128 { 1 << (kind as usize) } +/// Generate a compile-time constant `SyntaxSet` of the given kinds. +macro_rules! syntax_set { + ($($kind:ident),* $(,)?) => {{ + const SET: crate::set::SyntaxSet = crate::set::SyntaxSet::new() + $(.add(crate::SyntaxKind:: $kind))*; + SET + }} +} + +// Export so other modules can import as: `use set::syntax_set` +pub(crate) use syntax_set; + /// Syntax kinds that can start a statement. -pub const STMT: SyntaxSet = SyntaxSet::new() - .add(SyntaxKind::Let) - .add(SyntaxKind::Set) - .add(SyntaxKind::Show) - .add(SyntaxKind::Import) - .add(SyntaxKind::Include) - .add(SyntaxKind::Return); - -/// Syntax kinds that can start a markup expression. -pub const MARKUP_EXPR: SyntaxSet = SyntaxSet::new() - .add(SyntaxKind::Space) - .add(SyntaxKind::Parbreak) - .add(SyntaxKind::LineComment) - .add(SyntaxKind::BlockComment) - .add(SyntaxKind::Text) - .add(SyntaxKind::Linebreak) - .add(SyntaxKind::Escape) - .add(SyntaxKind::Shorthand) - .add(SyntaxKind::SmartQuote) - .add(SyntaxKind::RawDelim) - .add(SyntaxKind::Link) - .add(SyntaxKind::Label) - .add(SyntaxKind::Hash) - .add(SyntaxKind::Star) - .add(SyntaxKind::Underscore) - .add(SyntaxKind::HeadingMarker) - .add(SyntaxKind::ListMarker) - .add(SyntaxKind::EnumMarker) - .add(SyntaxKind::TermMarker) - .add(SyntaxKind::RefMarker) - .add(SyntaxKind::Dollar) - .add(SyntaxKind::LeftBracket) - .add(SyntaxKind::RightBracket) - .add(SyntaxKind::Colon); +pub const STMT: SyntaxSet = syntax_set!(Let, Set, Show, Import, Include, Return); /// Syntax kinds that can start a math expression. -pub const MATH_EXPR: SyntaxSet = SyntaxSet::new() - .add(SyntaxKind::Hash) - .add(SyntaxKind::MathIdent) - .add(SyntaxKind::Text) - .add(SyntaxKind::MathShorthand) - .add(SyntaxKind::Linebreak) - .add(SyntaxKind::MathAlignPoint) - .add(SyntaxKind::Escape) - .add(SyntaxKind::Str) - .add(SyntaxKind::Root) - .add(SyntaxKind::Prime); +pub const MATH_EXPR: SyntaxSet = syntax_set!( + Hash, + MathIdent, + Text, + MathShorthand, + Linebreak, + MathAlignPoint, + Escape, + Str, + Root, + Prime, +); /// Syntax kinds that can start a code expression. pub const CODE_EXPR: SyntaxSet = CODE_PRIMARY.union(UNARY_OP); @@ -98,60 +78,43 @@ pub const ATOMIC_CODE_EXPR: SyntaxSet = ATOMIC_CODE_PRIMARY; pub const CODE_PRIMARY: SyntaxSet = ATOMIC_CODE_PRIMARY.add(SyntaxKind::Underscore); /// Syntax kinds that can start an atomic code primary. -pub const ATOMIC_CODE_PRIMARY: SyntaxSet = SyntaxSet::new() - .add(SyntaxKind::Ident) - .add(SyntaxKind::LeftBrace) - .add(SyntaxKind::LeftBracket) - .add(SyntaxKind::LeftParen) - .add(SyntaxKind::Dollar) - .add(SyntaxKind::Let) - .add(SyntaxKind::Set) - .add(SyntaxKind::Show) - .add(SyntaxKind::Context) - .add(SyntaxKind::If) - .add(SyntaxKind::While) - .add(SyntaxKind::For) - .add(SyntaxKind::Import) - .add(SyntaxKind::Include) - .add(SyntaxKind::Break) - .add(SyntaxKind::Continue) - .add(SyntaxKind::Return) - .add(SyntaxKind::None) - .add(SyntaxKind::Auto) - .add(SyntaxKind::Int) - .add(SyntaxKind::Float) - .add(SyntaxKind::Bool) - .add(SyntaxKind::Numeric) - .add(SyntaxKind::Str) - .add(SyntaxKind::Label) - .add(SyntaxKind::RawDelim); +pub const ATOMIC_CODE_PRIMARY: SyntaxSet = syntax_set!( + Ident, + LeftBrace, + LeftBracket, + LeftParen, + Dollar, + Let, + Set, + Show, + Context, + If, + While, + For, + Import, + Include, + Break, + Continue, + Return, + None, + Auto, + Int, + Float, + Bool, + Numeric, + Str, + Label, + RawDelim, +); /// Syntax kinds that are unary operators. -pub const UNARY_OP: SyntaxSet = SyntaxSet::new() - .add(SyntaxKind::Plus) - .add(SyntaxKind::Minus) - .add(SyntaxKind::Not); +pub const UNARY_OP: SyntaxSet = syntax_set!(Plus, Minus, Not); /// Syntax kinds that are binary operators. -pub const BINARY_OP: SyntaxSet = SyntaxSet::new() - .add(SyntaxKind::Plus) - .add(SyntaxKind::Minus) - .add(SyntaxKind::Star) - .add(SyntaxKind::Slash) - .add(SyntaxKind::And) - .add(SyntaxKind::Or) - .add(SyntaxKind::EqEq) - .add(SyntaxKind::ExclEq) - .add(SyntaxKind::Lt) - .add(SyntaxKind::LtEq) - .add(SyntaxKind::Gt) - .add(SyntaxKind::GtEq) - .add(SyntaxKind::Eq) - .add(SyntaxKind::In) - .add(SyntaxKind::PlusEq) - .add(SyntaxKind::HyphEq) - .add(SyntaxKind::StarEq) - .add(SyntaxKind::SlashEq); +pub const BINARY_OP: SyntaxSet = syntax_set!( + Plus, Minus, Star, Slash, And, Or, EqEq, ExclEq, Lt, LtEq, Gt, GtEq, Eq, In, PlusEq, + HyphEq, StarEq, SlashEq, +); /// Syntax kinds that can start an argument in a function call. pub const ARRAY_OR_DICT_ITEM: SyntaxSet = CODE_EXPR.add(SyntaxKind::Dots); |
