Skip to content

Commit

Permalink
Auto merge of #18161 - ChayimFriedman2:postfix-mut, r=Veykril
Browse files Browse the repository at this point in the history
fix: Better support references in consuming postfix completions

Fixes #18155.
  • Loading branch information
bors committed Sep 24, 2024
2 parents a8eaa9e + ded3a5c commit a5f028b
Showing 1 changed file with 52 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,18 @@ fn include_references(initial_element: &ast::Expr) -> (ast::Expr, ast::Expr) {

let mut new_element_opt = initial_element.clone();

while let Some(parent_deref_element) =
resulting_element.syntax().parent().and_then(ast::PrefixExpr::cast)
{
if parent_deref_element.op_kind() != Some(ast::UnaryOp::Deref) {
break;
}

resulting_element = ast::Expr::from(parent_deref_element);

new_element_opt = make::expr_prefix(syntax::T![*], new_element_opt);
}

if let Some(first_ref_expr) = resulting_element.syntax().parent().and_then(ast::RefExpr::cast) {
if let Some(expr) = first_ref_expr.expr() {
resulting_element = expr;
Expand All @@ -302,9 +314,10 @@ fn include_references(initial_element: &ast::Expr) -> (ast::Expr, ast::Expr) {
while let Some(parent_ref_element) =
resulting_element.syntax().parent().and_then(ast::RefExpr::cast)
{
let exclusive = parent_ref_element.mut_token().is_some();
resulting_element = ast::Expr::from(parent_ref_element);

new_element_opt = make::expr_ref(new_element_opt, false);
new_element_opt = make::expr_ref(new_element_opt, exclusive);
}
} else {
// If we do not find any ref expressions, restore
Expand Down Expand Up @@ -855,4 +868,42 @@ fn test() {
expect![[r#""#]],
);
}

#[test]
fn mut_ref_consuming() {
check_edit(
"call",
r#"
fn main() {
let mut x = &mut 2;
&mut x.$0;
}
"#,
r#"
fn main() {
let mut x = &mut 2;
${1}(&mut x);
}
"#,
);
}

#[test]
fn deref_consuming() {
check_edit(
"call",
r#"
fn main() {
let mut x = &mut 2;
&mut *x.$0;
}
"#,
r#"
fn main() {
let mut x = &mut 2;
${1}(&mut *x);
}
"#,
);
}
}

0 comments on commit a5f028b

Please sign in to comment.