@@ -156,13 +156,13 @@ pub(crate) fn rewrite_macro(
156
156
context : & RewriteContext < ' _ > ,
157
157
shape : Shape ,
158
158
position : MacroPosition ,
159
- ) -> Option < String > {
159
+ ) -> ( Option < String > , Option < Delimiter > ) {
160
160
let should_skip = context
161
161
. skip_context
162
162
. macros
163
163
. skip ( context. snippet ( mac. path . span ) ) ;
164
164
if should_skip {
165
- None
165
+ ( None , None )
166
166
} else {
167
167
let guard = context. enter_macro ( ) ;
168
168
let result = catch_unwind ( AssertUnwindSafe ( || {
@@ -176,27 +176,29 @@ pub(crate) fn rewrite_macro(
176
176
)
177
177
} ) ) ;
178
178
match result {
179
- Err ( ..) | Ok ( None ) => {
179
+ Err ( ..) | Ok ( ( None , .. ) ) => {
180
180
context. macro_rewrite_failure . replace ( true ) ;
181
- None
181
+ ( None , None )
182
182
}
183
183
Ok ( rw) => rw,
184
184
}
185
185
}
186
186
}
187
187
188
+ //We return not only string but also new delimiter if it changes
189
+ //It needs to remove semicolon if delimiter changes in some situations
188
190
fn rewrite_macro_inner (
189
191
mac : & ast:: MacCall ,
190
192
extra_ident : Option < symbol:: Ident > ,
191
193
context : & RewriteContext < ' _ > ,
192
194
shape : Shape ,
193
195
position : MacroPosition ,
194
196
is_nested_macro : bool ,
195
- ) -> Option < String > {
197
+ ) -> ( Option < String > , Option < Delimiter > ) {
196
198
if context. config . use_try_shorthand ( ) {
197
199
if let Some ( expr) = convert_try_mac ( mac, context) {
198
200
context. leave_macro ( ) ;
199
- return expr. rewrite ( context, shape) ;
201
+ return ( expr. rewrite ( context, shape) , None ) ;
200
202
}
201
203
}
202
204
@@ -214,7 +216,7 @@ fn rewrite_macro_inner(
214
216
let ts = mac. args . tokens . clone ( ) ;
215
217
let has_comment = contains_comment ( context. snippet ( mac. span ( ) ) ) ;
216
218
if ts. is_empty ( ) && !has_comment {
217
- return match style {
219
+ let rewrite = match style {
218
220
Delimiter :: Parenthesis if position == MacroPosition :: Item => {
219
221
Some ( format ! ( "{macro_name}();" ) )
220
222
}
@@ -226,11 +228,12 @@ fn rewrite_macro_inner(
226
228
Delimiter :: Brace => Some ( format ! ( "{macro_name} {{}}" ) ) ,
227
229
_ => unreachable ! ( ) ,
228
230
} ;
231
+ return ( rewrite, Some ( style) ) ;
229
232
}
230
233
// Format well-known macros which cannot be parsed as a valid AST.
231
234
if macro_name == "lazy_static!" && !has_comment {
232
235
if let success @ Some ( ..) = format_lazy_static ( context, shape, ts. clone ( ) ) {
233
- return success;
236
+ return ( success, Some ( Delimiter :: Brace ) ) ;
234
237
}
235
238
}
236
239
@@ -241,17 +244,14 @@ fn rewrite_macro_inner(
241
244
} = match parse_macro_args ( context, ts, style, is_forced_bracket) {
242
245
Some ( args) => args,
243
246
None => {
244
- return return_macro_parse_failure_fallback (
245
- context,
246
- shape. indent ,
247
- position,
248
- mac. span ( ) ,
249
- ) ;
247
+ let rewrite =
248
+ return_macro_parse_failure_fallback ( context, shape. indent , position, mac. span ( ) ) ;
249
+ return ( rewrite, None ) ;
250
250
}
251
251
} ;
252
252
253
253
if !arg_vec. is_empty ( ) && arg_vec. iter ( ) . all ( MacroArg :: is_item) {
254
- return rewrite_macro_with_items (
254
+ let rewrite = rewrite_macro_with_items (
255
255
context,
256
256
& arg_vec,
257
257
& macro_name,
@@ -261,9 +261,10 @@ fn rewrite_macro_inner(
261
261
position,
262
262
mac. span ( ) ,
263
263
) ;
264
+ return ( rewrite, Some ( style) ) ;
264
265
}
265
266
266
- match style {
267
+ let rewrite = match style {
267
268
Delimiter :: Parenthesis => {
268
269
// Handle special case: `vec!(expr; expr)`
269
270
if vec_with_semi {
@@ -309,20 +310,22 @@ fn rewrite_macro_inner(
309
310
force_trailing_comma = Some ( SeparatorTactic :: Vertical ) ;
310
311
} ;
311
312
}
312
- let rewrite = rewrite_array (
313
+ let Some ( rewrite) = rewrite_array (
313
314
& macro_name,
314
315
arg_vec. iter ( ) ,
315
316
mac. span ( ) ,
316
317
context,
317
318
shape,
318
319
force_trailing_comma,
319
320
Some ( original_style) ,
320
- ) ?;
321
+ ) else {
322
+ return ( None , None ) ;
323
+ } ;
324
+
321
325
let comma = match position {
322
326
MacroPosition :: Item => ";" ,
323
327
_ => "" ,
324
328
} ;
325
-
326
329
Some ( format ! ( "{rewrite}{comma}" ) )
327
330
}
328
331
}
@@ -337,7 +340,8 @@ fn rewrite_macro_inner(
337
340
}
338
341
}
339
342
_ => unreachable ! ( ) ,
340
- }
343
+ } ;
344
+ return ( rewrite, Some ( style) ) ;
341
345
}
342
346
343
347
fn handle_vec_semi (
0 commit comments