Skip to content
This repository was archived by the owner on Sep 17, 2023. It is now read-only.

Commit b67f987

Browse files
committed
perf: rename internal_dependencies_iter, use impl Iterator
1 parent f188b8b commit b67f987

File tree

2 files changed

+21
-24
lines changed

2 files changed

+21
-24
lines changed

src/link.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,10 @@ fn link_package_dependencies(
118118
let package_directory = package_manifest.directory();
119119
let mut tsconfig = TypescriptConfig::from_directory(&opts.root, &package_directory)?;
120120
let internal_dependencies =
121-
package_manifest.get_internal_dependencies(&package_manifest_by_package_name);
121+
package_manifest.internal_dependencies_iter(&package_manifest_by_package_name);
122122

123123
let desired_project_references: Vec<TypescriptProjectReference> = {
124124
let mut typescript_project_references: Vec<String> = internal_dependencies
125-
.iter()
126125
.map(|dependency| {
127126
diff_paths(dependency.directory(), package_manifest.directory())
128127
.expect(

src/package_manifest.rs

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -88,35 +88,34 @@ impl AsRef<PackageManifest> for PackageManifest {
8888
}
8989

9090
impl PackageManifest {
91-
pub fn get_internal_dependencies<'a, T>(
91+
pub fn internal_dependencies_iter<'a, T>(
9292
&'a self,
93-
package_manifests_by_package_name: &HashMap<String, &'a T>,
94-
) -> Vec<&'a PackageManifest>
93+
package_manifests_by_package_name: &'a HashMap<String, &'a T>,
94+
) -> impl Iterator<Item = &'a PackageManifest>
9595
where
9696
T: AsRef<PackageManifest>,
9797
{
98-
let get_dependency_group = |dependency_group: &str| -> Vec<&'a String> {
99-
self.contents
100-
.extra_fields
101-
.get(dependency_group)
102-
.and_then(serde_json::Value::as_object)
103-
.map(|object| object.keys().collect())
104-
.unwrap_or_default()
105-
};
106-
107-
get_dependency_group("dependencies")
98+
static DEPENDENCY_GROUPS: &[&str] = &[
99+
"dependencies",
100+
"devDependencies",
101+
"optionalDependencies",
102+
"peerDependencies",
103+
];
104+
105+
DEPENDENCY_GROUPS
108106
.iter()
109-
.chain(get_dependency_group("devDependencies").iter())
110-
.chain(get_dependency_group("optionalDependencies").iter())
111-
.chain(get_dependency_group("peerDependencies").iter())
107+
// only iterate over the objects corresponding to each dependency group
108+
.filter_map(|dependency_group| {
109+
self.contents.extra_fields.get(dependency_group)?.as_object()
110+
})
111+
// get all dependency names from all groups
112+
.flat_map(|dependency_group_value| dependency_group_value.keys())
112113
// filter out external packages
113114
.filter_map(|package_name| {
114115
package_manifests_by_package_name
115-
.get(*package_name)
116-
.cloned()
117-
.map(|thing| thing.as_ref())
116+
.get(package_name)
117+
.map(|&thing| thing.as_ref())
118118
})
119-
.collect()
120119
}
121120

122121
pub fn transitive_internal_dependency_package_names<'a>(
@@ -135,8 +134,7 @@ impl PackageManifest {
135134
seen_package_names.insert(&current_manifest.contents.name);
136135

137136
for dependency in current_manifest
138-
.get_internal_dependencies(package_manifest_by_package_name)
139-
.iter()
137+
.internal_dependencies_iter(package_manifest_by_package_name)
140138
{
141139
internal_dependencies.insert(dependency.contents.name.to_owned());
142140
if !seen_package_names.contains(&dependency.contents.name.as_ref()) {

0 commit comments

Comments
 (0)