- let parent = self.tcx().parent(def_id).expect("opaque types always have a parent");
- match self.tcx().def_kind(parent) {
- DefKind::TyAlias | DefKind::AssocTy => {
- if let ty::Opaque(d, _) = *self.tcx().type_of(parent).kind() {
- if d == def_id {
- // If the type alias directly starts with the `impl` of the
- // opaque type we're printing, then skip the `::{opaque#1}`.
- p!(print_def_path(parent, substs));
- return Ok(self);
- }
+ return with_no_queries(|| {
+ let def_key = self.tcx().def_key(def_id);
+ if let Some(name) = def_key.disambiguated_data.data.get_opt_name() {
+ p!(write("{}", name));
+ // FIXME(eddyb) print this with `print_def_path`.
+ if !substs.is_empty() {
+ p!("::");
+ p!(generic_delimiters(|cx| cx.comma_sep(substs.iter())));