|
1 |
| -use crate::pp::Breaks::{Consistent, Inconsistent}; |
2 |
| -use crate::pprust::state::{AnnNode, PrintState, State, INDENT_UNIT}; |
| 1 | +use crate::pp::Breaks::Inconsistent; |
| 2 | +use crate::pprust::state::{AnnNode, IterDelimited, PrintState, State, INDENT_UNIT}; |
3 | 3 |
|
4 | 4 | use rustc_ast::ptr::P;
|
5 | 5 | use rustc_ast::util::parser::{self, AssocOp, Fixity};
|
@@ -117,38 +117,46 @@ impl<'a> State<'a> {
|
117 | 117 | } else {
|
118 | 118 | self.print_path(path, true, 0);
|
119 | 119 | }
|
| 120 | + self.nbsp(); |
120 | 121 | self.word("{");
|
121 |
| - self.commasep_cmnt( |
122 |
| - Consistent, |
123 |
| - fields, |
124 |
| - |s, field| { |
125 |
| - s.print_outer_attributes(&field.attrs); |
126 |
| - s.ibox(INDENT_UNIT); |
127 |
| - if !field.is_shorthand { |
128 |
| - s.print_ident(field.ident); |
129 |
| - s.word_space(":"); |
130 |
| - } |
131 |
| - s.print_expr(&field.expr); |
132 |
| - s.end(); |
133 |
| - }, |
134 |
| - |f| f.span, |
135 |
| - ); |
136 |
| - match rest { |
137 |
| - ast::StructRest::Base(_) | ast::StructRest::Rest(_) => { |
138 |
| - self.ibox(INDENT_UNIT); |
139 |
| - if !fields.is_empty() { |
140 |
| - self.word(","); |
141 |
| - self.space(); |
142 |
| - } |
143 |
| - self.word(".."); |
144 |
| - if let ast::StructRest::Base(ref expr) = *rest { |
145 |
| - self.print_expr(expr); |
146 |
| - } |
147 |
| - self.end(); |
| 122 | + let has_rest = match rest { |
| 123 | + ast::StructRest::Base(_) | ast::StructRest::Rest(_) => true, |
| 124 | + ast::StructRest::None => false, |
| 125 | + }; |
| 126 | + if fields.is_empty() && !has_rest { |
| 127 | + self.word("}"); |
| 128 | + return; |
| 129 | + } |
| 130 | + self.cbox(0); |
| 131 | + for field in fields.iter().delimited() { |
| 132 | + self.maybe_print_comment(field.span.hi()); |
| 133 | + self.print_outer_attributes(&field.attrs); |
| 134 | + if field.is_first { |
| 135 | + self.space_if_not_bol(); |
| 136 | + } |
| 137 | + if !field.is_shorthand { |
| 138 | + self.print_ident(field.ident); |
| 139 | + self.word_nbsp(":"); |
| 140 | + } |
| 141 | + self.print_expr(&field.expr); |
| 142 | + if !field.is_last || has_rest { |
| 143 | + self.word_space(","); |
| 144 | + } else { |
| 145 | + self.trailing_comma(); |
148 | 146 | }
|
149 |
| - ast::StructRest::None if !fields.is_empty() => self.word(","), |
150 |
| - _ => {} |
151 | 147 | }
|
| 148 | + if has_rest { |
| 149 | + if fields.is_empty() { |
| 150 | + self.space(); |
| 151 | + } |
| 152 | + self.word(".."); |
| 153 | + if let ast::StructRest::Base(expr) = rest { |
| 154 | + self.print_expr(expr); |
| 155 | + } |
| 156 | + self.space(); |
| 157 | + } |
| 158 | + self.offset(-INDENT_UNIT); |
| 159 | + self.end(); |
152 | 160 | self.word("}");
|
153 | 161 | }
|
154 | 162 |
|
|
0 commit comments