aboutsummaryrefslogtreecommitdiffstats
path: root/askama_derive/src/lib.rs
diff options
context:
space:
mode:
authorLibravatar Dirkjan Ochtman <dirkjan@ochtman.nl>2018-06-15 21:16:01 +0200
committerLibravatar Dirkjan Ochtman <dirkjan@ochtman.nl>2018-06-15 21:16:01 +0200
commit79c187870c41f3a20ac940873730451f293f3aec (patch)
tree0d60f99b207be1aa58850d85a6ca7558a3f7a71c /askama_derive/src/lib.rs
parent4feb832b6b2a164fb5a8b0431367d211fe54a59d (diff)
downloadaskama-79c187870c41f3a20ac940873730451f293f3aec.tar.gz
askama-79c187870c41f3a20ac940873730451f293f3aec.tar.bz2
askama-79c187870c41f3a20ac940873730451f293f3aec.zip
Handle imports as part of code generation
Diffstat (limited to '')
-rw-r--r--askama_derive/src/lib.rs42
1 files changed, 1 insertions, 41 deletions
diff --git a/askama_derive/src/lib.rs b/askama_derive/src/lib.rs
index 1faebec..b14b16f 100644
--- a/askama_derive/src/lib.rs
+++ b/askama_derive/src/lib.rs
@@ -12,13 +12,7 @@ mod generator;
mod parser;
use input::Print;
-use parser::{Macro, Node};
use proc_macro::TokenStream;
-use shared::path;
-
-use std::borrow::Cow;
-use std::collections::HashMap;
-use std::path::Path;
#[proc_macro_derive(Template, attributes(template))]
pub fn derive_template(input: TokenStream) -> TokenStream {
@@ -40,46 +34,12 @@ pub fn derive_template(input: TokenStream) -> TokenStream {
fn build_template(ast: &syn::DeriveInput) -> String {
let data = input::TemplateInput::new(ast);
let nodes = parser::parse(data.source.as_ref());
- let imports = Imports::new(&nodes, &data.path);
if data.meta.print == Print::Ast || data.meta.print == Print::All {
println!("{:?}", nodes);
}
- let code = generator::generate(&data, &nodes, &imports.macro_map());
+ let code = generator::generate(&data, &nodes);
if data.meta.print == Print::Code || data.meta.print == Print::All {
println!("{}", code);
}
code
}
-
-struct Imports<'a> {
- sources: HashMap<&'a str, Cow<'a, str>>,
-}
-
-impl<'a> Imports<'a> {
- fn new(parent_nodes: &'a [Node], parent_path: &'a Path) -> Imports<'a> {
- let sources = parent_nodes.iter().filter_map(|n| {
- match *n {
- Node::Import(_, import_path, scope) => {
- let path = path::find_template_from_path(import_path, Some(parent_path));
- let src = path::get_template_source(&path);
- Some((scope, Cow::Owned(src)))
- },
- _ => None,
- }
- }).collect();
- Imports { sources }
- }
-
- fn macro_map(&'a self) -> HashMap<(&'a str, &'a str), Macro<'a>> {
- let mut macro_map = HashMap::new();
- for (scope, s) in &self.sources {
- for n in parser::parse(s.as_ref()) {
- match n {
- Node::Macro(name, m) => macro_map.insert((*scope, name), m),
- _ => None,
- };
- }
- }
- macro_map
- }
-}