Skip to content

Commit c14a12e

Browse files
committed
create function
1 parent 0ff89de commit c14a12e

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

crates/ide_assists/src/handlers/generate_delegate.rs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use hir::{self, HasCrate, HirDisplay};
22
use stdx::format_to;
3-
use syntax::ast::{self, AstNode, HasName, HasVisibility};
3+
use syntax::ast::{self, make, AstNode, HasName, HasVisibility};
44

55
use crate::{
6-
utils::{find_impl_block_end, find_struct_impl, generate_impl_text},
6+
utils::{find_impl_block_end, find_struct_impl, generate_impl_text, render_snippet, Cursor},
77
AssistContext, AssistId, AssistKind, Assists, GroupLabel,
88
};
99

@@ -78,17 +78,16 @@ pub(crate) fn generate_delegate(acc: &mut Assists, ctx: &AssistContext) -> Optio
7878
}
7979
};
8080

81-
format_to!(
82-
buf,
83-
"{}fn {}(&self) {} {{
84-
self.{}.{}()
85-
}}",
86-
vis,
87-
method.name(ctx.db()),
88-
return_type,
89-
field_name,
90-
method.name(ctx.db())
91-
);
81+
// make function
82+
let vis = strukt.visibility();
83+
let name = make::name(&method.name(ctx.db()).to_string());
84+
let type_params = None;
85+
let params = make::param_list(None, []);
86+
let body = make::block_expr([], None);
87+
let ret_type = &method.ret_type(ctx.db()).display(ctx.db()).to_string();
88+
let ret_type = Some(make::ret_type(make::ty(ret_type)));
89+
let is_async = false;
90+
let f = make::fn_(vis, name, type_params, params, body, ret_type, is_async);
9291

9392
let start_offset = impl_def
9493
.and_then(|impl_def| find_impl_block_end(impl_def, &mut buf))
@@ -97,7 +96,14 @@ pub(crate) fn generate_delegate(acc: &mut Assists, ctx: &AssistContext) -> Optio
9796
strukt.syntax().text_range().end()
9897
});
9998

100-
builder.insert(start_offset, buf);
99+
let cap = ctx.config.snippet_cap.unwrap(); // FIXME.
100+
let cursor = Cursor::Before(f.syntax());
101+
102+
builder.insert_snippet(
103+
cap,
104+
start_offset,
105+
format!("\n\n{}", render_snippet(cap, f.syntax(), cursor)),
106+
);
101107
},
102108
)?;
103109
}

0 commit comments

Comments
 (0)