From 4df5f8491320e5795718cf0222e80fa27e57c8ad Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 11 May 2026 02:05:34 +0900 Subject: refactor(package): rename traits and switch dep maps to IndexMap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rename Package/CompletePackage to PackageInterface/CompletePackageInterface to mirror Composer's interface names, and split each into its own module under crates/mozart-core/src/package/. Switch dependency-link and metadata maps from BTreeMap to indexmap::IndexMap so serialized JSON preserves the original key ordering rather than sorting alphabetically — matching PHP associative-array semantics. The --sort-packages behaviour in `require` is preserved via sort_unstable_keys. --- crates/mozart/src/commands/licenses.rs | 46 ++++++++++++++++------------------ 1 file changed, 22 insertions(+), 24 deletions(-) (limited to 'crates/mozart/src/commands/licenses.rs') diff --git a/crates/mozart/src/commands/licenses.rs b/crates/mozart/src/commands/licenses.rs index 73f2018..0e4ea0b 100644 --- a/crates/mozart/src/commands/licenses.rs +++ b/crates/mozart/src/commands/licenses.rs @@ -4,14 +4,13 @@ use indexmap::IndexMap; use mozart_core::console::IoInterface; use mozart_core::console::hyperlink; use mozart_core::console_writeln; -use mozart_core::package::Package as _; +use mozart_core::package::PackageInterface as _; use mozart_core::package_info; use mozart_core::package_info::PackageUrls; use mozart_core::package_sorter::sort_packages_alphabetically; use mozart_core::repository_utils; use mozart_core::repository_utils::Required; use serde::Serialize as _; -use std::collections::BTreeMap; #[derive(Args)] pub struct LicensesArgs { @@ -38,7 +37,7 @@ struct LicenseEntry { name: String, version: String, licenses: Vec, - requires: BTreeMap, + requires: indexmap::IndexMap, support_source: Option, source_url: Option, homepage: Option, @@ -48,7 +47,7 @@ impl Required for LicenseEntry { fn package_name(&self) -> &str { &self.name } - fn requires(&self) -> &BTreeMap { + fn requires(&self) -> &indexmap::IndexMap { &self.requires } } @@ -144,7 +143,7 @@ fn read_root_licenses(composer_json_path: &std::path::Path) -> anyhow::Result( working_dir: &std::path::Path, - root_requires: &BTreeMap, + root_requires: &indexmap::IndexMap, no_dev: bool, ) -> anyhow::Result> { let vendor_dir = working_dir.join("vendor"); @@ -453,7 +452,6 @@ fn tally_licenses(entries: &[LicenseEntry]) -> Vec<(String, usize)> { #[cfg(test)] mod tests { use super::*; - use std::collections::BTreeMap; fn entry(name: &str, licenses: &[&str]) -> LicenseEntry { LicenseEntry { @@ -461,7 +459,7 @@ mod tests { name: name.to_lowercase(), version: "1.0.0".to_string(), licenses: licenses.iter().map(|s| s.to_string()).collect(), - requires: BTreeMap::new(), + requires: indexmap::IndexMap::new(), support_source: None, source_url: None, homepage: None, @@ -547,7 +545,7 @@ mod tests { #[test] fn installed_to_entry_extracts_require_and_license() { use mozart_core::repository::installed::InstalledPackageEntry; - let mut extra = BTreeMap::new(); + let mut extra = indexmap::IndexMap::new(); extra.insert("license".to_string(), serde_json::json!(["MIT"])); extra.insert( "require".to_string(), @@ -587,7 +585,7 @@ mod tests { aliases: vec![], homepage: Some("https://example.com/".to_string()), support: Some(serde_json::json!({"source": "https://github.com/v/p"})), - extra_fields: BTreeMap::new(), + extra_fields: indexmap::IndexMap::new(), }; let e = installed_to_entry(&pkg); assert_eq!(e.support_source.as_deref(), Some("https://github.com/v/p")); @@ -630,7 +628,7 @@ mod tests { aliases: vec![], homepage: None, support: None, - extra_fields: BTreeMap::new(), + extra_fields: indexmap::IndexMap::new(), }); installed.upsert(mozart_core::repository::installed::InstalledPackageEntry { name: "b/b".to_string(), @@ -644,11 +642,11 @@ mod tests { aliases: vec![], homepage: None, support: None, - extra_fields: BTreeMap::new(), + extra_fields: indexmap::IndexMap::new(), }); installed.write(&vendor_dir).unwrap(); - let mut root_req = BTreeMap::new(); + let mut root_req = indexmap::IndexMap::new(); root_req.insert("a/a".to_string(), "*".to_string()); let kept = load_installed_entries(working_dir, &root_req, true).unwrap(); @@ -679,11 +677,11 @@ mod tests { version_normalized: None, source: None, dist: None, - require: BTreeMap::new(), - require_dev: BTreeMap::new(), - conflict: BTreeMap::new(), - provide: BTreeMap::new(), - replace: BTreeMap::new(), + require: indexmap::IndexMap::new(), + require_dev: indexmap::IndexMap::new(), + conflict: indexmap::IndexMap::new(), + provide: indexmap::IndexMap::new(), + replace: indexmap::IndexMap::new(), suggest: None, package_type: None, autoload: None, @@ -696,7 +694,7 @@ mod tests { support: None, funding: None, time: None, - extra_fields: BTreeMap::new(), + extra_fields: indexmap::IndexMap::new(), }], packages_dev: Some(vec![LockedPackage { name: "phpunit/phpunit".to_string(), @@ -704,11 +702,11 @@ mod tests { version_normalized: None, source: None, dist: None, - require: BTreeMap::new(), - require_dev: BTreeMap::new(), - conflict: BTreeMap::new(), - provide: BTreeMap::new(), - replace: BTreeMap::new(), + require: indexmap::IndexMap::new(), + require_dev: indexmap::IndexMap::new(), + conflict: indexmap::IndexMap::new(), + provide: indexmap::IndexMap::new(), + replace: indexmap::IndexMap::new(), suggest: None, package_type: None, autoload: None, @@ -721,7 +719,7 @@ mod tests { support: None, funding: None, time: None, - extra_fields: BTreeMap::new(), + extra_fields: indexmap::IndexMap::new(), }]), aliases: vec![], minimum_stability: "stable".to_string(), -- cgit v1.3.1