From 8b72435523e20193f4cd7a97d7796ed67453dc4c Mon Sep 17 00:00:00 2001 From: Huck Boles Date: Sat, 20 May 2023 16:34:55 -0500 Subject: [PATCH] added: output for verbose mode --- src/builder.rs | 4 +++- src/builder/array.rs | 8 +++++++- src/builder/pattern.rs | 3 ++- src/builder/source.rs | 4 +++- src/builder/variable.rs | 7 ++++++- src/lib.rs | 21 +++++++++++++++++++-- src/parser.rs | 24 +++++++++++++----------- 7 files changed, 53 insertions(+), 18 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index c225e49..694abd4 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -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> { + log!(file.opts, format!("building {}", file.path.display()), 1); + if file.header.blank { return Ok(String::new()); } else if file.header.ignore { diff --git a/src/builder/array.rs b/src/builder/array.rs index 763dbd4..e4871d1 100644 --- a/src/builder/array.rs +++ b/src/builder/array.rs @@ -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 { + log!( + file.opts, + format!("expanding arrays in {}", file.path.display()), + 2 + ); + let map: HashMap = file .source .iter() diff --git a/src/builder/pattern.rs b/src/builder/pattern.rs index 0c31e9b..b9cda17 100644 --- a/src/builder/pattern.rs +++ b/src/builder/pattern.rs @@ -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 { + 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")) { diff --git a/src/builder/source.rs b/src/builder/source.rs index 0ae6544..820da11 100644 --- a/src/builder/source.rs +++ b/src/builder/source.rs @@ -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 { return Ok(string); } + log!(file.opts, "calling pandoc", 3); + let mut pandoc = Pandoc::new(); pandoc .set_input(InputKind::Pipe(string)) diff --git a/src/builder/variable.rs b/src/builder/variable.rs index 8753eac..b419577 100644 --- a/src/builder/variable.rs +++ b/src/builder/variable.rs @@ -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 { + 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()) diff --git a/src/lib.rs b/src/lib.rs index 1296074..27f6513 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,6 +21,8 @@ use std::fs; pub fn get_opts() -> Result { 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 { } 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 { 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 { } 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() { diff --git a/src/parser.rs b/src/parser.rs index c70fbc9..7705158 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -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 { - 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, 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, 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) } -- 2.44.2