From 8e96162f6cf337aa4ef9e346633aaa1c1f0bf66c Mon Sep 17 00:00:00 2001 From: kek kek kek Date: Thu, 13 Jul 2023 16:53:34 +0000 Subject: [PATCH 1/5] first stage (no tests) --- crates/nargo/src/manifest/mod.rs | 13 +++++++++++++ crates/nargo_cli/src/resolver.rs | 15 +++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/crates/nargo/src/manifest/mod.rs b/crates/nargo/src/manifest/mod.rs index 4d91956330b..825a44635d1 100644 --- a/crates/nargo/src/manifest/mod.rs +++ b/crates/nargo/src/manifest/mod.rs @@ -53,8 +53,10 @@ pub struct Workspace { } #[derive(Default, Debug, Deserialize, Clone)] +#[serde(rename_all = "kebab-case")] pub struct WorkspaceConfig { pub members: Vec, + pub default_member: Option, } #[allow(dead_code)] @@ -107,3 +109,14 @@ fn parse_workspace_toml() { assert!(Manifest::from_toml_str(src).is_ok()); } + +#[test] +fn parse_workspace_default_member_toml() { + let src = r#" + [workspace] + members = ["a", "b"] + default-member = "a" + "#; + + assert!(Manifest::from_toml_str(src).is_ok()); +} diff --git a/crates/nargo_cli/src/resolver.rs b/crates/nargo_cli/src/resolver.rs index 4a4fcd241c5..5fc158d1d7f 100644 --- a/crates/nargo_cli/src/resolver.rs +++ b/crates/nargo_cli/src/resolver.rs @@ -87,15 +87,22 @@ pub(crate) fn resolve_root_manifest( resolve_manifest(&mut context, crate_id, package, pkg_root)?; } Manifest::Workspace(workspace) => { - let members = workspace.config.members; - let root = match members.last() { - Some(member) => dir_path.join(member), + let config = workspace.config; + let members = config.members; + + let maybe_local = config + .default_member + .or_else(|| members.last().cloned()) + .map(|member| dir_path.join(member)); + + let default_member = match maybe_local { + Some(member) => member, None => { return Err(DependencyResolutionError::EmptyWorkspace { path: manifest_path }) } }; - let (entry_path, _crate_type) = super::lib_or_bin(root)?; + let (entry_path, _crate_type) = super::lib_or_bin(default_member)?; let _local = create_local_crate(&mut context, entry_path, CrateType::Workspace); for member in members { From 840ff2e9b64b0f1640e4497b4ff9e99ac6dbd501 Mon Sep 17 00:00:00 2001 From: kek kek kek Date: Thu, 13 Jul 2023 17:10:34 +0000 Subject: [PATCH 2/5] add test --- .../test_data/workspace_default_member/Nargo.toml | 3 +++ .../test_data/workspace_default_member/Prover.toml | 2 ++ .../test_data/workspace_default_member/a/Nargo.toml | 5 +++++ .../test_data/workspace_default_member/a/src/main.nr | 11 +++++++++++ .../workspace_default_member/Nargo.toml | 3 +++ .../workspace_default_member/Prover.toml | 2 ++ .../workspace_default_member/a/Nargo.toml | 5 +++++ .../workspace_default_member/a/src/main.nr | 11 +++++++++++ crates/noirc_frontend/src/hir/mod.rs | 5 ++++- 9 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 crates/nargo_cli/tests/test_data/workspace_default_member/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/workspace_default_member/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data/workspace_default_member/a/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data/workspace_default_member/a/src/main.nr create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Prover.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/a/Nargo.toml create mode 100644 crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/a/src/main.nr diff --git a/crates/nargo_cli/tests/test_data/workspace_default_member/Nargo.toml b/crates/nargo_cli/tests/test_data/workspace_default_member/Nargo.toml new file mode 100644 index 00000000000..ec1ef0a85bc --- /dev/null +++ b/crates/nargo_cli/tests/test_data/workspace_default_member/Nargo.toml @@ -0,0 +1,3 @@ +[workspace] +members = ["a"] +default-member = ["a"] diff --git a/crates/nargo_cli/tests/test_data/workspace_default_member/Prover.toml b/crates/nargo_cli/tests/test_data/workspace_default_member/Prover.toml new file mode 100644 index 00000000000..8c12ebba6cf --- /dev/null +++ b/crates/nargo_cli/tests/test_data/workspace_default_member/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "2" diff --git a/crates/nargo_cli/tests/test_data/workspace_default_member/a/Nargo.toml b/crates/nargo_cli/tests/test_data/workspace_default_member/a/Nargo.toml new file mode 100644 index 00000000000..dc0c2f8917c --- /dev/null +++ b/crates/nargo_cli/tests/test_data/workspace_default_member/a/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.8.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data/workspace_default_member/a/src/main.nr b/crates/nargo_cli/tests/test_data/workspace_default_member/a/src/main.nr new file mode 100644 index 00000000000..206dc46d57a --- /dev/null +++ b/crates/nargo_cli/tests/test_data/workspace_default_member/a/src/main.nr @@ -0,0 +1,11 @@ +fn main(x : Field, y : pub Field) { + assert(x != y); +} + +#[test] +fn test_main() { + main(1, 2); + + // Uncomment to make test fail + // main(1, 1); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Nargo.toml new file mode 100644 index 00000000000..ec1ef0a85bc --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Nargo.toml @@ -0,0 +1,3 @@ +[workspace] +members = ["a"] +default-member = ["a"] diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Prover.toml new file mode 100644 index 00000000000..8c12ebba6cf --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "2" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/a/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/a/Nargo.toml new file mode 100644 index 00000000000..dc0c2f8917c --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/a/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.8.0" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/a/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/a/src/main.nr new file mode 100644 index 00000000000..206dc46d57a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/a/src/main.nr @@ -0,0 +1,11 @@ +fn main(x : Field, y : pub Field) { + assert(x != y); +} + +#[test] +fn test_main() { + main(1, 2); + + // Uncomment to make test fail + // main(1, 1); +} diff --git a/crates/noirc_frontend/src/hir/mod.rs b/crates/noirc_frontend/src/hir/mod.rs index e85d054d4de..cd188f46392 100644 --- a/crates/noirc_frontend/src/hir/mod.rs +++ b/crates/noirc_frontend/src/hir/mod.rs @@ -71,7 +71,10 @@ impl Context { // Check the crate type // We don't panic here to allow users to `evaluate` libraries which will do nothing - if self.crate_graph[*crate_id].crate_type == CrateType::Binary { + if matches!( + self.crate_graph[*crate_id].crate_type, + CrateType::Binary | CrateType::Workspace + ) { // All Binaries should have a main function local_crate.main_function() } else { From 65ffc481617551757d3f8f3316e739db51d0ae21 Mon Sep 17 00:00:00 2001 From: kek kek kek Date: Thu, 13 Jul 2023 17:32:18 +0000 Subject: [PATCH 3/5] fix typo --- .../tests/test_data/workspace_default_member/Nargo.toml | 2 +- .../test_data_ssa_refactor/workspace_default_member/Nargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/nargo_cli/tests/test_data/workspace_default_member/Nargo.toml b/crates/nargo_cli/tests/test_data/workspace_default_member/Nargo.toml index ec1ef0a85bc..3828c5d0677 100644 --- a/crates/nargo_cli/tests/test_data/workspace_default_member/Nargo.toml +++ b/crates/nargo_cli/tests/test_data/workspace_default_member/Nargo.toml @@ -1,3 +1,3 @@ [workspace] members = ["a"] -default-member = ["a"] +default-member = "a" diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Nargo.toml index ec1ef0a85bc..3828c5d0677 100644 --- a/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Nargo.toml +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/workspace_default_member/Nargo.toml @@ -1,3 +1,3 @@ [workspace] members = ["a"] -default-member = ["a"] +default-member = "a" From b56e21dc1776c346d1bea5a59b8c0c2e81e78e5f Mon Sep 17 00:00:00 2001 From: kek kek kek Date: Thu, 13 Jul 2023 19:13:01 +0000 Subject: [PATCH 4/5] add docs --- crates/nargo/src/manifest/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/nargo/src/manifest/mod.rs b/crates/nargo/src/manifest/mod.rs index 825a44635d1..3331beb81de 100644 --- a/crates/nargo/src/manifest/mod.rs +++ b/crates/nargo/src/manifest/mod.rs @@ -55,7 +55,9 @@ pub struct Workspace { #[derive(Default, Debug, Deserialize, Clone)] #[serde(rename_all = "kebab-case")] pub struct WorkspaceConfig { + /// List of members in this workspace. pub members: Vec, + /// Specifies the default crate to interact with in the context (similarly to how we have nargo as the default crate in this repository). pub default_member: Option, } From 7b20ab2c28fa2bd01209e65e1dd4c073dbd283e2 Mon Sep 17 00:00:00 2001 From: kek kek kek Date: Fri, 14 Jul 2023 10:53:47 +0000 Subject: [PATCH 5/5] use `PathBuf` instead of `String` --- crates/nargo/src/manifest/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/nargo/src/manifest/mod.rs b/crates/nargo/src/manifest/mod.rs index 3331beb81de..ea51d622d82 100644 --- a/crates/nargo/src/manifest/mod.rs +++ b/crates/nargo/src/manifest/mod.rs @@ -1,5 +1,5 @@ use serde::Deserialize; -use std::collections::BTreeMap; +use std::{collections::BTreeMap, path::PathBuf}; mod errors; pub use self::errors::InvalidPackageError; @@ -56,9 +56,9 @@ pub struct Workspace { #[serde(rename_all = "kebab-case")] pub struct WorkspaceConfig { /// List of members in this workspace. - pub members: Vec, + pub members: Vec, /// Specifies the default crate to interact with in the context (similarly to how we have nargo as the default crate in this repository). - pub default_member: Option, + pub default_member: Option, } #[allow(dead_code)]