Skip to content

Commit c1249d2

Browse files
committed
[experiments]
1 parent 438ca19 commit c1249d2

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

src/librustdoc/clean/inline.rs

+3
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,9 @@ pub(crate) fn build_function<'tcx>(
310310
generics.params.sort_by_key(|param| cx.tcx.def_ident_span(param.def_id).unwrap());
311311
}
312312

313+
// FIXME(fmease): @Temporary
314+
crate::clean::simplify::move_bounds_to_generic_parameters(&mut generics);
315+
313316
let decl = clean_poly_fn_sig(cx, Some(def_id), sig);
314317

315318
Box::new(clean::Function { decl, generics })

src/librustdoc/clean/mod.rs

+38-2
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ pub(crate) fn clean_generics<'tcx>(
750750

751751
fn clean_ty_generics<'tcx>(
752752
cx: &mut DocContext<'tcx>,
753-
generics: &ty::Generics,
753+
generics: &'tcx ty::Generics,
754754
predicates: ty::GenericPredicates<'tcx>,
755755
_item_def_id: DefId,
756756
) -> Generics {
@@ -787,10 +787,46 @@ fn clean_ty_generics<'tcx>(
787787
let mut impl_trait_proj =
788788
FxHashMap::<u32, Vec<(DefId, PathSegment, ty::Binder<'_, ty::Term<'_>>)>>::default();
789789

790+
let item_span = {
791+
if !predicates.predicates.is_empty() {
792+
let span = cx.tcx.def_span(_item_def_id);
793+
// FIXME: this is not correct if spans come from different expansions!
794+
let params_sp = {
795+
let mut params = generics.params.iter();
796+
if let Some(param) = params.next() {
797+
let mut sp = cx.tcx.def_ident_span(param.def_id).unwrap();
798+
while let Some(param) = params.next() {
799+
sp = sp.to(cx.tcx.def_ident_span(param.def_id).unwrap());
800+
}
801+
sp
802+
} else {
803+
None
804+
}
805+
};
806+
807+
Some(span)
808+
} else { None }
809+
};
810+
790811
let where_predicates = predicates
791812
.predicates
792813
.iter()
793-
.flat_map(|(pred, _)| {
814+
.flat_map(|(pred, span)| {
815+
if !(span.is_dummy()
816+
|| span.is_empty()
817+
|| span.from_expansion()
818+
|| !cx.tcx.sess.source_map().is_span_accessible(*span))
819+
{
820+
let mut diag = cx.tcx.dcx().struct_span_warn(*span, format!("pred={pred:?}"));
821+
822+
if let Some(item_span) = item_span {
823+
diag.span_note(item_span, "span");
824+
diag.note(if item_span.contains(*span) { "<...>" } else { "where ... "});
825+
}
826+
827+
diag.emit();
828+
}
829+
794830
let mut projection = None;
795831
let param_idx = (|| {
796832
let bound_p = pred.kind();

0 commit comments

Comments
 (0)