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) {
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;
@@ -872,6 +884,25 @@ fn main() {
872884 let mut x = &mut 2;
873885 ${1}(&mut x);
874886}
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+ }
875906"# ,
876907 ) ;
877908 }
You can’t perform that action at this time.
0 commit comments