Skip to main content

dependency_version_map

Function dependency_version_map 

Source
pub fn dependency_version_map(
    pr: &dyn ParseResult,
) -> HashMap<PackageName, Vec<Option<VersionReq>>>
Expand description

Builds name -> [version_requirement, ...] for every dependency in pr, one entry per occurrence — the shape DependencyDiff::compute needs.

A HashMap<PackageName, Option<VersionReq>> (single value per name) would silently collapse a duplicate name to its last occurrence, losing any edit made to an earlier one (#394).

Occurrence order is whatever pr.dependencies() returns, which for deps-cargo is not document order for multiple [target.*] blocks (see DependencyDiff::compute’s doc). A consequence worth knowing: if an edit only renames a [target.'cfg(...)'.dependencies] expression (no version change), that occurrence can sort into a different position in the new Vec than the old one, so old.get(name) != new.get(name) trips even though every individual version requirement is unchanged — a spurious but harmless version_changed (one extra registry refetch/OSV rescan for that name, never a missed or misattributed one).

§Examples

use deps_core::PackageName;
use deps_core::test_util::stub_parse_result_with_dependencies;
use deps_engine::classify::resolved::dependency_version_map;

let parsed = stub_parse_result_with_dependencies(2);
let map = dependency_version_map(parsed.as_ref());

assert_eq!(map.len(), 2);
assert_eq!(map.get(&PackageName::new("dep-0")), Some(&vec![None]));