From aa686c982e5a75f15f007aae25b1864087db615b Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Tue, 7 Feb 2023 12:31:39 +0000 Subject: [PATCH 1/4] chore(nargo): handle paths more consistently --- crates/nargo/src/cli/check_cmd.rs | 7 +++++-- crates/nargo/src/cli/compile_cmd.rs | 8 +++++--- crates/nargo/src/cli/contract_cmd.rs | 19 +++++++++++-------- crates/nargo/src/cli/execute_cmd.rs | 22 ++++++++-------------- crates/nargo/src/cli/gates_cmd.rs | 11 +++++------ crates/nargo/src/cli/new_cmd.rs | 10 +++++----- crates/nargo/src/cli/prove_cmd.rs | 12 +++++------- crates/nargo/src/cli/test_cmd.rs | 21 ++++++++++++++++----- crates/nargo/src/cli/verify_cmd.rs | 18 ++++++------------ 9 files changed, 66 insertions(+), 62 deletions(-) diff --git a/crates/nargo/src/cli/check_cmd.rs b/crates/nargo/src/cli/check_cmd.rs index 27324926511..b23bea1d5b4 100644 --- a/crates/nargo/src/cli/check_cmd.rs +++ b/crates/nargo/src/cli/check_cmd.rs @@ -15,8 +15,11 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let args = args.subcommand_matches("check").unwrap(); let allow_warnings = args.is_present("allow-warnings"); - let package_dir = std::env::current_dir().unwrap(); - check_from_path(package_dir, allow_warnings)?; + let program_dir = args + .value_of("path") + .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + + check_from_path(program_dir, allow_warnings)?; println!("Constraint system successfully built!"); Ok(()) } diff --git a/crates/nargo/src/cli/compile_cmd.rs b/crates/nargo/src/cli/compile_cmd.rs index 1e109c27f33..6ceb951b680 100644 --- a/crates/nargo/src/cli/compile_cmd.rs +++ b/crates/nargo/src/cli/compile_cmd.rs @@ -20,14 +20,16 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let circuit_name = args.value_of("circuit_name").unwrap(); let witness = args.is_present("witness"); let allow_warnings = args.is_present("allow-warnings"); + let program_dir = args + .value_of("path") + .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); - let current_dir = std::env::current_dir().unwrap(); - let mut circuit_path = PathBuf::new(); + let mut circuit_path = program_dir.clone(); circuit_path.push(TARGET_DIR); generate_circuit_and_witness_to_disk( circuit_name, - current_dir, + program_dir, circuit_path, witness, allow_warnings, diff --git a/crates/nargo/src/cli/contract_cmd.rs b/crates/nargo/src/cli/contract_cmd.rs index 68191be7730..301514306ff 100644 --- a/crates/nargo/src/cli/contract_cmd.rs +++ b/crates/nargo/src/cli/contract_cmd.rs @@ -1,23 +1,26 @@ +use std::path::PathBuf; + use super::{create_named_dir, write_to_file}; use crate::{cli::compile_cmd::compile_circuit, constants::CONTRACT_DIR, errors::CliError}; use acvm::SmartContract; use clap::ArgMatches; pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { - let cmd = args.subcommand_matches("contract").unwrap(); - - let package_dir = match cmd.value_of("path") { - Some(path) => std::path::PathBuf::from(path), - None => std::env::current_dir().unwrap(), - }; + let args = args.subcommand_matches("contract").unwrap(); let allow_warnings = args.is_present("allow-warnings"); - let compiled_program = compile_circuit(package_dir, false, allow_warnings)?; + let program_dir = args + .value_of("path") + .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + + let compiled_program = compile_circuit(program_dir.clone(), false, allow_warnings)?; let backend = crate::backends::ConcreteBackend; let smart_contract_string = backend.eth_contract_from_cs(compiled_program.circuit); - let mut contract_path = create_named_dir(CONTRACT_DIR.as_ref(), "contract"); + let mut contract_dir = program_dir; + contract_dir.push(CONTRACT_DIR); + let mut contract_path = create_named_dir(contract_dir.as_ref(), "contract"); contract_path.push("plonk_vk"); contract_path.set_extension("sol"); diff --git a/crates/nargo/src/cli/execute_cmd.rs b/crates/nargo/src/cli/execute_cmd.rs index 61ad940a71d..5750ba0dc84 100644 --- a/crates/nargo/src/cli/execute_cmd.rs +++ b/crates/nargo/src/cli/execute_cmd.rs @@ -12,6 +12,7 @@ use noirc_driver::CompiledProgram; use super::{create_named_dir, read_inputs_from_file, write_to_file}; use super::{InputMap, WitnessMap}; use crate::{ + cli::compile_cmd::compile_circuit, constants::{PROVER_INPUT_FILE, TARGET_DIR, WITNESS_EXT}, errors::CliError, }; @@ -21,14 +22,19 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let witness_name = args.value_of("witness_name"); let show_ssa = args.is_present("show-ssa"); let allow_warnings = args.is_present("allow-warnings"); - let (return_value, solved_witness) = execute(show_ssa, allow_warnings)?; + let program_dir = args + .value_of("path") + .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + + let compiled_program = compile_circuit(&program_dir, show_ssa, allow_warnings)?; + let (return_value, solved_witness) = execute_program(&program_dir, &compiled_program)?; println!("Circuit witness successfully solved"); if let Some(return_value) = return_value { println!("Circuit output: {return_value:?}"); } if let Some(witness_name) = witness_name { - let mut witness_dir = std::env::current_dir().unwrap(); + let mut witness_dir = program_dir; witness_dir.push(TARGET_DIR); let witness_path = save_witness_to_dir(solved_witness, witness_name, witness_dir)?; @@ -42,18 +48,6 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { /// So when we add witness values, their index start from 1. const WITNESS_OFFSET: u32 = 1; -fn execute( - show_ssa: bool, - allow_warnings: bool, -) -> Result<(Option, WitnessMap), CliError> { - let current_dir = std::env::current_dir().unwrap(); - - let compiled_program = - super::compile_cmd::compile_circuit(¤t_dir, show_ssa, allow_warnings)?; - - execute_program(current_dir, &compiled_program) -} - pub(crate) fn execute_program>( inputs_dir: P, compiled_program: &CompiledProgram, diff --git a/crates/nargo/src/cli/gates_cmd.rs b/crates/nargo/src/cli/gates_cmd.rs index 04f0ecab759..0d4d668c573 100644 --- a/crates/nargo/src/cli/gates_cmd.rs +++ b/crates/nargo/src/cli/gates_cmd.rs @@ -1,6 +1,6 @@ use acvm::ProofSystemCompiler; use clap::ArgMatches; -use std::path::Path; +use std::path::{Path, PathBuf}; use crate::cli::compile_cmd::compile_circuit; use crate::errors::CliError; @@ -9,12 +9,11 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let args = args.subcommand_matches("gates").unwrap(); let show_ssa = args.is_present("show-ssa"); let allow_warnings = args.is_present("allow-warnings"); - count_gates(show_ssa, allow_warnings) -} + let program_dir = args + .value_of("path") + .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); -pub fn count_gates(show_ssa: bool, allow_warnings: bool) -> Result<(), CliError> { - let current_dir = std::env::current_dir().unwrap(); - count_gates_with_path(current_dir, show_ssa, allow_warnings) + count_gates_with_path(program_dir, show_ssa, allow_warnings) } pub fn count_gates_with_path>( diff --git a/crates/nargo/src/cli/new_cmd.rs b/crates/nargo/src/cli/new_cmd.rs index 967445af8f0..af9a8b963c8 100644 --- a/crates/nargo/src/cli/new_cmd.rs +++ b/crates/nargo/src/cli/new_cmd.rs @@ -5,17 +5,17 @@ use crate::{ use super::{create_named_dir, write_to_file}; use clap::ArgMatches; -use std::path::Path; +use std::path::{Path, PathBuf}; pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let cmd = args.subcommand_matches("new").unwrap(); let package_name = cmd.value_of("package_name").unwrap(); - let mut package_dir = match cmd.value_of("path") { - Some(path) => std::path::PathBuf::from(path), - None => std::env::current_dir().unwrap(), - }; + let mut package_dir = args + .value_of("path") + .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + package_dir.push(Path::new(package_name)); if package_dir.exists() { return Err(CliError::DestinationAlreadyExists(package_dir)); diff --git a/crates/nargo/src/cli/prove_cmd.rs b/crates/nargo/src/cli/prove_cmd.rs index 15e855cb7b6..1d481c29584 100644 --- a/crates/nargo/src/cli/prove_cmd.rs +++ b/crates/nargo/src/cli/prove_cmd.rs @@ -18,16 +18,14 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let show_ssa = args.is_present("show-ssa"); let allow_warnings = args.is_present("allow-warnings"); - prove(proof_name, show_ssa, allow_warnings) -} - -fn prove(proof_name: Option<&str>, show_ssa: bool, allow_warnings: bool) -> Result<(), CliError> { - let current_dir = std::env::current_dir().unwrap(); + let program_dir = args + .value_of("path") + .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); - let mut proof_dir = PathBuf::new(); + let mut proof_dir = program_dir.clone(); proof_dir.push(PROOFS_DIR); - prove_with_path(proof_name, current_dir, proof_dir, show_ssa, allow_warnings)?; + prove_with_path(proof_name, program_dir, proof_dir, show_ssa, allow_warnings)?; Ok(()) } diff --git a/crates/nargo/src/cli/test_cmd.rs b/crates/nargo/src/cli/test_cmd.rs index 0a46f35e585..86c96a896d5 100644 --- a/crates/nargo/src/cli/test_cmd.rs +++ b/crates/nargo/src/cli/test_cmd.rs @@ -1,4 +1,8 @@ -use std::{collections::BTreeMap, io::Write}; +use std::{ + collections::BTreeMap, + io::Write, + path::{Path, PathBuf}, +}; use acvm::{PartialWitnessGenerator, ProofSystemCompiler}; use clap::ArgMatches; @@ -14,14 +18,21 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let args = args.subcommand_matches("test").unwrap(); let test_name = args.value_of("test_name").unwrap_or(""); let allow_warnings = args.is_present("allow-warnings"); - run_tests(test_name, allow_warnings) + let program_dir = args + .value_of("path") + .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + + run_tests(program_dir, test_name, allow_warnings) } -fn run_tests(test_name: &str, allow_warnings: bool) -> Result<(), CliError> { +fn run_tests>( + program_dir: P, + test_name: &str, + allow_warnings: bool, +) -> Result<(), CliError> { let backend = crate::backends::ConcreteBackend; - let package_dir = std::env::current_dir().unwrap(); - let mut driver = Resolver::resolve_root_config(&package_dir, backend.np_language())?; + let mut driver = Resolver::resolve_root_config(program_dir.as_ref(), backend.np_language())?; add_std_lib(&mut driver); if driver.check_crate(allow_warnings).is_err() { diff --git a/crates/nargo/src/cli/verify_cmd.rs b/crates/nargo/src/cli/verify_cmd.rs index 0ba85a089b1..1f5595b7697 100644 --- a/crates/nargo/src/cli/verify_cmd.rs +++ b/crates/nargo/src/cli/verify_cmd.rs @@ -17,27 +17,21 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let args = args.subcommand_matches("verify").unwrap(); let proof_name = args.value_of("proof").unwrap(); - let mut proof_path = std::path::PathBuf::new(); - proof_path.push(Path::new(PROOFS_DIR)); + let program_dir = args + .value_of("path") + .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + let mut proof_path = program_dir.clone(); + proof_path.push(Path::new(PROOFS_DIR)); proof_path.push(Path::new(proof_name)); proof_path.set_extension(PROOF_EXT); let allow_warnings = args.is_present("allow-warnings"); - let result = verify(proof_name, allow_warnings)?; + let result = verify_with_path(program_dir, proof_path, false, allow_warnings)?; println!("Proof verified : {result}\n"); Ok(()) } -fn verify(proof_name: &str, allow_warnings: bool) -> Result { - let current_dir = std::env::current_dir().unwrap(); - let mut proof_path = PathBuf::new(); //or cur_dir? - proof_path.push(PROOFS_DIR); - proof_path.push(Path::new(proof_name)); - proof_path.set_extension(PROOF_EXT); - verify_with_path(¤t_dir, &proof_path, false, allow_warnings) -} - pub fn verify_with_path>( program_dir: P, proof_path: P, From 269c950dea082ae552e0516d9534a6669f4aa78e Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Tue, 7 Feb 2023 14:37:42 +0000 Subject: [PATCH 2/4] fix(nargo): correct `witness_name` argument usage --- crates/nargo/src/cli/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/nargo/src/cli/mod.rs b/crates/nargo/src/cli/mod.rs index 8e5028bac5b..4d9d87243a9 100644 --- a/crates/nargo/src/cli/mod.rs +++ b/crates/nargo/src/cli/mod.rs @@ -119,7 +119,8 @@ pub fn start_cli() { .arg( Arg::with_name("witness_name") .long("witness_name") - .help("Write the execution witness to named file"), + .help("Write the execution witness to named file") + .takes_value(true), ) .arg(show_ssa) .arg(allow_warnings), From 7da87dd5676a643b0bd1b189bb84c8675f69da12 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Tue, 7 Feb 2023 15:01:37 +0000 Subject: [PATCH 3/4] chore(nargo): clippy --- crates/nargo/src/cli/check_cmd.rs | 5 ++--- crates/nargo/src/cli/compile_cmd.rs | 5 ++--- crates/nargo/src/cli/contract_cmd.rs | 5 ++--- crates/nargo/src/cli/execute_cmd.rs | 5 ++--- crates/nargo/src/cli/gates_cmd.rs | 5 ++--- crates/nargo/src/cli/new_cmd.rs | 5 ++--- crates/nargo/src/cli/prove_cmd.rs | 5 ++--- crates/nargo/src/cli/test_cmd.rs | 5 ++--- crates/nargo/src/cli/verify_cmd.rs | 10 ++++++---- 9 files changed, 22 insertions(+), 28 deletions(-) diff --git a/crates/nargo/src/cli/check_cmd.rs b/crates/nargo/src/cli/check_cmd.rs index b23bea1d5b4..c01d0541a87 100644 --- a/crates/nargo/src/cli/check_cmd.rs +++ b/crates/nargo/src/cli/check_cmd.rs @@ -15,9 +15,8 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let args = args.subcommand_matches("check").unwrap(); let allow_warnings = args.is_present("allow-warnings"); - let program_dir = args - .value_of("path") - .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + let program_dir = + args.value_of("path").map_or_else(|| std::env::current_dir().unwrap(), PathBuf::from); check_from_path(program_dir, allow_warnings)?; println!("Constraint system successfully built!"); diff --git a/crates/nargo/src/cli/compile_cmd.rs b/crates/nargo/src/cli/compile_cmd.rs index 6ceb951b680..2049f2468b9 100644 --- a/crates/nargo/src/cli/compile_cmd.rs +++ b/crates/nargo/src/cli/compile_cmd.rs @@ -20,9 +20,8 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let circuit_name = args.value_of("circuit_name").unwrap(); let witness = args.is_present("witness"); let allow_warnings = args.is_present("allow-warnings"); - let program_dir = args - .value_of("path") - .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + let program_dir = + args.value_of("path").map_or_else(|| std::env::current_dir().unwrap(), PathBuf::from); let mut circuit_path = program_dir.clone(); circuit_path.push(TARGET_DIR); diff --git a/crates/nargo/src/cli/contract_cmd.rs b/crates/nargo/src/cli/contract_cmd.rs index 301514306ff..dcdd6745113 100644 --- a/crates/nargo/src/cli/contract_cmd.rs +++ b/crates/nargo/src/cli/contract_cmd.rs @@ -9,9 +9,8 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let args = args.subcommand_matches("contract").unwrap(); let allow_warnings = args.is_present("allow-warnings"); - let program_dir = args - .value_of("path") - .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + let program_dir = + args.value_of("path").map_or_else(|| std::env::current_dir().unwrap(), PathBuf::from); let compiled_program = compile_circuit(program_dir.clone(), false, allow_warnings)?; diff --git a/crates/nargo/src/cli/execute_cmd.rs b/crates/nargo/src/cli/execute_cmd.rs index 5750ba0dc84..537907efd5f 100644 --- a/crates/nargo/src/cli/execute_cmd.rs +++ b/crates/nargo/src/cli/execute_cmd.rs @@ -22,9 +22,8 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let witness_name = args.value_of("witness_name"); let show_ssa = args.is_present("show-ssa"); let allow_warnings = args.is_present("allow-warnings"); - let program_dir = args - .value_of("path") - .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + let program_dir = + args.value_of("path").map_or_else(|| std::env::current_dir().unwrap(), PathBuf::from); let compiled_program = compile_circuit(&program_dir, show_ssa, allow_warnings)?; let (return_value, solved_witness) = execute_program(&program_dir, &compiled_program)?; diff --git a/crates/nargo/src/cli/gates_cmd.rs b/crates/nargo/src/cli/gates_cmd.rs index 0d4d668c573..264fa4ab709 100644 --- a/crates/nargo/src/cli/gates_cmd.rs +++ b/crates/nargo/src/cli/gates_cmd.rs @@ -9,9 +9,8 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let args = args.subcommand_matches("gates").unwrap(); let show_ssa = args.is_present("show-ssa"); let allow_warnings = args.is_present("allow-warnings"); - let program_dir = args - .value_of("path") - .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + let program_dir = + args.value_of("path").map_or_else(|| std::env::current_dir().unwrap(), PathBuf::from); count_gates_with_path(program_dir, show_ssa, allow_warnings) } diff --git a/crates/nargo/src/cli/new_cmd.rs b/crates/nargo/src/cli/new_cmd.rs index af9a8b963c8..ab16eae69be 100644 --- a/crates/nargo/src/cli/new_cmd.rs +++ b/crates/nargo/src/cli/new_cmd.rs @@ -12,9 +12,8 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let package_name = cmd.value_of("package_name").unwrap(); - let mut package_dir = args - .value_of("path") - .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + let mut package_dir = + args.value_of("path").map_or_else(|| std::env::current_dir().unwrap(), PathBuf::from); package_dir.push(Path::new(package_name)); if package_dir.exists() { diff --git a/crates/nargo/src/cli/prove_cmd.rs b/crates/nargo/src/cli/prove_cmd.rs index 1d481c29584..7d821b0f7d0 100644 --- a/crates/nargo/src/cli/prove_cmd.rs +++ b/crates/nargo/src/cli/prove_cmd.rs @@ -18,9 +18,8 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let show_ssa = args.is_present("show-ssa"); let allow_warnings = args.is_present("allow-warnings"); - let program_dir = args - .value_of("path") - .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + let program_dir = + args.value_of("path").map_or_else(|| std::env::current_dir().unwrap(), PathBuf::from); let mut proof_dir = program_dir.clone(); proof_dir.push(PROOFS_DIR); diff --git a/crates/nargo/src/cli/test_cmd.rs b/crates/nargo/src/cli/test_cmd.rs index 86c96a896d5..553724fb271 100644 --- a/crates/nargo/src/cli/test_cmd.rs +++ b/crates/nargo/src/cli/test_cmd.rs @@ -18,9 +18,8 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let args = args.subcommand_matches("test").unwrap(); let test_name = args.value_of("test_name").unwrap_or(""); let allow_warnings = args.is_present("allow-warnings"); - let program_dir = args - .value_of("path") - .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + let program_dir = + args.value_of("path").map_or_else(|| std::env::current_dir().unwrap(), PathBuf::from); run_tests(program_dir, test_name, allow_warnings) } diff --git a/crates/nargo/src/cli/verify_cmd.rs b/crates/nargo/src/cli/verify_cmd.rs index 1f5595b7697..28a48cbba97 100644 --- a/crates/nargo/src/cli/verify_cmd.rs +++ b/crates/nargo/src/cli/verify_cmd.rs @@ -11,15 +11,17 @@ use clap::ArgMatches; use noirc_abi::errors::AbiError; use noirc_abi::input_parser::Format; use noirc_driver::CompiledProgram; -use std::{collections::BTreeMap, path::Path, path::PathBuf}; +use std::{ + collections::BTreeMap, + path::{Path, PathBuf}, +}; pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let args = args.subcommand_matches("verify").unwrap(); let proof_name = args.value_of("proof").unwrap(); - let program_dir = args - .value_of("path") - .map_or_else(|| std::env::current_dir().unwrap(), |path_str| PathBuf::from(path_str)); + let program_dir = + args.value_of("path").map_or_else(|| std::env::current_dir().unwrap(), PathBuf::from); let mut proof_path = program_dir.clone(); proof_path.push(Path::new(PROOFS_DIR)); From e74639105c2a12f0bc6eeb13752dc3a7c409dfd1 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Wed, 8 Feb 2023 21:49:40 +0000 Subject: [PATCH 4/4] chore: make `run_tests` take a &Path only --- crates/nargo/src/cli/test_cmd.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/crates/nargo/src/cli/test_cmd.rs b/crates/nargo/src/cli/test_cmd.rs index 553724fb271..141bc034f40 100644 --- a/crates/nargo/src/cli/test_cmd.rs +++ b/crates/nargo/src/cli/test_cmd.rs @@ -21,17 +21,13 @@ pub(crate) fn run(args: ArgMatches) -> Result<(), CliError> { let program_dir = args.value_of("path").map_or_else(|| std::env::current_dir().unwrap(), PathBuf::from); - run_tests(program_dir, test_name, allow_warnings) + run_tests(&program_dir, test_name, allow_warnings) } -fn run_tests>( - program_dir: P, - test_name: &str, - allow_warnings: bool, -) -> Result<(), CliError> { +fn run_tests(program_dir: &Path, test_name: &str, allow_warnings: bool) -> Result<(), CliError> { let backend = crate::backends::ConcreteBackend; - let mut driver = Resolver::resolve_root_config(program_dir.as_ref(), backend.np_language())?; + let mut driver = Resolver::resolve_root_config(program_dir, backend.np_language())?; add_std_lib(&mut driver); if driver.check_crate(allow_warnings).is_err() {