@@ -311,34 +311,35 @@ fn include_references(initial_element: &ast::Expr) -> (ast::Expr, String) {
311
311
312
312
let mut prefix = String :: new ( ) ;
313
313
314
+ let mut found_ref_or_deref = false ;
315
+
314
316
while let Some ( parent_deref_element) =
315
317
resulting_element. syntax ( ) . parent ( ) . and_then ( ast:: PrefixExpr :: cast)
316
318
{
317
319
if parent_deref_element. op_kind ( ) != Some ( ast:: UnaryOp :: Deref ) {
318
320
break ;
319
321
}
320
322
323
+ found_ref_or_deref = true ;
321
324
resulting_element = ast:: Expr :: from ( parent_deref_element) ;
322
325
323
326
prefix. insert ( 0 , '*' ) ;
324
327
}
325
328
326
- if let Some ( first_ref_expr) = resulting_element. syntax ( ) . parent ( ) . and_then ( ast:: RefExpr :: cast) {
327
- if let Some ( expr) = first_ref_expr. expr ( ) {
328
- resulting_element = expr;
329
- }
329
+ while let Some ( parent_ref_element) =
330
+ resulting_element. syntax ( ) . parent ( ) . and_then ( ast:: RefExpr :: cast)
331
+ {
332
+ found_ref_or_deref = true ;
333
+ let exclusive = parent_ref_element. mut_token ( ) . is_some ( ) ;
334
+ resulting_element = ast:: Expr :: from ( parent_ref_element) ;
330
335
331
- while let Some ( parent_ref_element) =
332
- resulting_element. syntax ( ) . parent ( ) . and_then ( ast:: RefExpr :: cast)
333
- {
334
- let exclusive = parent_ref_element. mut_token ( ) . is_some ( ) ;
335
- resulting_element = ast:: Expr :: from ( parent_ref_element) ;
336
+ prefix. insert_str ( 0 , if exclusive { "&mut " } else { "&" } ) ;
337
+ }
336
338
337
- prefix. insert_str ( 0 , if exclusive { "&mut " } else { "&" } ) ;
338
- }
339
- } else {
340
- // If we do not find any ref expressions, restore
339
+ if !found_ref_or_deref {
340
+ // If we do not find any ref/deref expressions, restore
341
341
// all the progress of tree climbing
342
+ prefix. clear ( ) ;
342
343
resulting_element = initial_element. clone ( ) ;
343
344
}
344
345
0 commit comments