-
Notifications
You must be signed in to change notification settings - Fork 242
/
Copy pathlib.rs
56 lines (46 loc) · 1.63 KB
/
lib.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#![forbid(unsafe_code)]
#![warn(unused_crate_dependencies, unused_extern_crates)]
#![warn(unreachable_pub)]
#![warn(clippy::semicolon_if_nothing_returned)]
//! Nargo is the package manager for Noir
//! This name was used because it sounds like `cargo` and
//! Noir Package Manager abbreviated is npm, which is already taken.
pub mod artifacts;
pub mod constants;
mod errors;
pub mod ops;
pub mod package;
pub mod workspace;
use std::collections::BTreeMap;
use fm::FileManager;
use noirc_driver::{add_dep, prepare_crate};
use noirc_frontend::{
graph::{CrateGraph, CrateId, CrateName},
hir::Context,
};
use package::{Dependency, Package};
pub use self::errors::NargoError;
pub fn prepare_dependencies(
context: &mut Context,
parent_crate: CrateId,
dependencies: &BTreeMap<CrateName, Dependency>,
) {
for (dep_name, dep) in dependencies.iter() {
match dep {
Dependency::Remote { package } | Dependency::Local { package } => {
let crate_id = prepare_crate(context, &package.entry_path);
add_dep(context, parent_crate, crate_id, dep_name.clone());
prepare_dependencies(context, crate_id, &package.dependencies);
}
}
}
}
pub fn prepare_package(package: &Package) -> (Context, CrateId) {
// TODO: FileManager continues to leak into various crates
let fm = FileManager::new(&package.root_dir);
let graph = CrateGraph::default();
let mut context = Context::new(fm, graph);
let crate_id = prepare_crate(&mut context, &package.entry_path);
prepare_dependencies(&mut context, crate_id, &package.dependencies);
(context, crate_id)
}