From 02e84ee87bec7d54992162a67f5118952fffd851 Mon Sep 17 00:00:00 2001 From: DeveloperC Date: Thu, 30 Jul 2026 21:29:16 +0100 Subject: [PATCH] refactor: build logger explicitly instead of mutating RUST_LOG --- src/lexical_analysis/mod.rs | 2 ++ src/main.rs | 23 +++++++++++-------- .../expression/function_expression/mod.rs | 2 ++ .../expression/grouped_expression/mod.rs | 2 ++ .../expression/if_expression/mod.rs | 2 ++ src/syntax_analysis/expression/mod.rs | 2 ++ .../pratt_parsing/call_expression/mod.rs | 2 ++ .../pratt_parsing/infix_expression/mod.rs | 2 ++ .../expression/utilities/mod.rs | 2 ++ src/syntax_analysis/mod.rs | 2 ++ .../model/expression_precedence/mod.rs | 2 ++ src/syntax_analysis/statement/mod.rs | 2 ++ 12 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/lexical_analysis/mod.rs b/src/lexical_analysis/mod.rs index 484c9a70..eb698b93 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 31b782ea..72e150d5 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 c6729947..6efbe3b6 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 8da0f0ab..0799fadc 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 9c4d899c..3c49f728 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 37c28aee..f14801c2 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 cc1e26c4..ec7dbf58 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 c30befc4..3d1e71fd 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 63123cce..ceab8881 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 2243aaa7..c6f71f53 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 6b702330..e4f36b85 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 cdca58f1..ee0e68f6 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};