Rollup merge of #68913 - Areredify:gat_pretty, r=cramertj
Pretty-print generic params and where clauses on associated types closes #67509
This commit is contained in:
commit
da005822ce
|
@ -1074,12 +1074,15 @@ impl<'a> State<'a> {
|
|||
fn print_associated_type(
|
||||
&mut self,
|
||||
ident: ast::Ident,
|
||||
generics: &ast::Generics,
|
||||
bounds: &ast::GenericBounds,
|
||||
ty: Option<&ast::Ty>,
|
||||
) {
|
||||
self.word_space("type");
|
||||
self.print_ident(ident);
|
||||
self.print_generic_params(&generics.params);
|
||||
self.print_type_bounds(":", bounds);
|
||||
self.print_where_clause(&generics.where_clause);
|
||||
if let Some(ty) = ty {
|
||||
self.s.space();
|
||||
self.word_space("=");
|
||||
|
@ -1474,7 +1477,7 @@ impl<'a> State<'a> {
|
|||
self.print_fn_full(sig, item.ident, &item.generics, &item.vis, body, &item.attrs);
|
||||
}
|
||||
ast::AssocItemKind::TyAlias(bounds, ty) => {
|
||||
self.print_associated_type(item.ident, bounds, ty.as_deref());
|
||||
self.print_associated_type(item.ident, &item.generics, bounds, ty.as_deref());
|
||||
}
|
||||
ast::AssocItemKind::Macro(mac) => {
|
||||
self.print_mac(mac);
|
||||
|
|
|
@ -454,14 +454,17 @@ impl<'a> State<'a> {
|
|||
fn print_associated_type(
|
||||
&mut self,
|
||||
ident: ast::Ident,
|
||||
generics: &hir::Generics<'_>,
|
||||
bounds: Option<hir::GenericBounds<'_>>,
|
||||
ty: Option<&hir::Ty<'_>>,
|
||||
) {
|
||||
self.word_space("type");
|
||||
self.print_ident(ident);
|
||||
self.print_generic_params(&generics.params);
|
||||
if let Some(bounds) = bounds {
|
||||
self.print_bounds(":", bounds);
|
||||
}
|
||||
self.print_where_clause(&generics.where_clause);
|
||||
if let Some(ty) = ty {
|
||||
self.s.space();
|
||||
self.word_space("=");
|
||||
|
@ -902,6 +905,7 @@ impl<'a> State<'a> {
|
|||
hir::TraitItemKind::Type(ref bounds, ref default) => {
|
||||
self.print_associated_type(
|
||||
ti.ident,
|
||||
&ti.generics,
|
||||
Some(bounds),
|
||||
default.as_ref().map(|ty| &**ty),
|
||||
);
|
||||
|
@ -930,7 +934,7 @@ impl<'a> State<'a> {
|
|||
self.ann.nested(self, Nested::Body(body));
|
||||
}
|
||||
hir::ImplItemKind::TyAlias(ref ty) => {
|
||||
self.print_associated_type(ii.ident, None, Some(ty));
|
||||
self.print_associated_type(ii.ident, &ii.generics, None, Some(ty));
|
||||
}
|
||||
hir::ImplItemKind::OpaqueTy(bounds) => {
|
||||
self.word_space("type");
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
// Check that associated types print generic parameters and where clauses.
|
||||
// See issue #67509.
|
||||
|
||||
// pretty-compare-only
|
||||
// pp-exact:gat-bounds.pp
|
||||
|
||||
#![feature(generic_associated_types)]
|
||||
|
||||
trait X {
|
||||
type
|
||||
Y<T>: Trait
|
||||
where
|
||||
Self: Sized;
|
||||
}
|
||||
|
||||
impl X for () {
|
||||
type
|
||||
Y<T>
|
||||
where
|
||||
Self: Sized
|
||||
=
|
||||
u32;
|
||||
}
|
||||
|
||||
fn main() { }
|
|
@ -0,0 +1,17 @@
|
|||
// Check that associated types print generic parameters and where clauses.
|
||||
// See issue #67509.
|
||||
|
||||
// pretty-compare-only
|
||||
// pp-exact:gat-bounds.pp
|
||||
|
||||
#![feature(generic_associated_types)]
|
||||
|
||||
trait X {
|
||||
type Y<T>: Trait where Self: Sized;
|
||||
}
|
||||
|
||||
impl X for () {
|
||||
type Y<T> where Self: Sized = u32;
|
||||
}
|
||||
|
||||
fn main() { }
|
Loading…
Reference in New Issue