Skip to content

Commit 0b543ba

Browse files
committed
Refine warnings and better code
Signed-off-by: hi-rustin <[email protected]>
1 parent 61780a9 commit 0b543ba

File tree

3 files changed

+50
-63
lines changed

3 files changed

+50
-63
lines changed

src/cargo/core/package.rs

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ impl<'cfg> PackageSet<'cfg> {
524524
target_data,
525525
force_all_targets,
526526
);
527-
for &pkg_id in filtered_deps.iter() {
527+
for pkg_id in filtered_deps {
528528
collect_used_deps(
529529
used,
530530
resolve,
@@ -568,50 +568,45 @@ impl<'cfg> PackageSet<'cfg> {
568568
target_data: &RustcTargetData<'_>,
569569
force_all_targets: ForceAllTargets,
570570
) -> BTreeMap<PackageId, Vec<&Package>> {
571-
let mut ret = BTreeMap::new();
572-
573-
root_ids.iter().for_each(|&root_id| {
574-
let pkgs: Vec<&Package> = PackageSet::filter_deps(
575-
root_id,
576-
resolve,
577-
has_dev_units,
578-
requested_kinds,
579-
target_data,
580-
force_all_targets,
581-
)
571+
root_ids
582572
.iter()
583-
.filter_map(|&package_id| {
584-
if let Ok(dep_pkg) = self.get_one(package_id) {
585-
if !dep_pkg.targets().iter().any(|t| t.is_lib()) {
586-
Some(dep_pkg)
573+
.map(|&root_id| {
574+
let pkgs = PackageSet::filter_deps(
575+
root_id,
576+
resolve,
577+
has_dev_units,
578+
requested_kinds,
579+
target_data,
580+
force_all_targets,
581+
)
582+
.filter_map(|package_id| {
583+
if let Ok(dep_pkg) = self.get_one(package_id) {
584+
if !dep_pkg.targets().iter().any(|t| t.is_lib()) {
585+
Some(dep_pkg)
586+
} else {
587+
None
588+
}
587589
} else {
588590
None
589591
}
590-
} else {
591-
None
592-
}
592+
})
593+
.collect();
594+
(root_id, pkgs)
593595
})
594-
.collect();
595-
596-
if !pkgs.is_empty() {
597-
ret.insert(root_id, pkgs);
598-
}
599-
});
600-
601-
ret
596+
.collect()
602597
}
603598

604-
fn filter_deps(
599+
fn filter_deps<'a>(
605600
pkg_id: PackageId,
606-
resolve: &Resolve,
601+
resolve: &'a Resolve,
607602
has_dev_units: HasDevUnits,
608-
requested_kinds: &[CompileKind],
609-
target_data: &RustcTargetData<'_>,
603+
requested_kinds: &'a [CompileKind],
604+
target_data: &'a RustcTargetData<'_>,
610605
force_all_targets: ForceAllTargets,
611-
) -> Vec<PackageId> {
606+
) -> impl Iterator<Item = PackageId> + 'a {
612607
resolve
613608
.deps(pkg_id)
614-
.filter(|&(_id, deps)| {
609+
.filter(move |&(_id, deps)| {
615610
deps.iter().any(|dep| {
616611
if dep.kind() == DepKind::Development && has_dev_units == HasDevUnits::No {
617612
return false;
@@ -629,7 +624,7 @@ impl<'cfg> PackageSet<'cfg> {
629624
})
630625
})
631626
.map(|(pkg_id, _)| pkg_id)
632-
.collect()
627+
.into_iter()
633628
}
634629

635630
pub fn sources(&self) -> Ref<'_, SourceMap<'cfg>> {

src/cargo/ops/resolve.rs

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -171,30 +171,22 @@ pub fn resolve_ws_with_opts<'cfg>(
171171
feature_opts,
172172
)?;
173173

174-
let no_lib_warnings: Vec<String> = pkg_set
175-
.no_lib_pkgs(
176-
&resolved_with_overrides,
177-
&member_ids,
178-
has_dev_units,
179-
requested_targets,
180-
target_data,
181-
force_all_targets,
182-
)
183-
.iter()
184-
.flat_map(|(pkg_id, dep_pkgs)| {
185-
dep_pkgs.iter().map(move |dep_pkg| {
186-
format!(
187-
"{} has invalid dependency `{}`. `{}` has no lib package.",
188-
pkg_id,
189-
dep_pkg.name(),
190-
dep_pkg.name(),
191-
)
192-
})
193-
})
194-
.collect();
195-
196-
for warn in no_lib_warnings {
197-
ws.config().shell().warn(warn)?;
174+
let no_lib_pkgs = pkg_set.no_lib_pkgs(
175+
&resolved_with_overrides,
176+
&member_ids,
177+
has_dev_units,
178+
requested_targets,
179+
target_data,
180+
force_all_targets,
181+
);
182+
for (pkg_id, dep_pkgs) in no_lib_pkgs {
183+
for dep_pkg in dep_pkgs {
184+
ws.config().shell().warn(&format!(
185+
"{} ignoring invalid dependency `{}` which is missing a lib target",
186+
pkg_id,
187+
dep_pkg.name(),
188+
))?;
189+
}
198190
}
199191

200192
Ok(WorkspaceResolve {

tests/testsuite/run.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,7 @@ fn run_with_bin_dep() {
756756
p.cargo("run")
757757
.with_stderr(
758758
"\
759-
[WARNING] foo v0.0.1 ([CWD]) has invalid dependency `bar`. `bar` has no lib package.
759+
[WARNING] foo v0.0.1 ([CWD]) ignoring invalid dependency `bar` which is missing a lib target
760760
[COMPILING] foo v0.0.1 ([CWD])
761761
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
762762
[RUNNING] `target/debug/foo[EXE]`",
@@ -813,8 +813,8 @@ fn run_with_bin_deps() {
813813
p.cargo("run")
814814
.with_stderr(
815815
"\
816-
[WARNING] foo v0.0.1 ([CWD]) has invalid dependency `bar1`. `bar1` has no lib package.
817-
[WARNING] foo v0.0.1 ([CWD]) has invalid dependency `bar2`. `bar2` has no lib package.
816+
[WARNING] foo v0.0.1 ([CWD]) ignoring invalid dependency `bar1` which is missing a lib target
817+
[WARNING] foo v0.0.1 ([CWD]) ignoring invalid dependency `bar2` which is missing a lib target
818818
[COMPILING] foo v0.0.1 ([CWD])
819819
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
820820
[RUNNING] `target/debug/foo[EXE]`",
@@ -903,8 +903,8 @@ available binaries: bar1, bar2, foo1, foo2",
903903
p.cargo("run --bin foo1")
904904
.with_stderr(
905905
"\
906-
[WARNING] foo1 v0.0.1 ([CWD]/foo1) has invalid dependency `bar1`. `bar1` has no lib package.
907-
[WARNING] foo2 v0.0.1 ([CWD]/foo2) has invalid dependency `bar2`. `bar2` has no lib package.
906+
[WARNING] foo1 v0.0.1 ([CWD]/foo1) ignoring invalid dependency `bar1` which is missing a lib target
907+
[WARNING] foo2 v0.0.1 ([CWD]/foo2) ignoring invalid dependency `bar2` which is missing a lib target
908908
[COMPILING] foo1 v0.0.1 ([CWD]/foo1)
909909
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
910910
[RUNNING] `target/debug/foo1[EXE]`",

0 commit comments

Comments
 (0)