File tree Expand file tree Collapse file tree 1 file changed +31
-0
lines changed
src/tools/rust-analyzer/crates/ide-completion/src/completions Expand file tree Collapse file tree 1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change @@ -294,6 +294,18 @@ fn include_references(initial_element: &ast::Expr) -> (ast::Expr, ast::Expr) {
294
294
295
295
let mut new_element_opt = initial_element. clone ( ) ;
296
296
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
+
297
309
if let Some ( first_ref_expr) = resulting_element. syntax ( ) . parent ( ) . and_then ( ast:: RefExpr :: cast) {
298
310
if let Some ( expr) = first_ref_expr. expr ( ) {
299
311
resulting_element = expr;
@@ -872,6 +884,25 @@ fn main() {
872
884
let mut x = &mut 2;
873
885
${1}(&mut x);
874
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
+ }
875
906
"# ,
876
907
) ;
877
908
}
You can’t perform that action at this time.
0 commit comments