litelighter/src/syntax/types.rs
2022-11-22 00:24:23 +01:00

30 lines
606 B
Rust

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
}