mirror of
https://github.com/joshuadavidthomas/django-language-server.git
synced 2025-09-11 21:06:31 +00:00
adjust checking for special tags
This commit is contained in:
parent
1c5740b4f6
commit
2fe1bb8fd6
1 changed files with 8 additions and 16 deletions
|
@ -155,26 +155,17 @@ impl Parser {
|
||||||
|
|
||||||
let specs = TagSpec::load_builtin_specs().unwrap_or_default();
|
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() {
|
for (_, spec) in specs.iter() {
|
||||||
if Some(&tag_name) == spec.closing.as_ref() {
|
if Some(&tag_name) == spec.closing.as_ref()
|
||||||
let node = Node::Django(DjangoNode::Tag(TagNode::Closing {
|
|| spec.intermediates.as_ref()
|
||||||
name: tag_name.clone(),
|
.map(|ints| ints.iter().any(|i| i.name == tag_name))
|
||||||
bits: bits[1..].to_vec(),
|
.unwrap_or(false)
|
||||||
}));
|
{
|
||||||
return Err(ParserError::ErrorSignal(Signal::SpecialTag(tag_name)));
|
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 tag_spec = specs.get(tag_name.as_str()).cloned();
|
||||||
let mut children = Vec::new();
|
let mut children = Vec::new();
|
||||||
let mut current_branch: Option<(String, Vec<String>, Vec<Node>)> = None;
|
let mut current_branch: Option<(String, Vec<String>, Vec<Node>)> = None;
|
||||||
|
@ -212,7 +203,8 @@ impl Parser {
|
||||||
}
|
}
|
||||||
// Check if intermediate tag
|
// Check if intermediate tag
|
||||||
if let Some(intermediates) = &spec.intermediates {
|
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 we have a current branch, add it to children
|
||||||
if let Some((name, bits, branch_children)) = current_branch {
|
if let Some((name, bits, branch_children)) = current_branch {
|
||||||
children.push(Node::Django(DjangoNode::Tag(TagNode::Branch {
|
children.push(Node::Django(DjangoNode::Tag(TagNode::Branch {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue