mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Merge pull request #19764 from ChayimFriedman2/too-many-asterisks-dbg
fix: Fix postfix snippets duplicating derefs
This commit is contained in:
commit
46a31febda
@ -311,6 +311,8 @@ fn include_references(initial_element: &ast::Expr) -> (ast::Expr, String) {
|
|||||||
|
|
||||||
let mut prefix = String::new();
|
let mut prefix = String::new();
|
||||||
|
|
||||||
|
let mut found_ref_or_deref = false;
|
||||||
|
|
||||||
while let Some(parent_deref_element) =
|
while let Some(parent_deref_element) =
|
||||||
resulting_element.syntax().parent().and_then(ast::PrefixExpr::cast)
|
resulting_element.syntax().parent().and_then(ast::PrefixExpr::cast)
|
||||||
{
|
{
|
||||||
@ -318,27 +320,26 @@ fn include_references(initial_element: &ast::Expr) -> (ast::Expr, String) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
found_ref_or_deref = true;
|
||||||
resulting_element = ast::Expr::from(parent_deref_element);
|
resulting_element = ast::Expr::from(parent_deref_element);
|
||||||
|
|
||||||
prefix.insert(0, '*');
|
prefix.insert(0, '*');
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(first_ref_expr) = resulting_element.syntax().parent().and_then(ast::RefExpr::cast) {
|
while let Some(parent_ref_element) =
|
||||||
if let Some(expr) = first_ref_expr.expr() {
|
resulting_element.syntax().parent().and_then(ast::RefExpr::cast)
|
||||||
resulting_element = expr;
|
{
|
||||||
}
|
found_ref_or_deref = true;
|
||||||
|
let exclusive = parent_ref_element.mut_token().is_some();
|
||||||
|
resulting_element = ast::Expr::from(parent_ref_element);
|
||||||
|
|
||||||
while let Some(parent_ref_element) =
|
prefix.insert_str(0, if exclusive { "&mut " } else { "&" });
|
||||||
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);
|
|
||||||
|
|
||||||
prefix.insert_str(0, if exclusive { "&mut " } else { "&" });
|
if !found_ref_or_deref {
|
||||||
}
|
// If we do not find any ref/deref expressions, restore
|
||||||
} else {
|
|
||||||
// If we do not find any ref expressions, restore
|
|
||||||
// all the progress of tree climbing
|
// all the progress of tree climbing
|
||||||
|
prefix.clear();
|
||||||
resulting_element = initial_element.clone();
|
resulting_element = initial_element.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2174,3 +2174,22 @@ fn bar() {
|
|||||||
"#,
|
"#,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn dbg_too_many_asterisks() {
|
||||||
|
check_edit(
|
||||||
|
"dbg",
|
||||||
|
r#"
|
||||||
|
fn main() {
|
||||||
|
let x = &42;
|
||||||
|
let y = *x.$0;
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
fn main() {
|
||||||
|
let x = &42;
|
||||||
|
let y = dbg!(*x);
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user