@@ -294,6 +294,18 @@ fn include_references(initial_element: &ast::Expr) -> (ast::Expr, ast::Expr) {
294294
295295 let mut new_element_opt = initial_element. clone ( ) ;
296296
297+ while let Some ( parent_deref_element) =
298+ resulting_element. syntax ( ) . parent ( ) . and_then ( ast:: PrefixExpr :: cast)
299+ {
300+ if parent_deref_element. op_kind ( ) != Some ( ast:: UnaryOp :: Deref ) {
301+ break ;
302+ }
303+
304+ resulting_element = ast:: Expr :: from ( parent_deref_element) ;
305+
306+ new_element_opt = make:: expr_prefix ( syntax:: T ![ * ] , new_element_opt) ;
307+ }
308+
297309 if let Some ( first_ref_expr) = resulting_element. syntax ( ) . parent ( ) . and_then ( ast:: RefExpr :: cast) {
298310 if let Some ( expr) = first_ref_expr. expr ( ) {
299311 resulting_element = expr;
@@ -302,9 +314,10 @@ fn include_references(initial_element: &ast::Expr) -> (ast::Expr, ast::Expr) {
302314 while let Some ( parent_ref_element) =
303315 resulting_element. syntax ( ) . parent ( ) . and_then ( ast:: RefExpr :: cast)
304316 {
317+ let exclusive = parent_ref_element. mut_token ( ) . is_some ( ) ;
305318 resulting_element = ast:: Expr :: from ( parent_ref_element) ;
306319
307- new_element_opt = make:: expr_ref ( new_element_opt, false ) ;
320+ new_element_opt = make:: expr_ref ( new_element_opt, exclusive ) ;
308321 }
309322 } else {
310323 // If we do not find any ref expressions, restore
@@ -855,4 +868,42 @@ fn test() {
855868 expect ! [ [ r#""# ] ] ,
856869 ) ;
857870 }
871+
872+ #[ test]
873+ fn mut_ref_consuming ( ) {
874+ check_edit (
875+ "call" ,
876+ r#"
877+ fn main() {
878+ let mut x = &mut 2;
879+ &mut x.$0;
880+ }
881+ "# ,
882+ r#"
883+ fn main() {
884+ let mut x = &mut 2;
885+ ${1}(&mut x);
886+ }
887+ "# ,
888+ ) ;
889+ }
890+
891+ #[ test]
892+ fn deref_consuming ( ) {
893+ check_edit (
894+ "call" ,
895+ r#"
896+ fn main() {
897+ let mut x = &mut 2;
898+ &mut *x.$0;
899+ }
900+ "# ,
901+ r#"
902+ fn main() {
903+ let mut x = &mut 2;
904+ ${1}(&mut *x);
905+ }
906+ "# ,
907+ ) ;
908+ }
858909}
0 commit comments