diff --git a/crates/prometeu-compiler/src/building/plan.rs b/crates/prometeu-compiler/src/building/plan.rs index 16c61981..982c162a 100644 --- a/crates/prometeu-compiler/src/building/plan.rs +++ b/crates/prometeu-compiler/src/building/plan.rs @@ -134,7 +134,7 @@ mod tests { use crate::deps::resolver::{ProjectId, ResolvedEdge, ResolvedGraph, ResolvedNode}; use crate::manifest::Manifest; use crate::sources::ProjectSources; - use std::collections::HashMap; + use std::collections::BTreeMap; fn mock_node(name: &str, version: &str) -> ResolvedNode { ResolvedNode { @@ -144,7 +144,7 @@ mod tests { name: name.to_string(), version: version.to_string(), kind: crate::manifest::ManifestKind::Lib, - dependencies: HashMap::new(), + dependencies: BTreeMap::new(), }, sources: ProjectSources { main: None, diff --git a/crates/prometeu-compiler/src/lib.rs b/crates/prometeu-compiler/src/lib.rs index 8ab901ef..ed59ec06 100644 --- a/crates/prometeu-compiler/src/lib.rs +++ b/crates/prometeu-compiler/src/lib.rs @@ -95,6 +95,10 @@ pub enum Commands { Verify { /// Path to the project root directory. project_dir: PathBuf, + + /// Whether to explain the dependency resolution process. + #[arg(long)] + explain_deps: bool, }, } @@ -125,10 +129,10 @@ pub fn run() -> Result<()> { let compilation_unit = compiler::compile_ext(&project_dir, explain_deps)?; compilation_unit.export(&out, emit_disasm, emit_symbols)?; } - Commands::Verify { project_dir } => { + Commands::Verify { project_dir, explain_deps } => { println!("Verifying project at {:?}", project_dir); - compiler::compile(&project_dir)?; + compiler::compile_ext(&project_dir, explain_deps)?; println!("Project is valid!"); } } diff --git a/crates/prometeu-compiler/src/manifest.rs b/crates/prometeu-compiler/src/manifest.rs index f2a6095c..1d2b3e21 100644 --- a/crates/prometeu-compiler/src/manifest.rs +++ b/crates/prometeu-compiler/src/manifest.rs @@ -1,5 +1,5 @@ use serde::{Deserialize, Serialize}; -use std::collections::HashMap; +use std::collections::BTreeMap; use std::fs; use std::path::{Path, PathBuf}; @@ -40,7 +40,7 @@ pub struct Manifest { #[serde(default)] pub kind: ManifestKind, #[serde(default)] - pub dependencies: HashMap, + pub dependencies: BTreeMap, } #[derive(Debug)] diff --git a/crates/prometeu/src/main.rs b/crates/prometeu/src/main.rs index 0512f977..1ec3a6e0 100644 --- a/crates/prometeu/src/main.rs +++ b/crates/prometeu/src/main.rs @@ -37,6 +37,10 @@ enum Commands { Build { /// Project source directory. project_dir: String, + + /// Whether to explain the dependency resolution process. + #[arg(long)] + explain_deps: bool, }, /// Packages a cartridge directory into a distributable .pmc file. Pack { @@ -56,6 +60,10 @@ enum VerifyCommands { C { /// Project directory project_dir: String, + + /// Whether to explain the dependency resolution process. + #[arg(long)] + explain_deps: bool, }, /// Verifies a cartridge or PMC file P { @@ -86,15 +94,23 @@ fn main() { &["--debug", &cart, "--port", &port.to_string()], ); } - Some(Commands::Build { project_dir }) => { - dispatch(&exe_dir, "prometeuc", &["build", &project_dir]); + Some(Commands::Build { project_dir, explain_deps }) => { + let mut args = vec!["build", &project_dir]; + if explain_deps { + args.push("--explain-deps"); + } + dispatch(&exe_dir, "prometeuc", &args); } Some(Commands::Pack { .. }) => { not_implemented("pack", "prometeup"); } Some(Commands::Verify { target }) => match target { - VerifyCommands::C { project_dir } => { - dispatch(&exe_dir, "prometeuc", &["verify", &project_dir]); + VerifyCommands::C { project_dir, explain_deps } => { + let mut args = vec!["verify", &project_dir]; + if explain_deps { + args.push("--explain-deps"); + } + dispatch(&exe_dir, "prometeuc", &args); } VerifyCommands::P { .. } => not_implemented("verify p", "prometeup"), },