Skip to content

Commit 0ea2dea

Browse files
wip
1 parent 8bfead3 commit 0ea2dea

File tree

3 files changed

+27
-8
lines changed

3 files changed

+27
-8
lines changed

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,21 @@ pub enum TagNode {
5050
bits: Vec<String>,
5151
children: Vec<Node>,
5252
},
53-
Branching {
53+
Branch {
5454
name: String,
5555
bits: Vec<String>,
5656
children: Vec<Node>,
57-
branches: Vec<TagNode>,
57+
},
58+
Closing {
59+
name: String,
60+
bits: Vec<String>,
5861
},
5962
}
6063

6164
#[derive(Clone, Debug, Serialize)]
6265
pub struct DjangoFilter {
63-
name: String,
64-
arguments: Vec<String>,
66+
pub name: String,
67+
pub arguments: Vec<String>,
6568
}
6669

6770
impl DjangoFilter {

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,21 @@ use std::fs;
55
use std::path::Path;
66
use toml::Value;
77

8-
#[derive(Clone, Debug, Deserialize)]
8+
#[derive(Debug, Clone, Deserialize)]
99
pub struct TagSpec {
1010
#[serde(rename = "type")]
1111
pub tag_type: TagType,
1212
pub closing: Option<String>,
13-
pub intermediates: Option<Vec<String>>,
13+
pub intermediates: Option<Vec<IntermediateSpec>>,
1414
pub args: Option<Vec<ArgSpec>>,
1515
}
1616

17+
#[derive(Debug, Clone, Deserialize)]
18+
pub struct IntermediateSpec {
19+
pub name: String,
20+
pub args: bool,
21+
}
22+
1723
impl TagSpec {
1824
pub fn load_builtin_specs() -> Result<HashMap<String, TagSpec>> {
1925
let specs_dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("tagspecs");

crates/djls-template-ast/tagspecs/django.toml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
[django.template.defaulttags.if]
22
type = "block"
33
closing = "endif"
4-
intermediates = ["else", "elif"]
4+
5+
[[django.template.defaulttags.if.intermediates]]
6+
name = "elif"
7+
args = true
8+
9+
[[django.template.defaulttags.if.intermediates]]
10+
name = "else"
11+
args = false
512

613
[[django.template.defaulttags.if.args]]
714
name = "condition"
@@ -10,7 +17,10 @@ required = true
1017
[django.template.defaulttags.for]
1118
type = "block"
1219
closing = "endfor"
13-
intermediates = ["empty"]
20+
21+
[[django.template.defaulttags.for.intermediates]]
22+
name = "empty"
23+
args = false
1424

1525
[[django.template.defaulttags.for.args]]
1626
name = "{item}"

0 commit comments

Comments
 (0)