]> git.huck.website - metaforge.git/commitdiff
added: output for verbose mode
authorHuck Boles <huck@huck.website>
Sat, 20 May 2023 21:34:55 +0000 (16:34 -0500)
committerHuck Boles <huck@huck.website>
Sat, 20 May 2023 21:34:55 +0000 (16:34 -0500)
src/builder.rs
src/builder/array.rs
src/builder/pattern.rs
src/builder/source.rs
src/builder/variable.rs
src/lib.rs
src/parser.rs

index c225e49684f57c7cace373e98cc7c2f412e35cfb..694abd42e1b22876b6197cf9f2e56e2d7b1c149a 100644 (file)
@@ -10,10 +10,12 @@ use variable::*;
 #[cfg(test)]
 mod tests;
 
-use crate::{MetaError, MetaFile, Scope};
+use crate::{log, MetaError, MetaFile, Scope};
 use eyre::Result;
 
 pub fn build_metafile(file: &MetaFile) -> Result<String, Box<MetaError>> {
+    log!(file.opts, format!("building {}", file.path.display()), 1);
+
     if file.header.blank {
         return Ok(String::new());
     } else if file.header.ignore {
index 763dbd4f4feee9c082fbb9e5de62f7cba2aa9e16..e4871d1321648e68ba33ff799a7f9c28fe100c40 100644 (file)
@@ -1,8 +1,14 @@
-use crate::{MetaError, MetaFile, Scope, Src};
+use crate::{log, MetaError, MetaFile, Scope, Src};
 use eyre::Result;
 use std::collections::HashMap;
 
 pub fn expand_arrays(input: String, file: &MetaFile) -> Result<String> {
+    log!(
+        file.opts,
+        format!("expanding arrays in {}", file.path.display()),
+        2
+    );
+
     let map: HashMap<String, &[String]> = file
         .source
         .iter()
index 0c31e9b427225af5b52d1c05e30050fb518e3bec..b9cda177d9c132da7ad50219e90e449e5a5415bd 100644 (file)
@@ -1,8 +1,9 @@
-use crate::{MetaError, MetaFile, Scope};
+use crate::{log, MetaError, MetaFile, Scope};
 use eyre::Result;
 use std::fs;
 
 pub fn get_pattern(key: &str, file: &MetaFile) -> Result<String> {
+    log!(file.opts, format!("expanding {key}"), 2);
     // SOURCE is already expanded in the initial build_metafile() call
     if key == "SOURCE" {
         if let Some(source) = file.patterns.get(&Scope::into_global("SOURCE")) {
index 0ae65441c35a0b72c57e6a982002a9cff11d0b4a..820da1174de87da59cfdd60e7221da1921875ad8 100644 (file)
@@ -1,4 +1,4 @@
-use crate::{MetaError, MetaFile, Src};
+use crate::{log, MetaError, MetaFile, Src};
 use eyre::Result;
 use pandoc::{InputFormat, InputKind, OutputFormat, OutputKind, Pandoc};
 
@@ -22,6 +22,8 @@ pub fn get_source_html(file: &MetaFile) -> Result<String> {
         return Ok(string);
     }
 
+    log!(file.opts, "calling pandoc", 3);
+
     let mut pandoc = Pandoc::new();
     pandoc
         .set_input(InputKind::Pipe(string))
index 8753eacc65a2ce247e01cd5af69d3dffdeca62ec..b4195777fd828a01d7bbe0d9d97f692bc1e803f0 100644 (file)
@@ -1,7 +1,12 @@
-use crate::{MetaError, MetaFile, Scope};
+use crate::{log, MetaError, MetaFile, Scope};
 use eyre::Result;
 
 pub fn get_variable(key: &str, file: &MetaFile) -> Result<String> {
+    log!(
+        file.opts,
+        format!("substituting {key} in {}", file.path.display()),
+        2
+    );
     let long_key = file.name()? + "." + key;
     if let Some(val) = file.get_var(&Scope::into_local(&long_key)) {
         Ok(val.clone())
index 1296074cb79e40cc1b8a512a8dfdaebea66143f9..27f6513d3c1e67571bf39dab08c15140190d2d45 100644 (file)
@@ -21,6 +21,8 @@ use std::fs;
 pub fn get_opts() -> Result<Options> {
     let opts = Options::try_from(Opts::parse())?;
 
+    log!(&opts, "getting options", 3);
+
     let exists = opts.build.exists();
     if exists && opts.clean {
         fs::remove_dir_all(&opts.build)?;
@@ -33,17 +35,27 @@ pub fn get_opts() -> Result<Options> {
 }
 
 pub fn build_site(opts: &Options) -> Result<()> {
-    let mut source = DirNode::build(opts.source.clone(), opts)?;
+    log!(
+        opts,
+        format!("building site in {}", opts.build.display()),
+        1
+    );
 
+    let mut source = DirNode::build(opts.source.clone(), opts)?;
     let global_init = MetaFile::new(opts);
 
     source.map(&global_init)?;
-
     source.build_dir()
 }
 
 pub fn single_file(opts: &Options) -> Result<String> {
     let path = opts.file.as_ref().ok_or(MetaError::Unknown)?;
+    log!(
+        opts,
+        format!("building file {}", opts.file.as_ref().unwrap().display()),
+        1
+    );
+
     let source = match fs::read_to_string(path) {
         Ok(str) => Ok(str),
         Err(_) => Err(eyre::Error::from(MetaError::FileNotFound {
@@ -57,6 +69,11 @@ pub fn single_file(opts: &Options) -> Result<String> {
 }
 
 pub fn new_site(opts: &Options) -> Result<()> {
+    log!(
+        &opts,
+        format!("building new site skeleton in {}", opts.root.display()),
+        1
+    );
     macro_rules! exist_or_build(
         ($p:expr) => {
             if !$p.exists() {
index c70fbc99f9051e88f40d50020dfacd8fb395f4b6..770515824e60b521ba8f8c54d85defd42b238057 100644 (file)
@@ -11,7 +11,7 @@ use source::*;
 #[cfg(test)]
 mod tests;
 
-use crate::{Header, MetaFile, Options};
+use crate::{log, Header, MetaError, MetaFile, Options};
 use eyre::Result;
 use pest::{
     iterators::{Pair, Pairs},
@@ -23,13 +23,10 @@ use pest::{
 pub struct MetaParser;
 
 pub fn parse_string(file: String, opts: &Options) -> Result<MetaFile> {
-    let meta_source = MetaParser::parse(Rule::file, &file)?.next().unwrap();
+    log!(opts, "parsing file", 3);
 
-    let metafile = parse_file(meta_source, opts);
-    Ok(metafile)
-}
+    let pair = MetaParser::parse(Rule::file, &file)?.next().unwrap();
 
-fn parse_file<'a>(pair: Pair<Rule>, opts: &'a Options) -> MetaFile<'a> {
     let mut meta_file = MetaFile::new(opts);
 
     if Rule::file == pair.as_rule() {
@@ -39,17 +36,22 @@ fn parse_file<'a>(pair: Pair<Rule>, opts: &'a Options) -> MetaFile<'a> {
                 Rule::header => {
                     meta_file.header = Header::from(parse_header_defs(pair.into_inner()))
                 }
-                Rule::var_def => meta_file.variables = parse_defs(pair.into_inner()),
-                Rule::arr_def => meta_file.arrays = parse_array_defs(pair.into_inner()),
-                Rule::pat_def => meta_file.patterns = parse_defs(pair.into_inner()),
+                Rule::var_def => meta_file.variables = parse_defs(pair.into_inner())?,
+                Rule::arr_def => meta_file.arrays = parse_array_defs(pair.into_inner())?,
+                Rule::pat_def => meta_file.patterns = parse_defs(pair.into_inner())?,
                 // do nothing on end of file
                 Rule::EOI => continue,
                 // anything else is either hidden or children of previous nodes and will be dealt with
                 // in respective parse functions
-                _ => unreachable!(),
+                _ => {
+                    return Err(MetaError::UnreachableRule {
+                        input: pair.to_string(),
+                    }
+                    .into())
+                }
             }
         }
     }
 
-    meta_file
+    Ok(meta_file)
 }