Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/generate_function.rs')
-rw-r--r--crates/ide-assists/src/handlers/generate_function.rs64
1 files changed, 61 insertions, 3 deletions
diff --git a/crates/ide-assists/src/handlers/generate_function.rs b/crates/ide-assists/src/handlers/generate_function.rs
index 613b32fcc1..a9cf2c1bae 100644
--- a/crates/ide-assists/src/handlers/generate_function.rs
+++ b/crates/ide-assists/src/handlers/generate_function.rs
@@ -189,7 +189,7 @@ fn add_func_to_accumulator(
)));
// FIXME: adt may have generic params.
- let impl_ = make::impl_(None, None, name, None, None).clone_for_update();
+ let impl_ = make::impl_(None, None, None, name, None, None).clone_for_update();
func.indent(IndentLevel(1));
impl_.get_or_create_assoc_item_list().add_item(func.into());
@@ -316,7 +316,7 @@ impl FunctionBuilder {
let current_module = ctx.sema.scope(call.syntax())?.module();
let visibility = calculate_necessary_visibility(current_module, target_module, ctx);
- let fn_name = make::name(&name.text());
+ let fn_name = make::name(name.ident_token()?.text());
let mut necessary_generic_params = FxHashSet::default();
necessary_generic_params.extend(receiver_ty.generic_params(ctx.db()));
let params = fn_args(
@@ -364,10 +364,13 @@ impl FunctionBuilder {
Visibility::Crate => Some(make::visibility_pub_crate()),
Visibility::Pub => Some(make::visibility_pub()),
};
+ let type_params =
+ self.generic_param_list.filter(|list| list.generic_params().next().is_some());
let fn_def = make::fn_(
+ None,
visibility,
self.fn_name,
- self.generic_param_list,
+ type_params,
self.where_clause,
self.params,
self.fn_body,
@@ -2415,6 +2418,33 @@ impl Foo {
}
#[test]
+ fn create_method_with_unused_generics() {
+ check_assist(
+ generate_function,
+ r#"
+struct Foo<S>(S);
+impl<S> Foo<S> {
+ fn foo(&self) {
+ self.bar()$0;
+ }
+}
+"#,
+ r#"
+struct Foo<S>(S);
+impl<S> Foo<S> {
+ fn foo(&self) {
+ self.bar();
+ }
+
+ fn bar(&self) ${0:-> _} {
+ todo!()
+ }
+}
+"#,
+ )
+ }
+
+ #[test]
fn create_function_with_async() {
check_assist(
generate_function,
@@ -3130,4 +3160,32 @@ fn main() {
"#,
)
}
+
+ #[test]
+ fn no_generate_method_by_keyword() {
+ check_assist_not_applicable(
+ generate_function,
+ r#"
+fn main() {
+ s.super$0();
+}
+ "#,
+ );
+ check_assist_not_applicable(
+ generate_function,
+ r#"
+fn main() {
+ s.Self$0();
+}
+ "#,
+ );
+ check_assist_not_applicable(
+ generate_function,
+ r#"
+fn main() {
+ s.self$0();
+}
+ "#,
+ );
+ }
}