mirror of
				https://github.com/rust-lang/rust-analyzer.git
				synced 2025-10-31 03:54:42 +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
					
				
					 2 changed files with 33 additions and 13 deletions
				
			
		|  | @ -311,6 +311,8 @@ fn include_references(initial_element: &ast::Expr) -> (ast::Expr, String) { | |||
| 
 | ||||
|     let mut prefix = String::new(); | ||||
| 
 | ||||
|     let mut found_ref_or_deref = false; | ||||
| 
 | ||||
|     while let Some(parent_deref_element) = | ||||
|         resulting_element.syntax().parent().and_then(ast::PrefixExpr::cast) | ||||
|     { | ||||
|  | @ -318,27 +320,26 @@ fn include_references(initial_element: &ast::Expr) -> (ast::Expr, String) { | |||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         found_ref_or_deref = true; | ||||
|         resulting_element = ast::Expr::from(parent_deref_element); | ||||
| 
 | ||||
|         prefix.insert(0, '*'); | ||||
|     } | ||||
| 
 | ||||
|     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; | ||||
|         } | ||||
| 
 | ||||
|     while let Some(parent_ref_element) = | ||||
|         resulting_element.syntax().parent().and_then(ast::RefExpr::cast) | ||||
|     { | ||||
|         found_ref_or_deref = true; | ||||
|         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 { "&" }); | ||||
|     } | ||||
|     } else { | ||||
|         // If we do not find any ref expressions, restore
 | ||||
| 
 | ||||
|     if !found_ref_or_deref { | ||||
|         // If we do not find any ref/deref expressions, restore
 | ||||
|         // all the progress of tree climbing
 | ||||
|         prefix.clear(); | ||||
|         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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Chayim Refael Friedman
						Chayim Refael Friedman