aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/assists/add_impl.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_assists/src/assists/add_impl.rs')
-rw-r--r--crates/ra_assists/src/assists/add_impl.rs31
1 files changed, 23 insertions, 8 deletions
diff --git a/crates/ra_assists/src/assists/add_impl.rs b/crates/ra_assists/src/assists/add_impl.rs
index 94801fbc9..7da0cfd0d 100644
--- a/crates/ra_assists/src/assists/add_impl.rs
+++ b/crates/ra_assists/src/assists/add_impl.rs
@@ -1,5 +1,3 @@
1//! FIXME: write short doc here
2
3use format_buf::format; 1use format_buf::format;
4use hir::db::HirDatabase; 2use hir::db::HirDatabase;
5use join_to_string::join; 3use join_to_string::join;
@@ -10,10 +8,29 @@ use ra_syntax::{
10 8
11use crate::{Assist, AssistCtx, AssistId}; 9use crate::{Assist, AssistCtx, AssistId};
12 10
13pub(crate) fn add_impl(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { 11// Assist: add_impl
14 let nominal = ctx.node_at_offset::<ast::NominalDef>()?; 12//
13// Adds a new inherent impl for a type.
14//
15// ```
16// struct Ctx<T: Clone> {
17// data: T,<|>
18// }
19// ```
20// ->
21// ```
22// struct Ctx<T: Clone> {
23// data: T,
24// }
25//
26// impl<T: Clone> Ctx<T> {
27//
28// }
29// ```
30pub(crate) fn add_impl(ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
31 let nominal = ctx.find_node_at_offset::<ast::NominalDef>()?;
15 let name = nominal.name()?; 32 let name = nominal.name()?;
16 ctx.add_action(AssistId("add_impl"), "add impl", |edit| { 33 ctx.add_assist(AssistId("add_impl"), "add impl", |edit| {
17 edit.target(nominal.syntax().text_range()); 34 edit.target(nominal.syntax().text_range());
18 let type_params = nominal.type_param_list(); 35 let type_params = nominal.type_param_list();
19 let start_offset = nominal.syntax().text_range().end(); 36 let start_offset = nominal.syntax().text_range().end();
@@ -37,9 +54,7 @@ pub(crate) fn add_impl(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
37 edit.set_cursor(start_offset + TextUnit::of_str(&buf)); 54 edit.set_cursor(start_offset + TextUnit::of_str(&buf));
38 buf.push_str("\n}"); 55 buf.push_str("\n}");
39 edit.insert(start_offset, buf); 56 edit.insert(start_offset, buf);
40 }); 57 })
41
42 ctx.build()
43} 58}
44 59
45#[cfg(test)] 60#[cfg(test)]