Remove pretty printer space inside block with only outer attrs

This commit is contained in:
David Tolnay 2021-12-28 12:26:18 -08:00
parent 83b15bfe1c
commit cbccc4a597
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
7 changed files with 24 additions and 23 deletions

View File

@ -387,23 +387,23 @@ pub trait PrintState<'a>: std::ops::Deref<Target = pp::Printer> + std::ops::Dere
self.print_string(sym.as_str(), style); self.print_string(sym.as_str(), style);
} }
fn print_inner_attributes(&mut self, attrs: &[ast::Attribute]) { fn print_inner_attributes(&mut self, attrs: &[ast::Attribute]) -> bool {
self.print_either_attributes(attrs, ast::AttrStyle::Inner, false, true) self.print_either_attributes(attrs, ast::AttrStyle::Inner, false, true)
} }
fn print_inner_attributes_no_trailing_hardbreak(&mut self, attrs: &[ast::Attribute]) { fn print_inner_attributes_no_trailing_hardbreak(&mut self, attrs: &[ast::Attribute]) -> bool {
self.print_either_attributes(attrs, ast::AttrStyle::Inner, false, false) self.print_either_attributes(attrs, ast::AttrStyle::Inner, false, false)
} }
fn print_outer_attributes(&mut self, attrs: &[ast::Attribute]) { fn print_outer_attributes(&mut self, attrs: &[ast::Attribute]) -> bool {
self.print_either_attributes(attrs, ast::AttrStyle::Outer, false, true) self.print_either_attributes(attrs, ast::AttrStyle::Outer, false, true)
} }
fn print_inner_attributes_inline(&mut self, attrs: &[ast::Attribute]) { fn print_inner_attributes_inline(&mut self, attrs: &[ast::Attribute]) -> bool {
self.print_either_attributes(attrs, ast::AttrStyle::Inner, true, true) self.print_either_attributes(attrs, ast::AttrStyle::Inner, true, true)
} }
fn print_outer_attributes_inline(&mut self, attrs: &[ast::Attribute]) { fn print_outer_attributes_inline(&mut self, attrs: &[ast::Attribute]) -> bool {
self.print_either_attributes(attrs, ast::AttrStyle::Outer, true, true) self.print_either_attributes(attrs, ast::AttrStyle::Outer, true, true)
} }
@ -413,20 +413,21 @@ pub trait PrintState<'a>: std::ops::Deref<Target = pp::Printer> + std::ops::Dere
kind: ast::AttrStyle, kind: ast::AttrStyle,
is_inline: bool, is_inline: bool,
trailing_hardbreak: bool, trailing_hardbreak: bool,
) { ) -> bool {
let mut count = 0; let mut printed = false;
for attr in attrs { for attr in attrs {
if attr.style == kind { if attr.style == kind {
self.print_attribute_inline(attr, is_inline); self.print_attribute_inline(attr, is_inline);
if is_inline { if is_inline {
self.nbsp(); self.nbsp();
} }
count += 1; printed = true;
} }
} }
if count > 0 && trailing_hardbreak && !is_inline { if printed && trailing_hardbreak && !is_inline {
self.hardbreak_if_not_bol(); self.hardbreak_if_not_bol();
} }
printed
} }
fn print_attribute(&mut self, attr: &ast::Attribute) { fn print_attribute(&mut self, attr: &ast::Attribute) {
@ -1646,7 +1647,7 @@ impl<'a> State<'a> {
self.ann.pre(self, AnnNode::Block(blk)); self.ann.pre(self, AnnNode::Block(blk));
self.bopen(); self.bopen();
self.print_inner_attributes(attrs); let has_attrs = self.print_inner_attributes(attrs);
for (i, st) in blk.stmts.iter().enumerate() { for (i, st) in blk.stmts.iter().enumerate() {
match st.kind { match st.kind {
@ -1660,7 +1661,7 @@ impl<'a> State<'a> {
} }
} }
let empty = attrs.is_empty() && blk.stmts.is_empty(); let empty = !has_attrs && blk.stmts.is_empty();
self.bclose_maybe_open(blk.span, empty, close_box); self.bclose_maybe_open(blk.span, empty, close_box);
self.ann.post(self, AnnNode::Block(blk)) self.ann.post(self, AnnNode::Block(blk))
} }

View File

@ -9,8 +9,8 @@
fn main() { fn main() {
#![rustc_dummy] #![rustc_dummy]
#[rustc_dummy] #[rustc_dummy]
fn f() { } fn f() {}
#[rustc_dummy] #[rustc_dummy]
fn g() { } fn g() {}
} }

View File

@ -7,8 +7,8 @@
fn main() { fn main() {
#![rustc_dummy("hi", 1, 2, 1.012, pi = 3.14, bye, name("John"))] #![rustc_dummy("hi", 1, 2, 1.012, pi = 3.14, bye, name("John"))]
#[rustc_dummy = 8] #[rustc_dummy = 8]
fn f() { } fn f() {}
#[rustc_dummy(1, 2, 3)] #[rustc_dummy(1, 2, 3)]
fn g() { } fn g() {}
} }

View File

@ -4,4 +4,4 @@
// pp-exact // pp-exact
#[rustfmt::r#final(final)] #[rustfmt::r#final(final)]
fn main() { } fn main() {}

View File

@ -45,4 +45,4 @@ mac! {
}] }]
#[rustc_dummy = #[rustc_dummy =
"aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa"] "aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa"]
fn main() { } fn main() {}

View File

@ -5,7 +5,7 @@
// some single-line non-doc comment // some single-line non-doc comment
/// some single line outer-docs /// some single line outer-docs
fn a() { } fn a() {}
fn b() { fn b() {
//! some single line inner-docs //! some single line inner-docs
@ -17,7 +17,7 @@ fn b() {
////////////////////////////////// //////////////////////////////////
/// some single-line outer-docs preceded by a separator /// some single-line outer-docs preceded by a separator
/// (and trailing whitespaces) /// (and trailing whitespaces)
fn c() { } fn c() {}
/* /*
* some multi-line non-doc comment * some multi-line non-doc comment
@ -26,7 +26,7 @@ fn c() { }
/** /**
* some multi-line outer-docs * some multi-line outer-docs
*/ */
fn d() { } fn d() {}
fn e() { fn e() {
/*! /*!
@ -43,10 +43,10 @@ fn e() {
/** /**
* some multi-line outer-docs preceded by a separator * some multi-line outer-docs preceded by a separator
*/ */
fn f() { } fn f() {}
#[doc = "unsugared outer doc-comments work also"] #[doc = "unsugared outer doc-comments work also"]
fn g() { } fn g() {}
fn h() { fn h() {
#![doc = "as do inner ones"] #![doc = "as do inner ones"]

View File

@ -235,7 +235,7 @@ fn test_expr() {
#[attr] #[attr]
{} {}
), ),
"#[attr] { }", // FIXME "#[attr] {}",
); );
assert_eq!( assert_eq!(
stringify_expr!( stringify_expr!(