litelighter/src/syntax/types.rs

30 lines
606 B
Rust
Raw Normal View History

2022-11-21 17:24:23 -06:00
use lua_patterns::LuaPattern;
use pcre2::bytes::Regex;
use enum_as_inner::EnumAsInner;
use crate::tokenizer::types::TokenKind;
pub type Syntax<'r> = Vec<Rule<'r>>;
pub enum RegexOrPattern<'r> {
Regex(Regex),
Pattern(LuaPattern<'r>)
}
pub enum PatternTypes<'r> {
Type1(RegexOrPattern<'r>),
Type2([RegexOrPattern<'r>; 2]),
Type3([RegexOrPattern<'r>; 3])
}
#[derive(EnumAsInner)]
pub enum KindOrSubsyntax<'r> {
Kind(TokenKind<'r>),
Subsyntax(Syntax<'r>)
}
pub struct Rule<'r> {
pub pattern: PatternTypes<'r>,
pub group: KindOrSubsyntax<'r>,
pub whole_line: bool
}