Unnamed repository; edit this file 'description' to name the repository.
Properly account for mutable references when postfix-completing consuming completions (e.g. `call`)
Chayim Refael Friedman 2024-09-22
parent 6dad8c5 · commit 9274703
-rw-r--r--crates/ide-completion/src/completions/postfix.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/crates/ide-completion/src/completions/postfix.rs b/crates/ide-completion/src/completions/postfix.rs
index a632f14893..2ede799c87 100644
--- a/crates/ide-completion/src/completions/postfix.rs
+++ b/crates/ide-completion/src/completions/postfix.rs
@@ -302,9 +302,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
@@ -855,4 +856,23 @@ 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);
+}
+"#,
+ );
+ }
}