Skip to content

Commit ded3a5c

Browse files
Include dereferences in consuming postfix completions (e.g. call)
1 parent 2818d1e commit ded3a5c

File tree

1 file changed

+31
-0
lines changed
  • src/tools/rust-analyzer/crates/ide-completion/src/completions

1 file changed

+31
-0
lines changed

src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix.rs

+31
Original file line numberDiff line numberDiff 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
}

0 commit comments

Comments
 (0)