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