Add parsing for conditionals (cont.)

Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
Marcel Müller 2026-03-08 15:06:29 +01:00
parent 974086a877
commit 8afc2d1bde
29 changed files with 994 additions and 746 deletions

View file

@ -245,12 +245,28 @@ impl<const LEN: usize> winnow::stream::ContainsToken<&'_ TemplateToken> for [Tok
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Clone, PartialEq, Eq)]
pub struct TemplateToken {
kind: TokenKind,
source: NomoInput,
}
impl std::fmt::Debug for TemplateToken {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self.source())
}
}
impl Location for TemplateToken {
fn previous_token_end(&self) -> usize {
NomoInput::get_range(&self.source).start
}
fn current_token_start(&self) -> usize {
NomoInput::get_range(&self.source).start
}
}
macro_rules! impl_token_kind_builders {
($($name:ident => $kind:expr),+ $(,)?) => {
$(
@ -459,10 +475,7 @@ mod tests {
Ok(
ParsedTemplate {
tokens: [
TemplateToken {
kind: Content,
source: "Hello There",
},
"Hello There" (0..11),
],
},
)
@ -478,34 +491,13 @@ mod tests {
Ok(
ParsedTemplate {
tokens: [
TemplateToken {
kind: Content,
source: "Hello",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: LeftDelim,
source: "{{",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: Ident,
source: "there",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: RightDelim,
source: "}}",
},
"Hello" (0..5),
" " (5..6),
"{{" (6..8),
" " (8..9),
"there" (9..14),
" " (14..15),
"}}" (15..17),
],
},
)
@ -555,70 +547,21 @@ mod tests {
Ok(
ParsedTemplate {
tokens: [
TemplateToken {
kind: LeftDelim,
source: "{{",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: ConditionalIf,
source: "if",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: Literal(
Bool(
true,
),
),
source: "true",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: RightDelim,
source: "}}",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: Content,
source: "Hello!",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: LeftDelim,
source: "{{",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: End,
source: "end",
},
TemplateToken {
kind: Whitespace,
source: " ",
},
TemplateToken {
kind: RightDelim,
source: "}}",
},
"{{" (0..2),
" " (2..3),
"if" (3..5),
" " (5..6),
"true" (6..10),
" " (10..11),
"}}" (11..13),
" " (13..14),
"Hello!" (14..20),
" " (20..21),
"{{" (21..23),
" " (23..24),
"end" (24..27),
" " (27..28),
"}}" (28..30),
],
},
)