@@ -156,13 +156,13 @@ pub(crate) fn rewrite_macro(
156156 context : & RewriteContext < ' _ > ,
157157 shape : Shape ,
158158 position : MacroPosition ,
159- ) -> Option < String > {
159+ ) -> ( Option < String > , Option < Delimiter > ) {
160160 let should_skip = context
161161 . skip_context
162162 . macros
163163 . skip ( context. snippet ( mac. path . span ) ) ;
164164 if should_skip {
165- None
165+ ( None , None )
166166 } else {
167167 let guard = context. enter_macro ( ) ;
168168 let result = catch_unwind ( AssertUnwindSafe ( || {
@@ -176,27 +176,29 @@ pub(crate) fn rewrite_macro(
176176 )
177177 } ) ) ;
178178 match result {
179- Err ( ..) | Ok ( None ) => {
179+ Err ( ..) | Ok ( ( None , .. ) ) => {
180180 context. macro_rewrite_failure . replace ( true ) ;
181- None
181+ ( None , None )
182182 }
183183 Ok ( rw) => rw,
184184 }
185185 }
186186}
187187
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
188190fn rewrite_macro_inner (
189191 mac : & ast:: MacCall ,
190192 extra_ident : Option < symbol:: Ident > ,
191193 context : & RewriteContext < ' _ > ,
192194 shape : Shape ,
193195 position : MacroPosition ,
194196 is_nested_macro : bool ,
195- ) -> Option < String > {
197+ ) -> ( Option < String > , Option < Delimiter > ) {
196198 if context. config . use_try_shorthand ( ) {
197199 if let Some ( expr) = convert_try_mac ( mac, context) {
198200 context. leave_macro ( ) ;
199- return expr. rewrite ( context, shape) ;
201+ return ( expr. rewrite ( context, shape) , None ) ;
200202 }
201203 }
202204
@@ -214,7 +216,7 @@ fn rewrite_macro_inner(
214216 let ts = mac. args . tokens . clone ( ) ;
215217 let has_comment = contains_comment ( context. snippet ( mac. span ( ) ) ) ;
216218 if ts. is_empty ( ) && !has_comment {
217- return match style {
219+ let rewrite = match style {
218220 Delimiter :: Parenthesis if position == MacroPosition :: Item => {
219221 Some ( format ! ( "{macro_name}();" ) )
220222 }
@@ -226,11 +228,12 @@ fn rewrite_macro_inner(
226228 Delimiter :: Brace => Some ( format ! ( "{macro_name} {{}}" ) ) ,
227229 _ => unreachable ! ( ) ,
228230 } ;
231+ return ( rewrite, Some ( style) ) ;
229232 }
230233 // Format well-known macros which cannot be parsed as a valid AST.
231234 if macro_name == "lazy_static!" && !has_comment {
232235 if let success @ Some ( ..) = format_lazy_static ( context, shape, ts. clone ( ) ) {
233- return success;
236+ return ( success, Some ( Delimiter :: Brace ) ) ;
234237 }
235238 }
236239
@@ -241,17 +244,14 @@ fn rewrite_macro_inner(
241244 } = match parse_macro_args ( context, ts, style, is_forced_bracket) {
242245 Some ( args) => args,
243246 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 ) ;
250250 }
251251 } ;
252252
253253 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 (
255255 context,
256256 & arg_vec,
257257 & macro_name,
@@ -261,9 +261,10 @@ fn rewrite_macro_inner(
261261 position,
262262 mac. span ( ) ,
263263 ) ;
264+ return ( rewrite, Some ( style) ) ;
264265 }
265266
266- match style {
267+ let rewrite = match style {
267268 Delimiter :: Parenthesis => {
268269 // Handle special case: `vec!(expr; expr)`
269270 if vec_with_semi {
@@ -309,20 +310,22 @@ fn rewrite_macro_inner(
309310 force_trailing_comma = Some ( SeparatorTactic :: Vertical ) ;
310311 } ;
311312 }
312- let rewrite = rewrite_array (
313+ let Some ( rewrite) = rewrite_array (
313314 & macro_name,
314315 arg_vec. iter ( ) ,
315316 mac. span ( ) ,
316317 context,
317318 shape,
318319 force_trailing_comma,
319320 Some ( original_style) ,
320- ) ?;
321+ ) else {
322+ return ( None , None ) ;
323+ } ;
324+
321325 let comma = match position {
322326 MacroPosition :: Item => ";" ,
323327 _ => "" ,
324328 } ;
325-
326329 Some ( format ! ( "{rewrite}{comma}" ) )
327330 }
328331 }
@@ -337,7 +340,8 @@ fn rewrite_macro_inner(
337340 }
338341 }
339342 _ => unreachable ! ( ) ,
340- }
343+ } ;
344+ return ( rewrite, Some ( style) ) ;
341345}
342346
343347fn handle_vec_semi (
0 commit comments