Skip to content

Commit 2a835f0

Browse files
committed
Use visible_traits where possible
1 parent acd5081 commit 2a835f0

File tree

4 files changed

+23
-7
lines changed

4 files changed

+23
-7
lines changed

compiler/rustc_hir_analysis/src/hir_ty_lowering/errors.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
179179
// all visible traits. If there's one clear winner, just suggest that.
180180

181181
let visible_traits: Vec<_> = tcx
182-
.all_traits()
182+
.visible_traits()
183183
.filter(|trait_def_id| {
184184
let viz = tcx.visibility(*trait_def_id);
185185
let def_id = self.item_def_id();

compiler/rustc_middle/src/ty/context.rs

+12-2
Original file line numberDiff line numberDiff line change
@@ -2078,10 +2078,20 @@ impl<'tcx> TyCtxt<'tcx> {
20782078
self.limits(()).move_size_limit
20792079
}
20802080

2081-
/// All traits that are visible within the crate graph (i.e. excluding private dependencies).
2081+
/// All traits in the crate graph, including those not visible to the user.
20822082
pub fn all_traits(self) -> impl Iterator<Item = DefId> + 'tcx {
20832083
iter::once(LOCAL_CRATE)
2084-
.chain(self.visible_crates(()).iter().copied())
2084+
.chain(self.crates(()).iter().copied())
2085+
.flat_map(move |cnum| self.traits(cnum).iter().copied())
2086+
}
2087+
2088+
/// All traits that are visible within the crate graph (i.e. excluding private dependencies).
2089+
pub fn visible_traits(self) -> impl Iterator<Item = DefId> + 'tcx {
2090+
let visible_crates =
2091+
self.crates(()).iter().copied().filter(move |cnum| self.is_user_visible_dep(*cnum));
2092+
2093+
iter::once(LOCAL_CRATE)
2094+
.chain(visible_crates)
20852095
.flat_map(move |cnum| self.traits(cnum).iter().copied())
20862096
}
20872097

compiler/rustc_passes/src/diagnostic_items.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,14 @@ fn all_diagnostic_items(tcx: TyCtxt<'_>, (): ()) -> DiagnosticItems {
7979
// Initialize the collector.
8080
let mut items = DiagnosticItems::default();
8181

82-
// Collect diagnostic items in other crates.
83-
for &cnum in tcx.visible_crates(()).iter().chain(std::iter::once(&LOCAL_CRATE)) {
82+
// Collect diagnostic items in visible crates.
83+
for cnum in tcx
84+
.crates(())
85+
.iter()
86+
.copied()
87+
.filter(|cnum| tcx.is_user_visible_dep(*cnum))
88+
.chain(std::iter::once(LOCAL_CRATE))
89+
{
8490
for (&name, &def_id) in &tcx.diagnostic_items(cnum).name_to_id {
8591
collect_item(tcx, &mut items, name, def_id);
8692
}

compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1730,7 +1730,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
17301730
let trait_def_id = trait_ref.def_id();
17311731
let trait_name = self.tcx.item_name(trait_def_id);
17321732
let crate_name = self.tcx.crate_name(trait_def_id.krate);
1733-
if let Some(other_trait_def_id) = self.tcx.all_traits().find(|def_id| {
1733+
if let Some(other_trait_def_id) = self.tcx.visible_traits().find(|def_id| {
17341734
trait_name == self.tcx.item_name(trait_def_id)
17351735
&& trait_def_id.krate != def_id.krate
17361736
&& crate_name == self.tcx.crate_name(def_id.krate)
@@ -2189,7 +2189,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
21892189
let required_trait_path = self.tcx.def_path_str(trait_ref.def_id());
21902190
let traits_with_same_path: UnordSet<_> = self
21912191
.tcx
2192-
.all_traits()
2192+
.visible_traits()
21932193
.filter(|trait_def_id| *trait_def_id != trait_ref.def_id())
21942194
.map(|trait_def_id| (self.tcx.def_path_str(trait_def_id), trait_def_id))
21952195
.filter(|(p, _)| *p == required_trait_path)

0 commit comments

Comments
 (0)