diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-01-16 16:58:10 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-16 16:58:10 +0100 |
| commit | 9527533408b41a092638b4830605b6c06ab84a35 (patch) | |
| tree | 030f1a527b5df1b08a48df46265c3ce601fa093b | |
| parent | 7be8693984d32d2f65ce9ded4f65b6b7340bddce (diff) | |
| parent | a18f43f25d414a9a3990bd2afe25e26b92f5fb22 (diff) | |
| download | rust-9527533408b41a092638b4830605b6c06ab84a35.tar.gz rust-9527533408b41a092638b4830605b6c06ab84a35.zip | |
Rollup merge of #92487 - dtolnay:traitalias, r=matthewjasper
Fix unclosed boxes in pretty printing of TraitAlias
This was causing trait aliases to not even render at all in stringified / pretty printed output.
```rust
macro_rules! repro {
($item:item) => {
stringify!($item)
};
}
fn main() {
println!("{:?}", repro!(pub trait Trait<T> = Sized where T: 'a;));
}
```
Before: `""`
After: `"pub trait Trait<T> = Sized where T: 'a;"`
The fix is copied from how `head`/`end` for `ItemKind::Use`, `ItemKind::ExternCrate`, and `ItemKind::Mod` are all done in the pretty printer:
https://github.com/rust-lang/rust/blob/dd3ac41495e85a9b7b5cb3186379d02ce17e51fe/compiler/rustc_ast_pretty/src/pprust/state.rs#L1178-L1184
| -rw-r--r-- | compiler/rustc_ast_pretty/src/pprust/state.rs | 6 | ||||
| -rw-r--r-- | compiler/rustc_hir_pretty/src/lib.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/macros/stringify.rs | 2 |
3 files changed, 7 insertions, 7 deletions
diff --git a/compiler/rustc_ast_pretty/src/pprust/state.rs b/compiler/rustc_ast_pretty/src/pprust/state.rs index fa9a20f2e03..32a4a0751d8 100644 --- a/compiler/rustc_ast_pretty/src/pprust/state.rs +++ b/compiler/rustc_ast_pretty/src/pprust/state.rs @@ -1357,9 +1357,7 @@ impl<'a> State<'a> { self.bclose(item.span, empty); } ast::ItemKind::TraitAlias(ref generics, ref bounds) => { - self.head(""); - self.print_visibility(&item.vis); - self.word_nbsp("trait"); + self.head(visibility_qualified(&item.vis, "trait")); self.print_ident(item.ident); self.print_generic_params(&generics.params); let mut real_bounds = Vec::with_capacity(bounds.len()); @@ -1377,6 +1375,8 @@ impl<'a> State<'a> { self.print_type_bounds("=", &real_bounds); self.print_where_clause(&generics.where_clause); self.word(";"); + self.end(); // end inner head-block + self.end(); // end outer head-block } ast::ItemKind::MacCall(ref mac) => { self.print_mac(mac); diff --git a/compiler/rustc_hir_pretty/src/lib.rs b/compiler/rustc_hir_pretty/src/lib.rs index 4c9e2d7fe42..1fd226291d1 100644 --- a/compiler/rustc_hir_pretty/src/lib.rs +++ b/compiler/rustc_hir_pretty/src/lib.rs @@ -705,9 +705,7 @@ impl<'a> State<'a> { self.bclose(item.span); } hir::ItemKind::TraitAlias(ref generics, ref bounds) => { - self.head(""); - self.print_visibility(&item.vis); - self.word_nbsp("trait"); + self.head(visibility_qualified(&item.vis, "trait")); self.print_ident(item.ident); self.print_generic_params(&generics.params); let mut real_bounds = Vec::with_capacity(bounds.len()); @@ -725,6 +723,8 @@ impl<'a> State<'a> { self.print_bounds("=", real_bounds); self.print_where_clause(&generics.where_clause); self.word(";"); + self.end(); // end inner head-block + self.end(); // end outer head-block } } self.ann.post(self, AnnNode::Item(item)) diff --git a/src/test/ui/macros/stringify.rs b/src/test/ui/macros/stringify.rs index 820dcdb9394..004ab386b3f 100644 --- a/src/test/ui/macros/stringify.rs +++ b/src/test/ui/macros/stringify.rs @@ -589,7 +589,7 @@ fn test_item() { stringify_item!( pub trait Trait<T> = Sized where T: 'a; ), - "", // FIXME + "pub trait Trait<T> = Sized where T: 'a;", ); // ItemKind::Impl |
