aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/handlers/add_function.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-05-06 12:08:37 +0100
committerAleksey Kladov <[email protected]>2020-05-06 12:21:49 +0100
commit1116c9a0e9992d0dea8dac87de95c8a74c093cff (patch)
treefe1fb40500ea87a6e92351800884248ed6fe81e5 /crates/ra_assists/src/handlers/add_function.rs
parent4de3c3eedc1f6576d59e00f0ddde3c70c97be066 (diff)
Fix TODO
Diffstat (limited to 'crates/ra_assists/src/handlers/add_function.rs')
-rw-r--r--crates/ra_assists/src/handlers/add_function.rs24
1 files changed, 9 insertions, 15 deletions
diff --git a/crates/ra_assists/src/handlers/add_function.rs b/crates/ra_assists/src/handlers/add_function.rs
index 76c0f9783..1d9d4e638 100644
--- a/crates/ra_assists/src/handlers/add_function.rs
+++ b/crates/ra_assists/src/handlers/add_function.rs
@@ -58,13 +58,11 @@ pub(crate) fn add_function(ctx: AssistCtx) -> Option<Assist> {
58 let function_builder = FunctionBuilder::from_call(&ctx, &call, &path, target_module)?; 58 let function_builder = FunctionBuilder::from_call(&ctx, &call, &path, target_module)?;
59 59
60 let target = call.syntax().text_range(); 60 let target = call.syntax().text_range();
61 // TODO: assert here?
62 ctx.add_assist(AssistId("add_function"), "Add function", target, |edit| { 61 ctx.add_assist(AssistId("add_function"), "Add function", target, |edit| {
63 if let Some(function_template) = function_builder.render() { 62 let function_template = function_builder.render();
64 edit.set_file(function_template.file); 63 edit.set_file(function_template.file);
65 edit.set_cursor(function_template.cursor_offset); 64 edit.set_cursor(function_template.cursor_offset);
66 edit.insert(function_template.insert_offset, function_template.fn_def.to_string()); 65 edit.insert(function_template.insert_offset, function_template.fn_def.to_string());
67 }
68 }) 66 })
69} 67}
70 68
@@ -107,7 +105,7 @@ impl FunctionBuilder {
107 Some(Self { target, fn_name, type_params, params, file, needs_pub }) 105 Some(Self { target, fn_name, type_params, params, file, needs_pub })
108 } 106 }
109 107
110 fn render(self) -> Option<FunctionTemplate> { 108 fn render(self) -> FunctionTemplate {
111 let placeholder_expr = ast::make::expr_todo(); 109 let placeholder_expr = ast::make::expr_todo();
112 let fn_body = ast::make::block_expr(vec![], Some(placeholder_expr)); 110 let fn_body = ast::make::block_expr(vec![], Some(placeholder_expr));
113 let mut fn_def = ast::make::fn_def(self.fn_name, self.type_params, self.params, fn_body); 111 let mut fn_def = ast::make::fn_def(self.fn_name, self.type_params, self.params, fn_body);
@@ -133,15 +131,11 @@ impl FunctionBuilder {
133 } 131 }
134 }; 132 };
135 133
136 let cursor_offset_from_fn_start = fn_def 134 let placeholder_expr =
137 .syntax() 135 fn_def.syntax().descendants().find_map(ast::MacroCall::cast).unwrap();
138 .descendants() 136 let cursor_offset_from_fn_start = placeholder_expr.syntax().text_range().start();
139 .find_map(ast::MacroCall::cast)?
140 .syntax()
141 .text_range()
142 .start();
143 let cursor_offset = insert_offset + cursor_offset_from_fn_start; 137 let cursor_offset = insert_offset + cursor_offset_from_fn_start;
144 Some(FunctionTemplate { insert_offset, cursor_offset, fn_def, file: self.file }) 138 FunctionTemplate { insert_offset, cursor_offset, fn_def, file: self.file }
145 } 139 }
146} 140}
147 141