@@ -155,13 +155,13 @@ pub(crate) fn rewrite_macro(
155155 context : & RewriteContext < ' _ > ,
156156 shape : Shape ,
157157 position : MacroPosition ,
158- ) -> Option < String > {
158+ ) -> ( Option < String > , Option < Delimiter > ) {
159159 let should_skip = context
160160 . skip_context
161161 . macros
162162 . skip ( context. snippet ( mac. path . span ) ) ;
163163 if should_skip {
164- None
164+ ( None , None )
165165 } else {
166166 let guard = context. enter_macro ( ) ;
167167 let result = catch_unwind ( AssertUnwindSafe ( || {
@@ -175,27 +175,29 @@ pub(crate) fn rewrite_macro(
175175 )
176176 } ) ) ;
177177 match result {
178- Err ( ..) | Ok ( None ) => {
178+ Err ( ..) | Ok ( ( None , .. ) ) => {
179179 context. macro_rewrite_failure . replace ( true ) ;
180- None
180+ ( None , None )
181181 }
182182 Ok ( rw) => rw,
183183 }
184184 }
185185}
186186
187+ //We return not only string but also new delimiter if it changes
188+ //It needs to remove semicolon if delimiter changes in some situations
187189fn rewrite_macro_inner (
188190 mac : & ast:: MacCall ,
189191 extra_ident : Option < symbol:: Ident > ,
190192 context : & RewriteContext < ' _ > ,
191193 shape : Shape ,
192194 position : MacroPosition ,
193195 is_nested_macro : bool ,
194- ) -> Option < String > {
196+ ) -> ( Option < String > , Option < Delimiter > ) {
195197 if context. config . use_try_shorthand ( ) {
196198 if let Some ( expr) = convert_try_mac ( mac, context) {
197199 context. leave_macro ( ) ;
198- return expr. rewrite ( context, shape) ;
200+ return ( expr. rewrite ( context, shape) , None ) ;
199201 }
200202 }
201203
@@ -213,7 +215,7 @@ fn rewrite_macro_inner(
213215 let ts = mac. args . tokens . clone ( ) ;
214216 let has_comment = contains_comment ( context. snippet ( mac. span ( ) ) ) ;
215217 if ts. is_empty ( ) && !has_comment {
216- return match style {
218+ let rewrite = match style {
217219 Delimiter :: Parenthesis if position == MacroPosition :: Item => {
218220 Some ( format ! ( "{macro_name}();" ) )
219221 }
@@ -225,11 +227,12 @@ fn rewrite_macro_inner(
225227 Delimiter :: Brace => Some ( format ! ( "{macro_name} {{}}" ) ) ,
226228 _ => unreachable ! ( ) ,
227229 } ;
230+ return ( rewrite, Some ( style) ) ;
228231 }
229232 // Format well-known macros which cannot be parsed as a valid AST.
230233 if macro_name == "lazy_static!" && !has_comment {
231234 if let success @ Some ( ..) = format_lazy_static ( context, shape, ts. clone ( ) ) {
232- return success;
235+ return ( success, Some ( Delimiter :: Brace ) ) ;
233236 }
234237 }
235238
@@ -240,17 +243,14 @@ fn rewrite_macro_inner(
240243 } = match parse_macro_args ( context, ts, style, is_forced_bracket) {
241244 Some ( args) => args,
242245 None => {
243- return return_macro_parse_failure_fallback (
244- context,
245- shape. indent ,
246- position,
247- mac. span ( ) ,
248- ) ;
246+ let rewrite =
247+ return_macro_parse_failure_fallback ( context, shape. indent , position, mac. span ( ) ) ;
248+ return ( rewrite, None ) ;
249249 }
250250 } ;
251251
252252 if !arg_vec. is_empty ( ) && arg_vec. iter ( ) . all ( MacroArg :: is_item) {
253- return rewrite_macro_with_items (
253+ let rewrite = rewrite_macro_with_items (
254254 context,
255255 & arg_vec,
256256 & macro_name,
@@ -260,9 +260,10 @@ fn rewrite_macro_inner(
260260 position,
261261 mac. span ( ) ,
262262 ) ;
263+ return ( rewrite, Some ( style) ) ;
263264 }
264265
265- match style {
266+ let rewrite = match style {
266267 Delimiter :: Parenthesis => {
267268 // Handle special case: `vec!(expr; expr)`
268269 if vec_with_semi {
@@ -308,20 +309,22 @@ fn rewrite_macro_inner(
308309 force_trailing_comma = Some ( SeparatorTactic :: Vertical ) ;
309310 } ;
310311 }
311- let rewrite = rewrite_array (
312+ let Some ( rewrite) = rewrite_array (
312313 & macro_name,
313314 arg_vec. iter ( ) ,
314315 mac. span ( ) ,
315316 context,
316317 shape,
317318 force_trailing_comma,
318319 Some ( original_style) ,
319- ) ?;
320+ ) else {
321+ return ( None , None ) ;
322+ } ;
323+
320324 let comma = match position {
321325 MacroPosition :: Item => ";" ,
322326 _ => "" ,
323327 } ;
324-
325328 Some ( format ! ( "{rewrite}{comma}" ) )
326329 }
327330 }
@@ -336,7 +339,8 @@ fn rewrite_macro_inner(
336339 }
337340 }
338341 _ => unreachable ! ( ) ,
339- }
342+ } ;
343+ return ( rewrite, Some ( style) ) ;
340344}
341345
342346fn handle_vec_semi (
0 commit comments