From b73e13ee4c74915f389f45befa79bd5b72ab925c Mon Sep 17 00:00:00 2001 From: Fiiranek Date: Mon, 3 Nov 2025 19:18:02 +0100 Subject: [PATCH 1/6] Add `WorkspaceDirs` struct --- crates/forge/src/run_tests/package.rs | 21 ++++++------- crates/forge/src/run_tests/workspace.rs | 39 ++++++++++++++++--------- 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/crates/forge/src/run_tests/package.rs b/crates/forge/src/run_tests/package.rs index dbf05e5962..6fe3149f51 100644 --- a/crates/forge/src/run_tests/package.rs +++ b/crates/forge/src/run_tests/package.rs @@ -6,9 +6,12 @@ use crate::{ TestArgs, block_number_map::BlockNumberMap, combine_configs::combine_configs, - run_tests::messages::{ - collected_tests_count::CollectedTestsCountMessage, tests_run::TestsRunMessage, - tests_summary::TestsSummaryMessage, + run_tests::{ + messages::{ + collected_tests_count::CollectedTestsCountMessage, tests_run::TestsRunMessage, + tests_summary::TestsSummaryMessage, + }, + workspace::WorkspaceDirs, }, scarb::{ config::{ForgeConfigFromScarb, ForkTarget}, @@ -22,7 +25,6 @@ use crate::{ }, }; use anyhow::Result; -use camino::{Utf8Path, Utf8PathBuf}; use cheatnet::runtime_extensions::forge_runtime_extension::contracts_data::ContractsData; use configuration::load_package_config; use console::Style; @@ -77,14 +79,13 @@ impl RunForPackageArgs { package: PackageMetadata, scarb_metadata: &Metadata, args: &TestArgs, - cache_dir: &Utf8PathBuf, - artifacts_dir: &Utf8Path, + workspace_dirs: &WorkspaceDirs, ui: &UI, ) -> Result { - let raw_test_targets = load_test_artifacts(artifacts_dir, &package)?; + let raw_test_targets = load_test_artifacts(&workspace_dirs.artifacts_dir, &package)?; let contracts = get_contracts_artifacts_and_source_sierra_paths( - artifacts_dir, + &workspace_dirs.artifacts_dir, &package, ui, CompilationOpts { @@ -111,7 +112,7 @@ impl RunForPackageArgs { args.max_n_steps, args.tracked_resource, contracts_data, - cache_dir.clone(), + workspace_dirs.cache_dir.clone(), &forge_config_from_scarb, &args.additional_args, args.trace_args.clone(), @@ -125,7 +126,7 @@ impl RunForPackageArgs { args.only_ignored, args.include_ignored, args.rerun_failed, - FailedTestsCache::new(cache_dir), + FailedTestsCache::new(&workspace_dirs.cache_dir), ); Ok(RunForPackageArgs { diff --git a/crates/forge/src/run_tests/workspace.rs b/crates/forge/src/run_tests/workspace.rs index c67fb27d96..4e5e2f9d1d 100644 --- a/crates/forge/src/run_tests/workspace.rs +++ b/crates/forge/src/run_tests/workspace.rs @@ -7,6 +7,7 @@ use crate::{ scarb::build_artifacts_with_scarb, shared_cache::FailedTestsCache, }; use anyhow::{Context, Result}; +use camino::Utf8PathBuf; use forge_runner::test_case_summary::AnyTestCaseSummary; use forge_runner::{CACHE_DIR, test_target_summary::TestTargetSummary}; use foundry_ui::UI; @@ -19,14 +20,35 @@ use shared::consts::SNFORGE_TEST_FILTER; use std::env; use std::sync::Arc; +pub struct WorkspaceDirs { + pub artifacts_dir: Utf8PathBuf, + pub cache_dir: Utf8PathBuf, + pub root_dir: Utf8PathBuf, +} + +impl WorkspaceDirs { + pub fn new(scarb_metadata: &Metadata) -> Self { + let artifacts_dir = + target_dir_for_workspace(&scarb_metadata).join(&scarb_metadata.current_profile); + + let workspace_root = &scarb_metadata.workspace.root; + let cache_dir = workspace_root.join(CACHE_DIR); + + Self { + artifacts_dir, + cache_dir, + root_dir: workspace_root.clone(), + } + } +} + #[tracing::instrument(skip_all, level = "debug")] pub async fn run_for_workspace( scarb_metadata: &Metadata, args: TestArgs, ui: Arc, ) -> Result { - let artifacts_dir_path = - target_dir_for_workspace(&scarb_metadata).join(&scarb_metadata.current_profile); + let workspace_dirs = WorkspaceDirs::new(scarb_metadata); let packages: Vec = args .scarb_args @@ -57,21 +79,12 @@ pub async fn run_for_workspace( let mut all_tests = vec![]; let mut total_filtered_count = Some(0); - let workspace_root = &scarb_metadata.workspace.root; - let cache_dir = workspace_root.join(CACHE_DIR); let packages_len = packages.len(); for package in packages { env::set_current_dir(&package.root)?; - let args = RunForPackageArgs::build( - package, - &scarb_metadata, - &args, - &cache_dir, - &artifacts_dir_path, - &ui, - )?; + let args = RunForPackageArgs::build(package, &scarb_metadata, &args, &workspace_dirs, &ui)?; let result = run_for_package(args, &mut block_number_map, ui.clone()).await?; @@ -88,7 +101,7 @@ pub async fn run_for_workspace( let overall_summary = OverallSummaryMessage::new(&all_tests, total_filtered_count); let all_failed_tests: Vec = extract_failed_tests(all_tests).collect(); - FailedTestsCache::new(&cache_dir).save_failed_tests(&all_failed_tests)?; + FailedTestsCache::new(&workspace_dirs.cache_dir).save_failed_tests(&all_failed_tests)?; if !block_number_map.get_url_to_latest_block_number().is_empty() { ui.println(&LatestBlocksNumbersMessage::new( From c6de048950292e088c3aff4b3448688d8d34c789 Mon Sep 17 00:00:00 2001 From: Fiiranek Date: Wed, 5 Nov 2025 18:39:14 +0100 Subject: [PATCH 2/6] Fixes --- crates/forge/src/lib.rs | 2 - crates/forge/src/test.rs | 28 +-------- crates/forge/src/warn.rs | 119 +-------------------------------------- 3 files changed, 4 insertions(+), 145 deletions(-) diff --git a/crates/forge/src/lib.rs b/crates/forge/src/lib.rs index 6cc955e2ae..067819a6f0 100644 --- a/crates/forge/src/lib.rs +++ b/crates/forge/src/lib.rs @@ -37,8 +37,6 @@ pub const CAIRO_EDITION: &str = "2024_07"; const MINIMAL_SCARB_VERSION: Version = Version::new(2, 10, 0); const MINIMAL_RECOMMENDED_SCARB_VERSION: Version = Version::new(2, 11, 4); const MINIMAL_USC_VERSION: Version = Version::new(2, 0, 0); -const MINIMAL_SNFORGE_STD_VERSION: Version = Version::new(0, 50, 0); -const MINIMAL_SNFORGE_STD_DEPRECATED_VERSION: Version = Version::new(0, 50, 0); pub const MINIMAL_SCARB_VERSION_FOR_V2_MACROS_REQUIREMENT: Version = Version::new(2, 12, 0); #[derive(Parser, Debug)] diff --git a/crates/forge/src/test.rs b/crates/forge/src/test.rs index 32d4b4568b..b8d75cce0e 100644 --- a/crates/forge/src/test.rs +++ b/crates/forge/src/test.rs @@ -2,18 +2,12 @@ use std::{env, sync::Arc}; use crate::profile_validation::check_profile_compatibility; use crate::run_tests::workspace::run_for_workspace; -use crate::warn::warn_if_snforge_std_does_not_match_package_version; -use crate::warn::{ - error_if_snforge_std_deprecated_missing, error_if_snforge_std_deprecated_not_compatible, - error_if_snforge_std_not_compatible, warn_if_backtrace_without_panic_hint, - warn_if_snforge_std_deprecated_does_not_match_package_version, -}; -use crate::{ColorOption, ExitStatus, MINIMAL_SCARB_VERSION_FOR_V2_MACROS_REQUIREMENT, TestArgs}; +use crate::warn::warn_if_backtrace_without_panic_hint; +use crate::{ColorOption, ExitStatus, TestArgs}; use anyhow::Result; use foundry_ui::UI; +use scarb_api::metadata::MetadataOpts; use scarb_api::metadata::metadata_with_opts; -use scarb_api::{ScarbCommand, metadata::MetadataOpts}; -use scarb_metadata::Metadata; #[tracing::instrument(skip_all, level = "debug")] pub async fn test(args: TestArgs, ui: Arc) -> Result { @@ -26,7 +20,6 @@ pub async fn test(args: TestArgs, ui: Arc) -> Result { check_profile_compatibility(&args, &scarb_metadata)?; - warn_if_scarb_version_not_compatible(&scarb_metadata, &ui)?; warn_if_backtrace_without_panic_hint(&scarb_metadata, &ui); run_for_workspace(&scarb_metadata, args, ui).await @@ -41,18 +34,3 @@ fn set_color_envs(color: &ColorOption) { ColorOption::Auto => (), } } - -fn warn_if_scarb_version_not_compatible(scarb_metadata: &Metadata, ui: &Arc) -> Result<()> { - let scarb_version = ScarbCommand::version().run()?.scarb; - - if scarb_version >= MINIMAL_SCARB_VERSION_FOR_V2_MACROS_REQUIREMENT { - error_if_snforge_std_not_compatible(&scarb_metadata)?; - warn_if_snforge_std_does_not_match_package_version(&scarb_metadata, &ui)?; - } else { - error_if_snforge_std_deprecated_missing(&scarb_metadata)?; - error_if_snforge_std_deprecated_not_compatible(&scarb_metadata)?; - warn_if_snforge_std_deprecated_does_not_match_package_version(&scarb_metadata, &ui)?; - } - - Ok(()) -} diff --git a/crates/forge/src/warn.rs b/crates/forge/src/warn.rs index 3c06464121..79c4b41cb2 100644 --- a/crates/forge/src/warn.rs +++ b/crates/forge/src/warn.rs @@ -1,17 +1,13 @@ -use crate::{MINIMAL_SNFORGE_STD_DEPRECATED_VERSION, MINIMAL_SNFORGE_STD_VERSION}; -use anyhow::{Result, anyhow}; +use anyhow::Result; use forge_runner::backtrace::is_backtrace_enabled; use forge_runner::package_tests::with_config_resolved::TestTargetWithResolvedConfig; use foundry_ui::UI; use foundry_ui::components::warning::WarningMessage; use indoc::formatdoc; -use scarb_api::package_matches_version_requirement; use scarb_metadata::Metadata; -use semver::{Comparator, Op, Version, VersionReq}; use shared::rpc::create_rpc_client; use shared::verify_and_warn_if_incompatible_rpc_version; use std::collections::HashSet; -use std::env; use std::sync::Arc; use url::Url; @@ -50,119 +46,6 @@ pub(crate) async fn warn_if_incompatible_rpc_version( Ok(()) } -fn snforge_std_recommended_version() -> VersionReq { - let version = Version::parse(env!("CARGO_PKG_VERSION")).unwrap(); - let comparator = Comparator { - op: Op::Caret, - major: version.major, - minor: Some(version.minor), - patch: Some(version.patch), - pre: version.pre, - }; - VersionReq { - comparators: vec![comparator], - } -} - -fn snforge_std_deprecated_recommended_version() -> VersionReq { - snforge_std_recommended_version() -} - -pub fn error_if_snforge_std_deprecated_missing(scarb_metadata: &Metadata) -> Result<()> { - if !scarb_metadata - .packages - .iter() - .any(|p| p.name == "snforge_std_deprecated") - { - return Err(anyhow!( - "On Scarb versions < 2.12.0, the `snforge_std` package must be replaced with `snforge_std_deprecated`. Please update it in Scarb.toml" - )); - } - Ok(()) -} - -pub fn error_if_snforge_std_deprecated_not_compatible(scarb_metadata: &Metadata) -> Result<()> { - let snforge_std_deprecated_version_requirement_comparator = Comparator { - op: Op::GreaterEq, - major: MINIMAL_SNFORGE_STD_DEPRECATED_VERSION.major, - minor: Some(MINIMAL_SNFORGE_STD_DEPRECATED_VERSION.minor), - patch: Some(MINIMAL_SNFORGE_STD_DEPRECATED_VERSION.patch), - pre: MINIMAL_SNFORGE_STD_DEPRECATED_VERSION.pre, - }; - let snforge_std_deprecated_version_requirement = VersionReq { - comparators: vec![snforge_std_deprecated_version_requirement_comparator], - }; - - if !package_matches_version_requirement( - scarb_metadata, - "snforge_std_deprecated", - &snforge_std_deprecated_version_requirement, - )? { - return Err(anyhow!( - "Package `snforge_std_deprecated` version does not meet the minimum required version {snforge_std_deprecated_version_requirement}. Please upgrade `snforge_std_deprecated` in Scarb.toml" - )); - } - Ok(()) -} - -pub fn warn_if_snforge_std_deprecated_does_not_match_package_version( - scarb_metadata: &Metadata, - ui: &UI, -) -> Result<()> { - let snforge_std_deprecated_version_requirement = snforge_std_deprecated_recommended_version(); - if !package_matches_version_requirement( - scarb_metadata, - "snforge_std_deprecated", - &snforge_std_deprecated_version_requirement, - )? { - ui.println(&WarningMessage::new(&format!( - "Package `snforge_std_deprecated` version does not meet the recommended version requirement {snforge_std_deprecated_version_requirement}, it might result in unexpected behaviour" - ))); - } - Ok(()) -} - -pub fn error_if_snforge_std_not_compatible(scarb_metadata: &Metadata) -> Result<()> { - let snforge_std_version_requirement_comparator = Comparator { - op: Op::GreaterEq, - major: MINIMAL_SNFORGE_STD_VERSION.major, - minor: Some(MINIMAL_SNFORGE_STD_VERSION.minor), - patch: Some(MINIMAL_SNFORGE_STD_VERSION.patch), - pre: MINIMAL_SNFORGE_STD_VERSION.pre, - }; - let snforge_std_version_requirement = VersionReq { - comparators: vec![snforge_std_version_requirement_comparator], - }; - - if !package_matches_version_requirement( - scarb_metadata, - "snforge_std", - &snforge_std_version_requirement, - )? { - return Err(anyhow!( - "Package snforge_std version does not meet the minimum required version {snforge_std_version_requirement}. Please upgrade snforge_std in Scarb.toml" - )); - } - Ok(()) -} - -pub fn warn_if_snforge_std_does_not_match_package_version( - scarb_metadata: &Metadata, - ui: &UI, -) -> Result<()> { - let snforge_std_version_requirement = snforge_std_recommended_version(); - if !package_matches_version_requirement( - scarb_metadata, - "snforge_std", - &snforge_std_version_requirement, - )? { - ui.println(&WarningMessage::new(&format!( - "Package snforge_std version does not meet the recommended version requirement {snforge_std_version_requirement}, it might result in unexpected behaviour" - ))); - } - Ok(()) -} - // TODO(#3679): Remove this function when we decide to bump minimal scarb version to 2.12. pub(crate) fn warn_if_backtrace_without_panic_hint(scarb_metadata: &Metadata, ui: &UI) { if is_backtrace_enabled() { From 529883bcdf9e9e770fa8ee07bfb7650622cb22cd Mon Sep 17 00:00:00 2001 From: Fiiranek Date: Wed, 5 Nov 2025 18:52:14 +0100 Subject: [PATCH 3/6] Fixes --- crates/forge/src/lib.rs | 2 + crates/forge/src/test.rs | 9 ++- crates/forge/src/warn.rs | 119 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 127 insertions(+), 3 deletions(-) diff --git a/crates/forge/src/lib.rs b/crates/forge/src/lib.rs index 067819a6f0..6cc955e2ae 100644 --- a/crates/forge/src/lib.rs +++ b/crates/forge/src/lib.rs @@ -37,6 +37,8 @@ pub const CAIRO_EDITION: &str = "2024_07"; const MINIMAL_SCARB_VERSION: Version = Version::new(2, 10, 0); const MINIMAL_RECOMMENDED_SCARB_VERSION: Version = Version::new(2, 11, 4); const MINIMAL_USC_VERSION: Version = Version::new(2, 0, 0); +const MINIMAL_SNFORGE_STD_VERSION: Version = Version::new(0, 50, 0); +const MINIMAL_SNFORGE_STD_DEPRECATED_VERSION: Version = Version::new(0, 50, 0); pub const MINIMAL_SCARB_VERSION_FOR_V2_MACROS_REQUIREMENT: Version = Version::new(2, 12, 0); #[derive(Parser, Debug)] diff --git a/crates/forge/src/test.rs b/crates/forge/src/test.rs index a8a2d38420..f712b23e54 100644 --- a/crates/forge/src/test.rs +++ b/crates/forge/src/test.rs @@ -1,7 +1,12 @@ use crate::profile_validation::check_profile_compatibility; use crate::run_tests::workspace::run_for_workspace; -use crate::warn::warn_if_backtrace_without_panic_hint; -use crate::{ColorOption, ExitStatus, TestArgs}; +use crate::warn::warn_if_snforge_std_does_not_match_package_version; +use crate::warn::{ + error_if_snforge_std_deprecated_missing, error_if_snforge_std_deprecated_not_compatible, + error_if_snforge_std_not_compatible, warn_if_backtrace_without_panic_hint, + warn_if_snforge_std_deprecated_does_not_match_package_version, +}; +use crate::{ColorOption, ExitStatus, MINIMAL_SCARB_VERSION_FOR_V2_MACROS_REQUIREMENT, TestArgs}; use anyhow::Result; use foundry_ui::UI; use scarb_api::metadata::MetadataOpts; diff --git a/crates/forge/src/warn.rs b/crates/forge/src/warn.rs index 79c4b41cb2..3c06464121 100644 --- a/crates/forge/src/warn.rs +++ b/crates/forge/src/warn.rs @@ -1,13 +1,17 @@ -use anyhow::Result; +use crate::{MINIMAL_SNFORGE_STD_DEPRECATED_VERSION, MINIMAL_SNFORGE_STD_VERSION}; +use anyhow::{Result, anyhow}; use forge_runner::backtrace::is_backtrace_enabled; use forge_runner::package_tests::with_config_resolved::TestTargetWithResolvedConfig; use foundry_ui::UI; use foundry_ui::components::warning::WarningMessage; use indoc::formatdoc; +use scarb_api::package_matches_version_requirement; use scarb_metadata::Metadata; +use semver::{Comparator, Op, Version, VersionReq}; use shared::rpc::create_rpc_client; use shared::verify_and_warn_if_incompatible_rpc_version; use std::collections::HashSet; +use std::env; use std::sync::Arc; use url::Url; @@ -46,6 +50,119 @@ pub(crate) async fn warn_if_incompatible_rpc_version( Ok(()) } +fn snforge_std_recommended_version() -> VersionReq { + let version = Version::parse(env!("CARGO_PKG_VERSION")).unwrap(); + let comparator = Comparator { + op: Op::Caret, + major: version.major, + minor: Some(version.minor), + patch: Some(version.patch), + pre: version.pre, + }; + VersionReq { + comparators: vec![comparator], + } +} + +fn snforge_std_deprecated_recommended_version() -> VersionReq { + snforge_std_recommended_version() +} + +pub fn error_if_snforge_std_deprecated_missing(scarb_metadata: &Metadata) -> Result<()> { + if !scarb_metadata + .packages + .iter() + .any(|p| p.name == "snforge_std_deprecated") + { + return Err(anyhow!( + "On Scarb versions < 2.12.0, the `snforge_std` package must be replaced with `snforge_std_deprecated`. Please update it in Scarb.toml" + )); + } + Ok(()) +} + +pub fn error_if_snforge_std_deprecated_not_compatible(scarb_metadata: &Metadata) -> Result<()> { + let snforge_std_deprecated_version_requirement_comparator = Comparator { + op: Op::GreaterEq, + major: MINIMAL_SNFORGE_STD_DEPRECATED_VERSION.major, + minor: Some(MINIMAL_SNFORGE_STD_DEPRECATED_VERSION.minor), + patch: Some(MINIMAL_SNFORGE_STD_DEPRECATED_VERSION.patch), + pre: MINIMAL_SNFORGE_STD_DEPRECATED_VERSION.pre, + }; + let snforge_std_deprecated_version_requirement = VersionReq { + comparators: vec![snforge_std_deprecated_version_requirement_comparator], + }; + + if !package_matches_version_requirement( + scarb_metadata, + "snforge_std_deprecated", + &snforge_std_deprecated_version_requirement, + )? { + return Err(anyhow!( + "Package `snforge_std_deprecated` version does not meet the minimum required version {snforge_std_deprecated_version_requirement}. Please upgrade `snforge_std_deprecated` in Scarb.toml" + )); + } + Ok(()) +} + +pub fn warn_if_snforge_std_deprecated_does_not_match_package_version( + scarb_metadata: &Metadata, + ui: &UI, +) -> Result<()> { + let snforge_std_deprecated_version_requirement = snforge_std_deprecated_recommended_version(); + if !package_matches_version_requirement( + scarb_metadata, + "snforge_std_deprecated", + &snforge_std_deprecated_version_requirement, + )? { + ui.println(&WarningMessage::new(&format!( + "Package `snforge_std_deprecated` version does not meet the recommended version requirement {snforge_std_deprecated_version_requirement}, it might result in unexpected behaviour" + ))); + } + Ok(()) +} + +pub fn error_if_snforge_std_not_compatible(scarb_metadata: &Metadata) -> Result<()> { + let snforge_std_version_requirement_comparator = Comparator { + op: Op::GreaterEq, + major: MINIMAL_SNFORGE_STD_VERSION.major, + minor: Some(MINIMAL_SNFORGE_STD_VERSION.minor), + patch: Some(MINIMAL_SNFORGE_STD_VERSION.patch), + pre: MINIMAL_SNFORGE_STD_VERSION.pre, + }; + let snforge_std_version_requirement = VersionReq { + comparators: vec![snforge_std_version_requirement_comparator], + }; + + if !package_matches_version_requirement( + scarb_metadata, + "snforge_std", + &snforge_std_version_requirement, + )? { + return Err(anyhow!( + "Package snforge_std version does not meet the minimum required version {snforge_std_version_requirement}. Please upgrade snforge_std in Scarb.toml" + )); + } + Ok(()) +} + +pub fn warn_if_snforge_std_does_not_match_package_version( + scarb_metadata: &Metadata, + ui: &UI, +) -> Result<()> { + let snforge_std_version_requirement = snforge_std_recommended_version(); + if !package_matches_version_requirement( + scarb_metadata, + "snforge_std", + &snforge_std_version_requirement, + )? { + ui.println(&WarningMessage::new(&format!( + "Package snforge_std version does not meet the recommended version requirement {snforge_std_version_requirement}, it might result in unexpected behaviour" + ))); + } + Ok(()) +} + // TODO(#3679): Remove this function when we decide to bump minimal scarb version to 2.12. pub(crate) fn warn_if_backtrace_without_panic_hint(scarb_metadata: &Metadata, ui: &UI) { if is_backtrace_enabled() { From 1b2b7494759f3ea50fce483f7840608a0dd9bc63 Mon Sep 17 00:00:00 2001 From: Fiiranek Date: Thu, 6 Nov 2025 09:05:21 +0100 Subject: [PATCH 4/6] Formatting --- crates/forge/src/run_tests/workspace.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/forge/src/run_tests/workspace.rs b/crates/forge/src/run_tests/workspace.rs index 83b2512e0b..586f048bd6 100644 --- a/crates/forge/src/run_tests/workspace.rs +++ b/crates/forge/src/run_tests/workspace.rs @@ -30,7 +30,6 @@ impl WorkspaceDirs { pub fn new(scarb_metadata: &Metadata) -> Self { let artifacts_dir = target_dir_for_workspace(&scarb_metadata).join(&scarb_metadata.current_profile); - let workspace_root = &scarb_metadata.workspace.root; let cache_dir = workspace_root.join(CACHE_DIR); From 1edc8da81ee6f4fbfb7cb728c529fd4138864295 Mon Sep 17 00:00:00 2001 From: Fiiranek Date: Thu, 6 Nov 2025 19:51:15 +0100 Subject: [PATCH 5/6] Fix clippy --- crates/forge/src/run_tests/workspace.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/forge/src/run_tests/workspace.rs b/crates/forge/src/run_tests/workspace.rs index 586f048bd6..a351887d47 100644 --- a/crates/forge/src/run_tests/workspace.rs +++ b/crates/forge/src/run_tests/workspace.rs @@ -27,9 +27,10 @@ pub struct WorkspaceDirs { } impl WorkspaceDirs { + #[must_use] pub fn new(scarb_metadata: &Metadata) -> Self { let artifacts_dir = - target_dir_for_workspace(&scarb_metadata).join(&scarb_metadata.current_profile); + target_dir_for_workspace(scarb_metadata).join(&scarb_metadata.current_profile); let workspace_root = &scarb_metadata.workspace.root; let cache_dir = workspace_root.join(CACHE_DIR); From f4b4a0a2414b0c8968e0758a15d92ffc410bedd1 Mon Sep 17 00:00:00 2001 From: Fiiranek Date: Wed, 12 Nov 2025 15:32:34 +0100 Subject: [PATCH 6/6] Remove annotation --- crates/forge/src/test.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/forge/src/test.rs b/crates/forge/src/test.rs index f712b23e54..56e2a33545 100644 --- a/crates/forge/src/test.rs +++ b/crates/forge/src/test.rs @@ -25,7 +25,7 @@ pub async fn test(args: TestArgs, ui: Arc) -> Result { check_profile_compatibility(&args, &scarb_metadata)?; - let scarb_version: semver::Version = scarb_version()?.scarb; + let scarb_version = scarb_version()?.scarb; if scarb_version >= MINIMAL_SCARB_VERSION_FOR_V2_MACROS_REQUIREMENT { error_if_snforge_std_not_compatible(&scarb_metadata)?;