@@ -6,7 +6,6 @@ use thiserror::Error;
66use crate :: db:: Db as TemplateDb ;
77use crate :: db:: TemplateErrorAccumulator ;
88use crate :: error:: TemplateError ;
9- use crate :: nodelist:: ErrorNode ;
109use crate :: nodelist:: FilterName ;
1110use crate :: nodelist:: Node ;
1211use crate :: nodelist:: NodeList ;
@@ -50,22 +49,16 @@ impl<'db> Parser<'db> {
5049 let empty = Span :: new ( 0 , 0 ) ;
5150 ( empty, empty)
5251 } ,
53- |token| {
54- let content_span = token. to_span ( self . db ) ;
55- let full_span = token. full_span ( ) . unwrap_or ( content_span) ;
56- ( content_span, full_span)
57- } ,
52+ |error_tok| error_tok. spans ( self . db ) ,
5853 ) ;
5954
6055 TemplateErrorAccumulator ( TemplateError :: Parser ( error. to_string ( ) ) )
6156 . accumulate ( self . db ) ;
6257
6358 nodelist. push ( Node :: Error {
64- node : ErrorNode {
65- span,
66- full_span,
67- error,
68- } ,
59+ span,
60+ full_span,
61+ error,
6962 } ) ;
7063
7164 if !self . is_at_end ( ) {
@@ -114,15 +107,15 @@ impl<'db> Parser<'db> {
114107 let name = TagName :: new ( self . db , name_str. to_string ( ) ) ;
115108
116109 let bits = parts. map ( |s| TagBit :: new ( self . db , s. to_string ( ) ) ) . collect ( ) ;
117- let span = token. to_span ( self . db ) ;
110+ let span = token. content_span_or_fallback ( self . db ) ;
118111
119112 Ok ( Node :: Tag { name, bits, span } )
120113 }
121114
122115 fn parse_comment ( & mut self ) -> Result < Node < ' db > , ParseError > {
123116 let token = self . peek_previous ( ) ?;
124117
125- let span = token. to_span ( self . db ) ;
118+ let span = token. content_span_or_fallback ( self . db ) ;
126119 Ok ( Node :: Comment {
127120 content : token. content ( self . db ) ,
128121 span,
@@ -151,7 +144,7 @@ impl<'db> Parser<'db> {
151144 let first_token = self . peek_previous ( ) ?;
152145 let first_span = first_token
153146 . full_span ( )
154- . unwrap_or_else ( || first_token. to_span ( self . db ) ) ;
147+ . unwrap_or_else ( || first_token. content_span_or_fallback ( self . db ) ) ;
155148 let start = first_span. start ;
156149 let mut end = first_span. start + first_span. length ;
157150
@@ -164,7 +157,9 @@ impl<'db> Parser<'db> {
164157 | Token :: Eof { .. } => break , // Stop at Django constructs
165158 Token :: Text { .. } | Token :: Whitespace { .. } | Token :: Newline { .. } => {
166159 // Update end position
167- let token_span = token. full_span ( ) . unwrap_or_else ( || token. to_span ( self . db ) ) ;
160+ let token_span = token
161+ . full_span ( )
162+ . unwrap_or_else ( || token. content_span_or_fallback ( self . db ) ) ;
168163 let token_end = token_span. start + token_span. length ;
169164 end = end. max ( token_end) ;
170165 self . consume ( ) ?;
@@ -202,7 +197,7 @@ impl<'db> Parser<'db> {
202197 FilterName :: new ( self . db , trimmed. to_string ( ) )
203198 } )
204199 . collect ( ) ;
205- let span = token. to_span ( self . db ) ;
200+ let span = token. content_span_or_fallback ( self . db ) ;
206201
207202 Ok ( Node :: Variable { var, filters, span } )
208203 }
@@ -429,10 +424,14 @@ mod tests {
429424 span : span. as_tuple ( ) ,
430425 full_span : node. full_span ( ) . as_tuple ( ) ,
431426 } ,
432- Node :: Error { node } => TestNode :: Error {
433- span : node. span . as_tuple ( ) ,
434- full_span : node. full_span . as_tuple ( ) ,
435- error : node. error . clone ( ) ,
427+ Node :: Error {
428+ span,
429+ full_span,
430+ error,
431+ } => TestNode :: Error {
432+ span : span. as_tuple ( ) ,
433+ full_span : full_span. as_tuple ( ) ,
434+ error : error. clone ( ) ,
436435 } ,
437436 }
438437 }
0 commit comments