@@ -15,12 +15,12 @@ use config::lists::*;
15
15
use config:: IndentStyle ;
16
16
use expr:: rewrite_literal;
17
17
use lists:: { definitive_tactic, itemize_list, write_list, ListFormatting , Separator } ;
18
+ use overflow;
18
19
use rewrite:: { Rewrite , RewriteContext } ;
19
20
use shape:: Shape ;
20
21
use types:: { rewrite_path, PathContext } ;
21
22
use utils:: { count_newlines, mk_sp} ;
22
23
23
- use std:: borrow:: Cow ;
24
24
use syntax:: ast;
25
25
use syntax:: source_map:: { BytePos , Span , DUMMY_SP } ;
26
26
@@ -216,56 +216,21 @@ impl Rewrite for ast::MetaItem {
216
216
}
217
217
ast:: MetaItemKind :: List ( ref list) => {
218
218
let path = rewrite_path ( context, PathContext :: Type , None , & self . ident , shape) ?;
219
-
220
- let has_comma = :: expr:: span_ends_with_comma ( context, self . span ) ;
221
- let trailing_comma = if has_comma { "," } else { "" } ;
222
- let combine = list. len ( ) == 1 && match list[ 0 ] . node {
223
- ast:: NestedMetaItemKind :: Literal ( ..) => false ,
224
- ast:: NestedMetaItemKind :: MetaItem ( ref inner_meta_item) => {
225
- match inner_meta_item. node {
226
- ast:: MetaItemKind :: List ( ..) => rewrite_path (
227
- context,
228
- PathContext :: Type ,
229
- None ,
230
- & inner_meta_item. ident ,
231
- shape,
232
- )
233
- . map_or ( false , |s| s. len ( ) + path. len ( ) + 2 <= shape. width ) ,
234
- _ => false ,
235
- }
236
- }
237
- } ;
238
-
239
- let argument_shape = argument_shape (
240
- path. len ( ) + 1 ,
241
- 2 + trailing_comma. len ( ) ,
242
- combine,
243
- shape,
219
+ let has_trailing_comma = :: expr:: span_ends_with_comma ( context, self . span ) ;
220
+ overflow:: rewrite_with_parens (
244
221
context,
245
- ) ?;
246
- let item_str = format_arg_list (
222
+ & path,
247
223
list. iter ( ) ,
248
- |nested_meta_item| nested_meta_item. span . lo ( ) ,
249
- |nested_meta_item| nested_meta_item. span . hi ( ) ,
250
- |nested_meta_item| nested_meta_item. rewrite ( context, argument_shape) ,
224
+ // 1 = "]"
225
+ shape. sub_width ( 1 ) ?,
251
226
self . span ,
252
- context,
253
- argument_shape,
254
- // 3 = "()" and "]"
255
- shape
256
- . offset_left ( path. len ( ) ) ?
257
- . sub_width ( 3 + trailing_comma. len ( ) ) ?,
258
- Some ( context. config . width_heuristics ( ) . fn_call_width ) ,
259
- combine,
260
- ) ?;
261
-
262
- let indent = if item_str. starts_with ( '\n' ) {
263
- shape. indent . to_string_with_newline ( context. config )
264
- } else {
265
- Cow :: Borrowed ( "" )
266
- } ;
267
-
268
- format ! ( "{}({}{}{})" , path, item_str, trailing_comma, indent)
227
+ context. config . width_heuristics ( ) . fn_call_width ,
228
+ Some ( if has_trailing_comma {
229
+ SeparatorTactic :: Always
230
+ } else {
231
+ SeparatorTactic :: Never
232
+ } ) ,
233
+ ) ?
269
234
}
270
235
ast:: MetaItemKind :: NameValue ( ref literal) => {
271
236
let path = rewrite_path ( context, PathContext :: Type , None , & self . ident , shape) ?;
0 commit comments