chiark / gitweb /
specs: spec_macroexpand diagnostic facility
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 8 Jun 2021 00:00:29 +0000 (01:00 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 8 Jun 2021 00:28:59 +0000 (01:28 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bundles.rs

index 408d5516aa453794e39ccded2334cf6381d08bcc..8490d8cb6960268380d9585bbed139c3db7891a7 100644 (file)
@@ -890,7 +890,10 @@ fn make_usvg(instance_name: &str, bundle_name: &str, za: &mut IndexedZip,
 //---------- specs ----------
 
 #[throws(anyhow::Error)]
-pub fn spec_macroexpand(input: String) -> String {
+pub fn spec_macroexpand(
+  input: String,
+  report: &mut dyn FnMut(&'static str, &str) -> Result<(),AE>,
+) -> String {
   if ! input.starts_with("{#") { return input }
 
   let templates: Vec<(&str, Cow<str>)> = match input.rfind("\n{% endmacro") {
@@ -909,11 +912,17 @@ pub fn spec_macroexpand(input: String) -> String {
             ("spec", spec_data.into()) ]
     },
   };
+
+  for (nomfile, data) in &templates { report(nomfile, data)?; }
+
   let mut tera = tera_standalone::Tera::default();
   tera.add_raw_templates(templates).context("load")?;
   let mut out: Vec<u8> = vec![];
   tera.render_to("spec", &default(), &mut out).context("render")?;
   let out = String::from_utf8(out).context("reparse as utf-8")?;
+
+  report("out", &out)?;
+
   out
 }
 
@@ -929,7 +938,7 @@ pub fn load_spec_to_read(ig: &Instance, spec_name: &str) -> String {
       _ => e_f(e),
     })?;
 
-    spec_macroexpand(buf)
+    spec_macroexpand(buf, &mut |_,_|Ok(()))
       .map_err(|ae| ME::BadBundle(
         format!("process spec as Tera template: {}", ae.d())
       ))?