diff --git a/src/lexical_analysis/mod.rs b/src/lexical_analysis/mod.rs index 484c9a7..eb698b9 100644 --- a/src/lexical_analysis/mod.rs +++ b/src/lexical_analysis/mod.rs @@ -1,6 +1,8 @@ use std::iter::{FromIterator, Peekable}; use std::str::Chars; +use log::{debug, info, trace}; + use crate::lexical_analysis::model::token::Token; pub(crate) mod model; diff --git a/src/main.rs b/src/main.rs index 31b782e..72e150d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,8 @@ -#[macro_use] -extern crate log; -extern crate pretty_env_logger; - use std::io::{stdin, stdout, Write}; use anyhow::{Context, Result}; use clap::Parser; +use log::{debug, error, info}; use crate::cli::Arguments; use crate::evaluator::Evaluator; @@ -20,12 +17,20 @@ mod syntax_analysis; fn main() { let arguments = Arguments::parse(); - // Set up logging: if verbose is true and RUST_LOG is not set, default to info level - if arguments.verbose && std::env::var("RUST_LOG").is_err() { - std::env::set_var("RUST_LOG", "info"); + // Set up logging. Log level precedence: + // - RUST_LOG, if set. + // - info, if --verbose is passed. + let mut logger = pretty_env_logger::formatted_builder(); + match std::env::var("RUST_LOG") { + Ok(rust_log) => { + logger.parse_filters(&rust_log); + } + Err(_) if arguments.verbose => { + logger.filter_level(log::LevelFilter::Info); + } + Err(_) => {} } - - pretty_env_logger::init(); + logger.init(); info!("Version {}.", env!("CARGO_PKG_VERSION")); debug!("The command line arguments provided are {arguments:?}."); diff --git a/src/syntax_analysis/expression/function_expression/mod.rs b/src/syntax_analysis/expression/function_expression/mod.rs index c672994..6efbe3b 100644 --- a/src/syntax_analysis/expression/function_expression/mod.rs +++ b/src/syntax_analysis/expression/function_expression/mod.rs @@ -1,3 +1,5 @@ +use log::debug; + use crate::lexical_analysis::model::token::Token; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::Expression; diff --git a/src/syntax_analysis/expression/grouped_expression/mod.rs b/src/syntax_analysis/expression/grouped_expression/mod.rs index 8da0f0a..0799fad 100644 --- a/src/syntax_analysis/expression/grouped_expression/mod.rs +++ b/src/syntax_analysis/expression/grouped_expression/mod.rs @@ -1,3 +1,5 @@ +use log::debug; + use crate::lexical_analysis::model::token::Token; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::Expression; diff --git a/src/syntax_analysis/expression/if_expression/mod.rs b/src/syntax_analysis/expression/if_expression/mod.rs index 9c4d899..3c49f72 100644 --- a/src/syntax_analysis/expression/if_expression/mod.rs +++ b/src/syntax_analysis/expression/if_expression/mod.rs @@ -1,3 +1,5 @@ +use log::debug; + use crate::lexical_analysis::model::token::Token; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::Expression; diff --git a/src/syntax_analysis/expression/mod.rs b/src/syntax_analysis/expression/mod.rs index 37c28ae..f14801c 100644 --- a/src/syntax_analysis/expression/mod.rs +++ b/src/syntax_analysis/expression/mod.rs @@ -1,3 +1,5 @@ +use log::{debug, trace}; + use crate::lexical_analysis::model::token::Token; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::{Expression, SyntaxTreeNode}; diff --git a/src/syntax_analysis/expression/pratt_parsing/call_expression/mod.rs b/src/syntax_analysis/expression/pratt_parsing/call_expression/mod.rs index cc1e26c..ec7dbf5 100644 --- a/src/syntax_analysis/expression/pratt_parsing/call_expression/mod.rs +++ b/src/syntax_analysis/expression/pratt_parsing/call_expression/mod.rs @@ -1,3 +1,5 @@ +use log::debug; + use crate::lexical_analysis::model::token::Token; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::Expression; diff --git a/src/syntax_analysis/expression/pratt_parsing/infix_expression/mod.rs b/src/syntax_analysis/expression/pratt_parsing/infix_expression/mod.rs index c30befc..3d1e71f 100644 --- a/src/syntax_analysis/expression/pratt_parsing/infix_expression/mod.rs +++ b/src/syntax_analysis/expression/pratt_parsing/infix_expression/mod.rs @@ -1,3 +1,5 @@ +use log::debug; + use crate::lexical_analysis::model::token::Token; use crate::syntax_analysis::model::expression_precedence::get_infix_operator_precedence; use crate::syntax_analysis::model::syntax_tree_node::{Expression, InfixOperator}; diff --git a/src/syntax_analysis/expression/utilities/mod.rs b/src/syntax_analysis/expression/utilities/mod.rs index 63123cc..ceab888 100644 --- a/src/syntax_analysis/expression/utilities/mod.rs +++ b/src/syntax_analysis/expression/utilities/mod.rs @@ -1,3 +1,5 @@ +use log::debug; + use crate::lexical_analysis::model::token::Token; use crate::syntax_analysis::model::syntax_tree_node::Block; use crate::syntax_analysis::SyntaxAnalysis; diff --git a/src/syntax_analysis/mod.rs b/src/syntax_analysis/mod.rs index 2243aaa..c6f71f5 100644 --- a/src/syntax_analysis/mod.rs +++ b/src/syntax_analysis/mod.rs @@ -1,3 +1,5 @@ +use log::debug; + use crate::lexical_analysis::model::token::Token; use crate::syntax_analysis::model::syntax_tree_node::SyntaxTreeNode; diff --git a/src/syntax_analysis/model/expression_precedence/mod.rs b/src/syntax_analysis/model/expression_precedence/mod.rs index 6b70233..e4f36b8 100644 --- a/src/syntax_analysis/model/expression_precedence/mod.rs +++ b/src/syntax_analysis/model/expression_precedence/mod.rs @@ -1,3 +1,5 @@ +use log::trace; + use crate::lexical_analysis::model::token::Token; use crate::syntax_analysis::model::syntax_tree_node::InfixOperator; diff --git a/src/syntax_analysis/statement/mod.rs b/src/syntax_analysis/statement/mod.rs index cdca58f..ee0e68f 100644 --- a/src/syntax_analysis/statement/mod.rs +++ b/src/syntax_analysis/statement/mod.rs @@ -1,3 +1,5 @@ +use log::{debug, trace}; + use crate::lexical_analysis::model::token::Token; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::{Statement, SyntaxTreeNode};