aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api_light/src/assists/introduce_variable.rs
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2019-01-16 06:20:09 +0000
committerbors[bot] <bors[bot]@users.noreply.github.com>2019-01-16 06:20:09 +0000
commitd75a0368f5048243d6561e42e77835f6f574b321 (patch)
tree17ffe16abbf568232e50696d8dcfbd798eef7009 /crates/ra_ide_api_light/src/assists/introduce_variable.rs
parent68d320a680b5df802b2c3e7dad5d890e3309ed60 (diff)
parent67ddd3359817f0a1254005e4c2dc921eed5e7ad9 (diff)
Merge #536
536: Introduce variable semicolon block expr r=matklad a=yerke Fix for https://github.com/rust-analyzer/rust-analyzer/issues/504 Feels a bit hacky... Co-authored-by: Yerkebulan Tulibergenov <[email protected]>
Diffstat (limited to 'crates/ra_ide_api_light/src/assists/introduce_variable.rs')
-rw-r--r--crates/ra_ide_api_light/src/assists/introduce_variable.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/crates/ra_ide_api_light/src/assists/introduce_variable.rs b/crates/ra_ide_api_light/src/assists/introduce_variable.rs
index 523ec7034..3e4434c23 100644
--- a/crates/ra_ide_api_light/src/assists/introduce_variable.rs
+++ b/crates/ra_ide_api_light/src/assists/introduce_variable.rs
@@ -20,12 +20,16 @@ pub fn introduce_variable<'a>(ctx: AssistCtx) -> Option<Assist> {
20 20
21 buf.push_str("let var_name = "); 21 buf.push_str("let var_name = ");
22 expr.syntax().text().push_to(&mut buf); 22 expr.syntax().text().push_to(&mut buf);
23 let is_full_stmt = if let Some(expr_stmt) = ast::ExprStmt::cast(anchor_stmt) { 23 let full_stmt = ast::ExprStmt::cast(anchor_stmt);
24 let is_full_stmt = if let Some(expr_stmt) = full_stmt {
24 Some(expr.syntax()) == expr_stmt.expr().map(|e| e.syntax()) 25 Some(expr.syntax()) == expr_stmt.expr().map(|e| e.syntax())
25 } else { 26 } else {
26 false 27 false
27 }; 28 };
28 if is_full_stmt { 29 if is_full_stmt {
30 if !full_stmt.unwrap().has_semi() {
31 buf.push_str(";");
32 }
29 edit.replace(expr.syntax().range(), buf); 33 edit.replace(expr.syntax().range(), buf);
30 } else { 34 } else {
31 buf.push_str(";"); 35 buf.push_str(";");
@@ -141,4 +145,20 @@ fn foo() {
141 ); 145 );
142 } 146 }
143 147
148 #[test]
149 fn test_introduce_var_block_expr_second_to_last() {
150 check_assist_range(
151 introduce_variable,
152 "
153fn foo() {
154 <|>{ let x = 0; x }<|>
155 something_else();
156}",
157 "
158fn foo() {
159 let <|>var_name = { let x = 0; x };
160 something_else();
161}",
162 );
163 }
144} 164}