From d973c5eff9c497b681cffa17a5c444d14350d7b8 Mon Sep 17 00:00:00 2001 From: DeveloperC Date: Thu, 30 Jul 2026 22:02:40 +0100 Subject: [PATCH] refactor: updating to Rust edtion 2024 --- Cargo.toml | 2 +- src/evaluator/expression/boolean/mod.rs | 2 +- src/evaluator/expression/call/mod.rs | 2 +- src/evaluator/expression/function/mod.rs | 2 +- src/evaluator/expression/if_expression/mod.rs | 2 +- src/evaluator/expression/infix/mod.rs | 2 +- src/evaluator/expression/integer/mod.rs | 2 +- src/evaluator/expression/mod.rs | 2 +- src/evaluator/expression/prefix/mod.rs | 2 +- src/evaluator/expression/string/mod.rs | 2 +- src/evaluator/statement/let_statement/mod.rs | 2 +- src/evaluator/statement/mod.rs | 2 +- .../statement/return_statement/mod.rs | 2 +- src/main.rs | 2 +- .../expression/function_expression/mod.rs | 52 +++++++++---------- .../expression/grouped_expression/mod.rs | 2 +- .../expression/if_expression/mod.rs | 14 ++--- src/syntax_analysis/expression/mod.rs | 2 +- .../pratt_parsing/call_expression/mod.rs | 36 ++++++------- .../pratt_parsing/infix_expression/mod.rs | 2 +- .../expression/pratt_parsing/mod.rs | 2 +- .../expression/utilities/mod.rs | 2 +- src/syntax_analysis/statement/mod.rs | 2 +- src/tests/macros.rs | 36 +++++++------ 24 files changed, 92 insertions(+), 86 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 2d77ac7e..a1c1ba5d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ name = "monkey_interpreter" version = "0.17.0" description = "Implementation of an interpreter for the Monkey language written in Rust, currently under active development." authors = ["C "] -edition = "2021" +edition = "2024" license = "AGPL-3.0" repository = "https://github.com/DeveloperC286/monkey_interpreter" readme = "README.md" diff --git a/src/evaluator/expression/boolean/mod.rs b/src/evaluator/expression/boolean/mod.rs index a846a4d4..cb050791 100644 --- a/src/evaluator/expression/boolean/mod.rs +++ b/src/evaluator/expression/boolean/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; impl Evaluator { pub(super) fn evaluate_boolean(&self, literal: bool) -> anyhow::Result { diff --git a/src/evaluator/expression/call/mod.rs b/src/evaluator/expression/call/mod.rs index 04507d9a..ad0a725a 100644 --- a/src/evaluator/expression/call/mod.rs +++ b/src/evaluator/expression/call/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; use crate::syntax_analysis::model::syntax_tree_node::Expression; impl Evaluator { diff --git a/src/evaluator/expression/function/mod.rs b/src/evaluator/expression/function/mod.rs index 2c691f06..20336c07 100644 --- a/src/evaluator/expression/function/mod.rs +++ b/src/evaluator/expression/function/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; use crate::syntax_analysis::model::syntax_tree_node::Block; impl Evaluator { diff --git a/src/evaluator/expression/if_expression/mod.rs b/src/evaluator/expression/if_expression/mod.rs index ed07398e..0c038d25 100644 --- a/src/evaluator/expression/if_expression/mod.rs +++ b/src/evaluator/expression/if_expression/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; use crate::syntax_analysis::model::syntax_tree_node::{Block, Expression}; impl Evaluator { diff --git a/src/evaluator/expression/infix/mod.rs b/src/evaluator/expression/infix/mod.rs index 7077fd6b..fae86e02 100644 --- a/src/evaluator/expression/infix/mod.rs +++ b/src/evaluator/expression/infix/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; use crate::syntax_analysis::model::syntax_tree_node::{Expression, InfixOperator}; impl Evaluator { diff --git a/src/evaluator/expression/integer/mod.rs b/src/evaluator/expression/integer/mod.rs index 6a911bb6..0353edb6 100644 --- a/src/evaluator/expression/integer/mod.rs +++ b/src/evaluator/expression/integer/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; impl Evaluator { pub(super) fn evaluate_integer(&self, literal: i64) -> anyhow::Result { diff --git a/src/evaluator/expression/mod.rs b/src/evaluator/expression/mod.rs index a8ff3537..d77cf080 100644 --- a/src/evaluator/expression/mod.rs +++ b/src/evaluator/expression/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; use crate::syntax_analysis::model::syntax_tree_node::*; mod boolean; diff --git a/src/evaluator/expression/prefix/mod.rs b/src/evaluator/expression/prefix/mod.rs index d02c6132..92e21595 100644 --- a/src/evaluator/expression/prefix/mod.rs +++ b/src/evaluator/expression/prefix/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; use crate::syntax_analysis::model::syntax_tree_node::Expression; impl Evaluator { diff --git a/src/evaluator/expression/string/mod.rs b/src/evaluator/expression/string/mod.rs index d10b33c6..7b81e9e1 100644 --- a/src/evaluator/expression/string/mod.rs +++ b/src/evaluator/expression/string/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; impl Evaluator { pub(super) fn evaluate_string(&self, string: String) -> anyhow::Result { diff --git a/src/evaluator/statement/let_statement/mod.rs b/src/evaluator/statement/let_statement/mod.rs index 507acef3..490c5e6a 100644 --- a/src/evaluator/statement/let_statement/mod.rs +++ b/src/evaluator/statement/let_statement/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; use crate::syntax_analysis::model::syntax_tree_node::*; impl Evaluator { diff --git a/src/evaluator/statement/mod.rs b/src/evaluator/statement/mod.rs index f64e4b1a..a82f7fdc 100644 --- a/src/evaluator/statement/mod.rs +++ b/src/evaluator/statement/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; use crate::syntax_analysis::model::syntax_tree_node::*; mod let_statement; diff --git a/src/evaluator/statement/return_statement/mod.rs b/src/evaluator/statement/return_statement/mod.rs index 27143638..b8be29d0 100644 --- a/src/evaluator/statement/return_statement/mod.rs +++ b/src/evaluator/statement/return_statement/mod.rs @@ -1,5 +1,5 @@ -use crate::evaluator::model::object::Object; use crate::evaluator::Evaluator; +use crate::evaluator::model::object::Object; use crate::syntax_analysis::model::syntax_tree_node::*; impl Evaluator { diff --git a/src/main.rs b/src/main.rs index 72e150d5..854b9eeb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -use std::io::{stdin, stdout, Write}; +use std::io::{Write, stdin, stdout}; use anyhow::{Context, Result}; use clap::Parser; diff --git a/src/syntax_analysis/expression/function_expression/mod.rs b/src/syntax_analysis/expression/function_expression/mod.rs index 6efbe3b6..9a6303dc 100644 --- a/src/syntax_analysis/expression/function_expression/mod.rs +++ b/src/syntax_analysis/expression/function_expression/mod.rs @@ -1,9 +1,9 @@ use log::debug; use crate::lexical_analysis::model::token::Token; +use crate::syntax_analysis::SyntaxAnalysis; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::Expression; -use crate::syntax_analysis::SyntaxAnalysis; impl SyntaxAnalysis<'_> { pub(crate) fn parse_function_expression(&mut self) -> anyhow::Result { @@ -36,34 +36,34 @@ impl SyntaxAnalysis<'_> { ); let mut parameters = vec![]; - if let Some(token) = self.tokens.peek() { - if **token != Token::ClosingRoundBracket { - loop { - let expression = self.get_expression(ExpressionPrecedence::Lowest)?; - match expression { - Expression::Identifier { identifier } => { - parameters.push(identifier); - } - _ => { - anyhow::bail!( - "Only allowed identifiers in function expression's parameters." - ); - } + if let Some(token) = self.tokens.peek() + && **token != Token::ClosingRoundBracket + { + loop { + let expression = self.get_expression(ExpressionPrecedence::Lowest)?; + match expression { + Expression::Identifier { identifier } => { + parameters.push(identifier); } + _ => { + anyhow::bail!( + "Only allowed identifiers in function expression's parameters." + ); + } + } - match self.tokens.peek() { - Some(token) => match token { - Token::ClosingRoundBracket => break, - Token::Comma => { - self.tokens.next(); - } - _ => { - anyhow::bail!("Parameters must be comma seperated identifiers."); - } - }, - None => { - anyhow::bail!("FunctionParametersEndedAbruptly."); + match self.tokens.peek() { + Some(token) => match token { + Token::ClosingRoundBracket => break, + Token::Comma => { + self.tokens.next(); + } + _ => { + anyhow::bail!("Parameters must be comma seperated identifiers."); } + }, + None => { + anyhow::bail!("FunctionParametersEndedAbruptly."); } } } diff --git a/src/syntax_analysis/expression/grouped_expression/mod.rs b/src/syntax_analysis/expression/grouped_expression/mod.rs index 0799fadc..487564bf 100644 --- a/src/syntax_analysis/expression/grouped_expression/mod.rs +++ b/src/syntax_analysis/expression/grouped_expression/mod.rs @@ -1,9 +1,9 @@ use log::debug; use crate::lexical_analysis::model::token::Token; +use crate::syntax_analysis::SyntaxAnalysis; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::Expression; -use crate::syntax_analysis::SyntaxAnalysis; impl SyntaxAnalysis<'_> { pub(crate) fn parse_grouped_expression(&mut self) -> anyhow::Result { diff --git a/src/syntax_analysis/expression/if_expression/mod.rs b/src/syntax_analysis/expression/if_expression/mod.rs index 3c49f728..e88c3b5f 100644 --- a/src/syntax_analysis/expression/if_expression/mod.rs +++ b/src/syntax_analysis/expression/if_expression/mod.rs @@ -1,9 +1,9 @@ use log::debug; use crate::lexical_analysis::model::token::Token; +use crate::syntax_analysis::SyntaxAnalysis; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::Expression; -use crate::syntax_analysis::SyntaxAnalysis; impl SyntaxAnalysis<'_> { pub(crate) fn parse_if_expression(&mut self) -> anyhow::Result { @@ -25,12 +25,12 @@ impl SyntaxAnalysis<'_> { let consequence = self.parse_block()?; let mut alternative = None; - if let Some(token) = self.tokens.peek() { - if **token == Token::Else { - // Consume else. - self.tokens.next(); - alternative = Some(self.parse_block()?); - } + if let Some(token) = self.tokens.peek() + && **token == Token::Else + { + // Consume else. + self.tokens.next(); + alternative = Some(self.parse_block()?); } Ok(Expression::If { diff --git a/src/syntax_analysis/expression/mod.rs b/src/syntax_analysis/expression/mod.rs index f14801c2..b869a562 100644 --- a/src/syntax_analysis/expression/mod.rs +++ b/src/syntax_analysis/expression/mod.rs @@ -1,9 +1,9 @@ use log::{debug, trace}; use crate::lexical_analysis::model::token::Token; +use crate::syntax_analysis::SyntaxAnalysis; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::{Expression, SyntaxTreeNode}; -use crate::syntax_analysis::SyntaxAnalysis; mod function_expression; mod grouped_expression; 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 ec7dbf58..18bb692d 100644 --- a/src/syntax_analysis/expression/pratt_parsing/call_expression/mod.rs +++ b/src/syntax_analysis/expression/pratt_parsing/call_expression/mod.rs @@ -1,9 +1,9 @@ use log::debug; use crate::lexical_analysis::model::token::Token; +use crate::syntax_analysis::SyntaxAnalysis; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::Expression; -use crate::syntax_analysis::SyntaxAnalysis; impl SyntaxAnalysis<'_> { pub(crate) fn parse_call_expression( @@ -45,25 +45,25 @@ impl SyntaxAnalysis<'_> { ); let mut arguments = vec![]; - if let Some(token) = self.tokens.peek() { - if **token != Token::ClosingRoundBracket { - loop { - let expression = self.get_expression(ExpressionPrecedence::Lowest)?; - arguments.push(expression); + if let Some(token) = self.tokens.peek() + && **token != Token::ClosingRoundBracket + { + loop { + let expression = self.get_expression(ExpressionPrecedence::Lowest)?; + arguments.push(expression); - match self.tokens.peek() { - Some(token) => match token { - Token::ClosingRoundBracket => break, - Token::Comma => { - self.tokens.next(); - } - _ => { - anyhow::bail!("Parameters must be comma seperated identifiers."); - } - }, - None => { - anyhow::bail!("CallExpressionParametersEndedAbruptly."); + match self.tokens.peek() { + Some(token) => match token { + Token::ClosingRoundBracket => break, + Token::Comma => { + self.tokens.next(); + } + _ => { + anyhow::bail!("Parameters must be comma seperated identifiers."); } + }, + None => { + anyhow::bail!("CallExpressionParametersEndedAbruptly."); } } } 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 3d1e71fd..c97c1477 100644 --- a/src/syntax_analysis/expression/pratt_parsing/infix_expression/mod.rs +++ b/src/syntax_analysis/expression/pratt_parsing/infix_expression/mod.rs @@ -1,9 +1,9 @@ use log::debug; use crate::lexical_analysis::model::token::Token; +use crate::syntax_analysis::SyntaxAnalysis; use crate::syntax_analysis::model::expression_precedence::get_infix_operator_precedence; use crate::syntax_analysis::model::syntax_tree_node::{Expression, InfixOperator}; -use crate::syntax_analysis::SyntaxAnalysis; impl SyntaxAnalysis<'_> { pub(crate) fn parse_infix_expression( diff --git a/src/syntax_analysis/expression/pratt_parsing/mod.rs b/src/syntax_analysis/expression/pratt_parsing/mod.rs index 8d12cb00..5498066c 100644 --- a/src/syntax_analysis/expression/pratt_parsing/mod.rs +++ b/src/syntax_analysis/expression/pratt_parsing/mod.rs @@ -1,9 +1,9 @@ use std::cmp::Ordering; use crate::lexical_analysis::model::token::Token; +use crate::syntax_analysis::SyntaxAnalysis; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::Expression; -use crate::syntax_analysis::SyntaxAnalysis; mod call_expression; mod infix_expression; diff --git a/src/syntax_analysis/expression/utilities/mod.rs b/src/syntax_analysis/expression/utilities/mod.rs index ceab8881..19394603 100644 --- a/src/syntax_analysis/expression/utilities/mod.rs +++ b/src/syntax_analysis/expression/utilities/mod.rs @@ -1,8 +1,8 @@ use log::debug; use crate::lexical_analysis::model::token::Token; -use crate::syntax_analysis::model::syntax_tree_node::Block; use crate::syntax_analysis::SyntaxAnalysis; +use crate::syntax_analysis::model::syntax_tree_node::Block; impl SyntaxAnalysis<'_> { pub(crate) fn parse_block(&mut self) -> anyhow::Result { diff --git a/src/syntax_analysis/statement/mod.rs b/src/syntax_analysis/statement/mod.rs index ee0e68f6..6e1e0e6d 100644 --- a/src/syntax_analysis/statement/mod.rs +++ b/src/syntax_analysis/statement/mod.rs @@ -1,9 +1,9 @@ use log::{debug, trace}; use crate::lexical_analysis::model::token::Token; +use crate::syntax_analysis::SyntaxAnalysis; use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence; use crate::syntax_analysis::model::syntax_tree_node::{Statement, SyntaxTreeNode}; -use crate::syntax_analysis::SyntaxAnalysis; impl SyntaxAnalysis<'_> { pub(crate) fn parse_return_statement(&mut self) -> anyhow::Result { diff --git a/src/tests/macros.rs b/src/tests/macros.rs index 9436093b..e9717c8c 100644 --- a/src/tests/macros.rs +++ b/src/tests/macros.rs @@ -43,12 +43,14 @@ macro_rules! assert_evaluation { // When let mut evaluator = crate::evaluator::Evaluator::new(); - let evaluation = assert_ok!(evaluator.evaluate( - crate::syntax_analysis::SyntaxAnalysis::from( - crate::lexical_analysis::LexicalAnalysis::from($code).unwrap(), + let evaluation = assert_ok!( + evaluator.evaluate( + crate::syntax_analysis::SyntaxAnalysis::from( + crate::lexical_analysis::LexicalAnalysis::from($code).unwrap(), + ) + .unwrap(), ) - .unwrap(), - )); + ); // Then insta::assert_debug_snapshot!(format!("test_{}_evaluation", $snapshot_name), evaluation); @@ -63,12 +65,14 @@ macro_rules! assert_environment { // When let mut evaluator = crate::evaluator::Evaluator::new(); - let _evaluation = assert_ok!(evaluator.evaluate( - crate::syntax_analysis::SyntaxAnalysis::from( - crate::lexical_analysis::LexicalAnalysis::from($code).unwrap(), + let _evaluation = assert_ok!( + evaluator.evaluate( + crate::syntax_analysis::SyntaxAnalysis::from( + crate::lexical_analysis::LexicalAnalysis::from($code).unwrap(), + ) + .unwrap(), ) - .unwrap(), - )); + ); // Then insta::assert_debug_snapshot!(format!("test_{}_environment", $snapshot_name), evaluator); @@ -82,12 +86,14 @@ macro_rules! assert_successive_environment { }); // When - let evaluation = assert_ok!($evaluator.evaluate( - crate::syntax_analysis::SyntaxAnalysis::from( - crate::lexical_analysis::LexicalAnalysis::from($code).unwrap(), + let evaluation = assert_ok!( + $evaluator.evaluate( + crate::syntax_analysis::SyntaxAnalysis::from( + crate::lexical_analysis::LexicalAnalysis::from($code).unwrap(), + ) + .unwrap(), ) - .unwrap(), - )); + ); // Then insta::assert_debug_snapshot!(format!("test_{}_evaluation", $snapshot_name), evaluation);