Skip to content

Commit 49f97e6

Browse files
authored
Scopes and for loop support (#103)
* add docs to context vars * add tests * add basic scope and for loop support * remove log * fix style * improve resolve completion * remove unused import * add tests * add hover test for for loop * fix with django variable transform * fix clear completions cache * change as requested
1 parent 597a0c6 commit 49f97e6

File tree

4 files changed

+373
-88
lines changed

4 files changed

+373
-88
lines changed

djlsp/index.py

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
from dataclasses import dataclass, field
22

33

4+
@dataclass
5+
class Variable:
6+
type: str | None = None
7+
docs: str = ""
8+
value: str = ""
9+
10+
411
@dataclass
512
class Template:
613
name: str = ""
714
path: str = ""
815
extends: str | None = None
916
blocks: list[str] | None = None
10-
context: dict = field(default_factory=dict)
17+
context: dict[str, Variable] = field(default_factory=dict)
1118

1219

1320
@dataclass
@@ -22,7 +29,7 @@ class Tag:
2229
name: str = ""
2330
docs: str = ""
2431
source: str = ""
25-
inner_tags: list[str] = ""
32+
inner_tags: list[str] = field(default_factory=list)
2633
closing_tag: str = ""
2734

2835

@@ -44,12 +51,12 @@ class Library:
4451
class WorkspaceIndex:
4552
src_path: str = ""
4653
env_path: str = ""
47-
file_watcher_globs: [str] = field(default_factory=list)
48-
static_files: [str] = field(default_factory=list)
54+
file_watcher_globs: list[str] = field(default_factory=list)
55+
static_files: list[str] = field(default_factory=list)
4956
urls: dict[str, Url] = field(default_factory=dict)
5057
libraries: dict[str, Library] = field(default_factory=dict)
5158
templates: dict[str, Template] = field(default_factory=dict)
52-
global_template_context: dict[str, str] = field(default_factory=dict)
59+
global_template_context: dict[str, Variable] = field(default_factory=dict)
5360

5461
def update(self, django_data: dict):
5562
self.file_watcher_globs = django_data.get(
@@ -91,8 +98,26 @@ def update(self, django_data: dict):
9198
}
9299

93100
self.templates = {
94-
name: Template(name=name, **options)
101+
name: Template(
102+
name=name,
103+
**{
104+
**options,
105+
"context": {
106+
var_name: (
107+
Variable(**type_)
108+
if isinstance(type_, dict)
109+
else Variable(type=type_)
110+
)
111+
for var_name, type_ in options.get("context", {}).items()
112+
},
113+
},
114+
)
95115
for name, options in django_data.get("templates", {}).items()
96116
}
97117

98-
self.global_template_context = django_data.get("global_template_context", {})
118+
self.global_template_context = {
119+
name: (
120+
Variable(**type_) if isinstance(type_, dict) else Variable(type=type_)
121+
)
122+
for name, type_ in django_data.get("global_template_context", {}).items()
123+
}

0 commit comments

Comments
 (0)