Add parsing for conditionals (cont.)
Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
parent
974086a877
commit
8afc2d1bde
29 changed files with 994 additions and 746 deletions
|
|
@ -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),
|
||||
],
|
||||
},
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue