.infcx
.inner
.borrow_mut()
- .type_variables
+ .type_variables()
.sub_unified(a_vid, b_vid),
_ => false,
}
highlight: Option<ty::print::RegionHighlightMode>,
) -> (String, Option<Span>, Cow<'static, str>, Option<String>, Option<&'static str>) {
if let ty::Infer(ty::TyVar(ty_vid)) = ty.kind {
- let ty_vars = &self.inner.borrow().type_variables;
+ let mut inner = self.inner.borrow_mut();
+ let ty_vars = &inner.type_variables();
let var_origin = ty_vars.var_origin(ty_vid);
if let TypeVariableOriginKind::TypeParameterDefinition(name, def_id) = var_origin.kind {
let parent_def_id = def_id.and_then(|def_id| self.tcx.parent(def_id));
.get_opt_name()
.map(|parent_symbol| parent_symbol.to_string());
- let type_parent_desc = self
- .tcx
- .def_kind(parent_def_id)
- .map(|parent_def_kind| parent_def_kind.descr(parent_def_id));
-
- (parent_name, type_parent_desc)
+ (parent_name, Some(self.tcx.def_kind(parent_def_id).descr(parent_def_id)))
} else {
(None, None)
};
let ty_to_string = |ty: Ty<'tcx>| -> String {
let mut s = String::new();
let mut printer = ty::print::FmtPrinter::new(self.tcx, &mut s, Namespace::TypeNS);
- let ty_vars = &self.inner.borrow().type_variables;
+ let mut inner = self.inner.borrow_mut();
+ let ty_vars = inner.type_variables();
let getter = move |ty_vid| {
let var_origin = ty_vars.var_origin(ty_vid);
if let TypeVariableOriginKind::TypeParameterDefinition(name, _) = var_origin.kind {
None
};
printer.name_resolver = Some(Box::new(&getter));
- let _ = ty.print(printer);
+ let _ = if let ty::FnDef(..) = ty.kind {
+ // We don't want the regular output for `fn`s because it includes its path in
+ // invalid pseduo-syntax, we want the `fn`-pointer output instead.
+ ty.fn_sig(self.tcx).print(printer)
+ } else {
+ ty.print(printer)
+ };
s
};