Skip to content

Commit 3d67e07

Browse files
committed
Auto merge of rust-lang#84463 - jyn514:refactor-impl, r=CraftSpider
rustdoc: Remove unnecessary `provided_trait_methods` field from Impl It can be calculated on-demand. Helps with rust-lang#76382.
2 parents b52769b + b1f5917 commit 3d67e07

File tree

8 files changed

+18
-30
lines changed

8 files changed

+18
-30
lines changed

src/librustdoc/clean/auto_trait.rs

-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
118118
span: Span::dummy(),
119119
unsafety: hir::Unsafety::Normal,
120120
generics: new_generics,
121-
provided_trait_methods: Default::default(),
122121
trait_: Some(trait_ref.clean(self.cx).get_trait_type().unwrap()),
123122
for_: ty.clean(self.cx),
124123
items: Vec::new(),

src/librustdoc/clean/blanket_impl.rs

-7
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,6 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
9292
}
9393

9494
self.cx.generated_synthetics.insert((ty, trait_def_id));
95-
let provided_trait_methods = self
96-
.cx
97-
.tcx
98-
.provided_trait_methods(trait_def_id)
99-
.map(|meth| meth.ident.name)
100-
.collect();
10195

10296
impls.push(Item {
10397
name: None,
@@ -112,7 +106,6 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
112106
self.cx.tcx.explicit_predicates_of(impl_def_id),
113107
)
114108
.clean(self.cx),
115-
provided_trait_methods,
116109
// FIXME(eddyb) compute both `trait_` and `for_` from
117110
// the post-inference `trait_ref`, as it's more accurate.
118111
trait_: Some(trait_ref.clean(self.cx).get_trait_type().unwrap()),

src/librustdoc/clean/inline.rs

+1-8
Original file line numberDiff line numberDiff line change
@@ -414,24 +414,17 @@ crate fn build_impl(
414414
record_extern_trait(cx, trait_did);
415415
}
416416

417-
let provided = trait_
418-
.def_id()
419-
.map(|did| tcx.provided_trait_methods(did).map(|meth| meth.ident.name).collect())
420-
.unwrap_or_default();
421-
422-
debug!("build_impl: impl {:?} for {:?}", trait_.def_id(), for_.def_id());
423-
424417
let (merged_attrs, cfg) = merge_attrs(cx, parent_module.into(), load_attrs(cx, did), attrs);
425418
debug!("merged_attrs={:?}", merged_attrs);
426419

420+
debug!("build_impl: impl {:?} for {:?}", trait_.def_id(), for_.def_id());
427421
ret.push(clean::Item::from_def_id_and_attrs_and_parts(
428422
did,
429423
None,
430424
clean::ImplItem(clean::Impl {
431425
span: clean::types::rustc_span(did, cx.tcx),
432426
unsafety: hir::Unsafety::Normal,
433427
generics,
434-
provided_trait_methods: provided,
435428
trait_,
436429
for_,
437430
items: trait_items,

src/librustdoc/clean/mod.rs

-6
Original file line numberDiff line numberDiff line change
@@ -1930,11 +1930,6 @@ fn clean_impl(impl_: &hir::Impl<'_>, hir_id: hir::HirId, cx: &mut DocContext<'_>
19301930
build_deref_target_impls(cx, &items, &mut ret);
19311931
}
19321932

1933-
let provided: FxHashSet<Symbol> = trait_
1934-
.def_id()
1935-
.map(|did| tcx.provided_trait_methods(did).map(|meth| meth.ident.name).collect())
1936-
.unwrap_or_default();
1937-
19381933
let for_ = impl_.self_ty.clean(cx);
19391934
let type_alias = for_.def_id().and_then(|did| match tcx.def_kind(did) {
19401935
DefKind::TyAlias => Some(tcx.type_of(did).clean(cx)),
@@ -1945,7 +1940,6 @@ fn clean_impl(impl_: &hir::Impl<'_>, hir_id: hir::HirId, cx: &mut DocContext<'_>
19451940
span: types::rustc_span(tcx.hir().local_def_id(hir_id).to_def_id(), tcx),
19461941
unsafety: impl_.unsafety,
19471942
generics: impl_.generics.clean(cx),
1948-
provided_trait_methods: provided.clone(),
19491943
trait_,
19501944
for_,
19511945
items,

src/librustdoc/clean/types.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -2150,7 +2150,6 @@ crate struct Impl {
21502150
crate span: Span,
21512151
crate unsafety: hir::Unsafety,
21522152
crate generics: Generics,
2153-
crate provided_trait_methods: FxHashSet<Symbol>,
21542153
crate trait_: Option<Type>,
21552154
crate for_: Type,
21562155
crate items: Vec<Item>,
@@ -2159,6 +2158,15 @@ crate struct Impl {
21592158
crate blanket_impl: Option<Type>,
21602159
}
21612160

2161+
impl Impl {
2162+
crate fn provided_trait_methods(&self, tcx: TyCtxt<'_>) -> FxHashSet<Symbol> {
2163+
self.trait_
2164+
.def_id()
2165+
.map(|did| tcx.provided_trait_methods(did).map(|meth| meth.ident.name).collect())
2166+
.unwrap_or_default()
2167+
}
2168+
}
2169+
21622170
#[derive(Clone, Debug)]
21632171
crate struct Import {
21642172
crate kind: ImportKind,

src/librustdoc/html/render/mod.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -726,7 +726,8 @@ fn render_impls(
726726
.iter()
727727
.map(|i| {
728728
let did = i.trait_did_full(cache).unwrap();
729-
let assoc_link = AssocItemLink::GotoSource(did, &i.inner_impl().provided_trait_methods);
729+
let provided_trait_methods = i.inner_impl().provided_trait_methods(tcx);
730+
let assoc_link = AssocItemLink::GotoSource(did, &provided_trait_methods);
730731
let mut buffer = if w.is_for_html() { Buffer::html() } else { Buffer::new() };
731732
render_impl(
732733
&mut buffer,
@@ -1490,7 +1491,8 @@ fn render_impl(
14901491
continue;
14911492
}
14921493
let did = i.trait_.as_ref().unwrap().def_id_full(cx.cache()).unwrap();
1493-
let assoc_link = AssocItemLink::GotoSource(did, &i.provided_trait_methods);
1494+
let provided_methods = i.provided_trait_methods(cx.tcx());
1495+
let assoc_link = AssocItemLink::GotoSource(did, &provided_methods);
14941496

14951497
doc_impl_item(
14961498
w,

src/librustdoc/html/render/print_item.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -669,10 +669,9 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
669669
write_small_section_header(w, "foreign-impls", "Implementations on Foreign Types", "");
670670

671671
for implementor in foreign {
672-
let assoc_link = AssocItemLink::GotoSource(
673-
implementor.impl_item.def_id,
674-
&implementor.inner_impl().provided_trait_methods,
675-
);
672+
let provided_methods = implementor.inner_impl().provided_trait_methods(cx.tcx());
673+
let assoc_link =
674+
AssocItemLink::GotoSource(implementor.impl_item.def_id, &provided_methods);
676675
render_impl(
677676
w,
678677
cx,

src/librustdoc/json/conversions.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -453,10 +453,10 @@ impl FromWithTcx<clean::Trait> for Trait {
453453

454454
impl FromWithTcx<clean::Impl> for Impl {
455455
fn from_tcx(impl_: clean::Impl, tcx: TyCtxt<'_>) -> Self {
456+
let provided_trait_methods = impl_.provided_trait_methods(tcx);
456457
let clean::Impl {
457458
unsafety,
458459
generics,
459-
provided_trait_methods,
460460
trait_,
461461
for_,
462462
items,

0 commit comments

Comments
 (0)