From 2fe1bb8fd66253c2a9b7d8bfa959debd92484ecd Mon Sep 17 00:00:00 2001 From: Josh Date: Sat, 4 Jan 2025 15:42:27 -0600 Subject: [PATCH] adjust checking for special tags --- crates/djls-template-ast/src/parser.rs | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/crates/djls-template-ast/src/parser.rs b/crates/djls-template-ast/src/parser.rs index e7bdfe2..72e0dba 100644 --- a/crates/djls-template-ast/src/parser.rs +++ b/crates/djls-template-ast/src/parser.rs @@ -155,26 +155,17 @@ impl Parser { let specs = TagSpec::load_builtin_specs().unwrap_or_default(); - // Check if this is a closing tag + // Check if this is a closing or branch tag for (_, spec) in specs.iter() { - if Some(&tag_name) == spec.closing.as_ref() { - let node = Node::Django(DjangoNode::Tag(TagNode::Closing { - name: tag_name.clone(), - bits: bits[1..].to_vec(), - })); + if Some(&tag_name) == spec.closing.as_ref() + || spec.intermediates.as_ref() + .map(|ints| ints.iter().any(|i| i.name == tag_name)) + .unwrap_or(false) + { return Err(ParserError::ErrorSignal(Signal::SpecialTag(tag_name))); } } - // Check if this is a branch tag according to any spec - for (_, spec) in specs.iter() { - if let Some(intermediates) = &spec.intermediates { - if intermediates.iter().any(|i| i.name == tag_name) { - return Err(ParserError::ErrorSignal(Signal::SpecialTag(tag_name))); - } - } - } - let tag_spec = specs.get(tag_name.as_str()).cloned(); let mut children = Vec::new(); let mut current_branch: Option<(String, Vec, Vec)> = None; @@ -212,7 +203,8 @@ impl Parser { } // Check if intermediate tag if let Some(intermediates) = &spec.intermediates { - if let Some(intermediate) = intermediates.iter().find(|i| i.name == tag) { + if let Some(intermediate) = intermediates.iter().find(|i| i.name == tag) + { // If we have a current branch, add it to children if let Some((name, bits, branch_children)) = current_branch { children.push(Node::Django(DjangoNode::Tag(TagNode::Branch {