Skip to content

Commit 45b3758

Browse files
don't allocate string
1 parent ce5fc11 commit 45b3758

File tree

4 files changed

+16
-11
lines changed

4 files changed

+16
-11
lines changed

crates/djls-templates/src/lib.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ use djls_source::FileKind;
5959
pub use error::TemplateError;
6060
pub use lexer::Lexer;
6161
pub use nodelist::ErrorNode;
62+
use nodelist::Node;
6263
pub use nodelist::NodeList;
6364
pub use parser::ParseError;
6465
pub use parser::Parser;
@@ -101,12 +102,21 @@ pub fn parse_template(db: &dyn Db, file: File) -> Option<NodeList<'_>> {
101102
let nodelist = match Parser::new(db, token_stream).parse() {
102103
Ok(nodelist) => nodelist,
103104
Err(err) => {
104-
// Fatal error - accumulate and return empty
105+
// Fatal error - accumulate but still return an error node so spans remain intact
105106
let template_error = TemplateError::Parser(err.to_string());
106107
TemplateErrorAccumulator(template_error).accumulate(db);
107108

108-
let empty_nodelist = Vec::new();
109-
NodeList::new(db, empty_nodelist)
109+
let text = source.as_ref();
110+
let span = djls_source::Span::from_bounds(0, text.len());
111+
let error_node = Node::Error {
112+
node: ErrorNode {
113+
span,
114+
full_span: span,
115+
error: err,
116+
},
117+
};
118+
119+
NodeList::new(db, vec![error_node])
110120
}
111121
};
112122

crates/djls-templates/src/nodelist.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ impl<'db> Node<'db> {
8686

8787
#[derive(Clone, Debug, PartialEq, Eq, salsa::Update)]
8888
pub struct ErrorNode {
89-
pub content: String,
9089
pub span: Span,
9190
pub full_span: Span,
9291
pub error: ParseError,

crates/djls-templates/src/parser.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -265,19 +265,18 @@ impl<'db> Parser<'db> {
265265
.map(|token| {
266266
let span = span_from_token(token, self.db);
267267
let full_span = token.full_span().unwrap_or(span);
268-
(span, full_span, token.lexeme(self.db))
268+
(span, full_span)
269269
});
270270

271-
let (span, full_span, content) = spans.unwrap_or_else(|| {
271+
let (span, full_span) = spans.unwrap_or_else(|| {
272272
let empty = Span::new(0, 0);
273-
(empty, empty, String::new())
273+
(empty, empty)
274274
});
275275

276276
self.report_error(&error);
277277

278278
Node::Error {
279279
node: ErrorNode {
280-
content,
281280
span,
282281
full_span,
283282
error,
@@ -425,7 +424,6 @@ mod tests {
425424
full_span: (u32, u32),
426425
},
427426
Error {
428-
content: String,
429427
span: (u32, u32),
430428
full_span: (u32, u32),
431429
error: ParseError,
@@ -471,7 +469,6 @@ mod tests {
471469
full_span: (full_span.start, full_span.length),
472470
},
473471
Node::Error { node } => TestNode::Error {
474-
content: node.content.clone(),
475472
span: (node.span.start, node.span.length),
476473
full_span: (node.full_span.start, node.full_span.length),
477474
error: node.error.clone(),

crates/djls-templates/src/snapshots/djls_templates__parser__tests__errors__parse_unclosed_variable_token.snap

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ expression: test_nodelist
44
---
55
nodelist:
66
- type: Error
7-
content: " user"
87
span:
98
- 2
109
- 5

0 commit comments

Comments
 (0)