Skip to content

Commit 2fe1bb8

Browse files
adjust checking for special tags
1 parent 1c5740b commit 2fe1bb8

File tree

1 file changed

+8
-16
lines changed

1 file changed

+8
-16
lines changed

crates/djls-template-ast/src/parser.rs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -155,26 +155,17 @@ impl Parser {
155155

156156
let specs = TagSpec::load_builtin_specs().unwrap_or_default();
157157

158-
// Check if this is a closing tag
158+
// Check if this is a closing or branch tag
159159
for (_, spec) in specs.iter() {
160-
if Some(&tag_name) == spec.closing.as_ref() {
161-
let node = Node::Django(DjangoNode::Tag(TagNode::Closing {
162-
name: tag_name.clone(),
163-
bits: bits[1..].to_vec(),
164-
}));
160+
if Some(&tag_name) == spec.closing.as_ref()
161+
|| spec.intermediates.as_ref()
162+
.map(|ints| ints.iter().any(|i| i.name == tag_name))
163+
.unwrap_or(false)
164+
{
165165
return Err(ParserError::ErrorSignal(Signal::SpecialTag(tag_name)));
166166
}
167167
}
168168

169-
// Check if this is a branch tag according to any spec
170-
for (_, spec) in specs.iter() {
171-
if let Some(intermediates) = &spec.intermediates {
172-
if intermediates.iter().any(|i| i.name == tag_name) {
173-
return Err(ParserError::ErrorSignal(Signal::SpecialTag(tag_name)));
174-
}
175-
}
176-
}
177-
178169
let tag_spec = specs.get(tag_name.as_str()).cloned();
179170
let mut children = Vec::new();
180171
let mut current_branch: Option<(String, Vec<String>, Vec<Node>)> = None;
@@ -212,7 +203,8 @@ impl Parser {
212203
}
213204
// Check if intermediate tag
214205
if let Some(intermediates) = &spec.intermediates {
215-
if let Some(intermediate) = intermediates.iter().find(|i| i.name == tag) {
206+
if let Some(intermediate) = intermediates.iter().find(|i| i.name == tag)
207+
{
216208
// If we have a current branch, add it to children
217209
if let Some((name, bits, branch_children)) = current_branch {
218210
children.push(Node::Django(DjangoNode::Tag(TagNode::Branch {

0 commit comments

Comments
 (0)