diff options
-rw-r--r-- | askama_derive/src/generator.rs | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/askama_derive/src/generator.rs b/askama_derive/src/generator.rs index 288ddae..16a08bb 100644 --- a/askama_derive/src/generator.rs +++ b/askama_derive/src/generator.rs @@ -1,5 +1,5 @@ use super::{get_template_source, Context, Heritage}; -use crate::input::TemplateInput; +use crate::input::{Source, TemplateInput}; use crate::parser::{ Cond, Expr, MatchParameter, MatchParameters, MatchVariant, Node, Target, When, WS, }; @@ -108,6 +108,21 @@ impl<'a> Generator<'a> { ::askama::Result<()> {", ); + // Make sure the compiler understands that the generated code depends on the template files. + for (path, _) in self.contexts { + // Skip the fake path of templates defined in rust source. + let path_is_valid = match self.input.source { + Source::Path(_) => true, + Source::Source(_) => *path != &self.input.path, + }; + if path_is_valid { + let path = path.to_str().unwrap(); + buf.writeln("e! { + include_bytes!(#path); + }.to_string()); + } + } + if let Some(heritage) = self.heritage { self.handle(heritage.root, heritage.root.nodes, buf, AstLevel::Top); } else { @@ -559,6 +574,15 @@ impl<'a> Generator<'a> { .find_template(path, Some(&self.input.path)); let src = get_template_source(&path); let nodes = parse(&src, self.input.syntax); + + // Make sure the compiler understands that the generated code depends on the template file. + { + let path = path.to_str().unwrap(); + buf.writeln("e! { + include_bytes!(#path); + }.to_string()); + } + { // Since nodes must not outlive the Generator, we instantiate // a nested Generator here to handle the include's nodes. |