aboutsummaryrefslogtreecommitdiffstats
path: root/askama_parser
diff options
context:
space:
mode:
authorLibravatar René Kijewski <rene.kijewski@fu-berlin.de>2023-08-01 04:22:52 +0200
committerLibravatar Dirkjan Ochtman <dirkjan@ochtman.nl>2023-08-01 13:04:41 +0200
commit1521a08a20b6631b54d4ecbbbfcb4260e393bc97 (patch)
treeed0322763c5cf7fe2f12a2cdc559068bd8a87df3 /askama_parser
parent14df8e16c1b2803b23b4bf6eda3bc0e3a5fe5354 (diff)
downloadaskama-1521a08a20b6631b54d4ecbbbfcb4260e393bc97.tar.gz
askama-1521a08a20b6631b54d4ecbbbfcb4260e393bc97.tar.bz2
askama-1521a08a20b6631b54d4ecbbbfcb4260e393bc97.zip
parser: add type for `Node::Extends`
Diffstat (limited to 'askama_parser')
-rw-r--r--askama_parser/src/lib.rs4
-rw-r--r--askama_parser/src/node.rs21
2 files changed, 16 insertions, 9 deletions
diff --git a/askama_parser/src/lib.rs b/askama_parser/src/lib.rs
index 6822233..bd7edde 100644
--- a/askama_parser/src/lib.rs
+++ b/askama_parser/src/lib.rs
@@ -16,8 +16,8 @@ use nom::{error_position, AsChar, IResult, InputTakeAtPosition};
pub use self::expr::Expr;
pub use self::node::{
- BlockDef, Call, Cond, CondTest, If, Import, Include, Let, Lit, Loop, Macro, Match, Node, Raw,
- Target, When, Whitespace, Ws,
+ BlockDef, Call, Cond, CondTest, Extends, If, Import, Include, Let, Lit, Loop, Macro, Match,
+ Node, Raw, Target, When, Whitespace, Ws,
};
mod expr;
diff --git a/askama_parser/src/node.rs b/askama_parser/src/node.rs
index cb6da92..b955549 100644
--- a/askama_parser/src/node.rs
+++ b/askama_parser/src/node.rs
@@ -24,7 +24,7 @@ pub enum Node<'a> {
If(If<'a>),
Match(Match<'a>),
Loop(Loop<'a>),
- Extends(&'a str),
+ Extends(Extends<'a>),
BlockDef(BlockDef<'a>),
Include(Include<'a>),
Import(Import<'a>),
@@ -53,7 +53,7 @@ impl<'a> Node<'a> {
map(|i| If::parse(i, s), Self::If),
|i| Self::r#for(i, s),
map(|i| Match::parse(i, s), Self::Match),
- Self::extends,
+ map(Extends::parse, Self::Extends),
map(Include::parse, Self::Include),
map(Import::parse, Self::Import),
map(|i| BlockDef::parse(i, s), Self::BlockDef),
@@ -135,11 +135,6 @@ impl<'a> Node<'a> {
))
}
- fn extends(i: &'a str) -> IResult<&'a str, Self> {
- let (i, (_, name)) = tuple((ws(keyword("extends")), ws(str_lit)))(i)?;
- Ok((i, Self::Extends(name)))
- }
-
fn r#break(i: &'a str, s: &State<'_>) -> IResult<&'a str, Self> {
let mut p = tuple((
opt(Whitespace::parse),
@@ -857,6 +852,18 @@ impl<'a> Include<'a> {
}
}
+#[derive(Debug, PartialEq)]
+pub struct Extends<'a> {
+ pub path: &'a str,
+}
+
+impl<'a> Extends<'a> {
+ fn parse(i: &'a str) -> IResult<&'a str, Self> {
+ let (i, path) = preceded(ws(keyword("extends")), cut(ws(str_lit)))(i)?;
+ Ok((i, Self { path }))
+ }
+}
+
/// First field is "minus/plus sign was used on the left part of the item".
///
/// Second field is "minus/plus sign was used on the right part of the item".