about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAmos Wenger <amoswenger@gmail.com>2022-05-21 01:43:05 +0200
committerAmos Wenger <amoswenger@gmail.com>2022-05-21 01:43:05 +0200
commit707a5683b1016f70f153ee43f75a6d1c6b9d012d (patch)
tree1cd9fef63fc15ee0d413a9f59c91dcae4f52b958
parent0ed85beb15abac72cde1a3e83ef8f1122d6dea8c (diff)
downloadrust-707a5683b1016f70f153ee43f75a6d1c6b9d012d.tar.gz
rust-707a5683b1016f70f153ee43f75a6d1c6b9d012d.zip
Still suggest generating enum methods if the name ref starts with a lowercase letter
-rw-r--r--crates/ide-assists/src/handlers/generate_enum_variant.rs2
-rw-r--r--crates/ide-assists/src/handlers/generate_function.rs31
2 files changed, 31 insertions, 2 deletions
diff --git a/crates/ide-assists/src/handlers/generate_enum_variant.rs b/crates/ide-assists/src/handlers/generate_enum_variant.rs
index c68b587ad17..3b28a9639c8 100644
--- a/crates/ide-assists/src/handlers/generate_enum_variant.rs
+++ b/crates/ide-assists/src/handlers/generate_enum_variant.rs
@@ -42,7 +42,7 @@ pub(crate) fn generate_enum_variant(acc: &mut Assists, ctx: &AssistContext) -> O
 
     let name_ref = path.segment()?.name_ref()?;
     if name_ref.text().as_str().chars().next()?.is_ascii_lowercase() {
-        // No need to generate anything if the name starts with a lowercase letter
+        // Don't suggest generating variant if the name starts with a lowercase letter
         return None;
     }
 
diff --git a/crates/ide-assists/src/handlers/generate_function.rs b/crates/ide-assists/src/handlers/generate_function.rs
index e3ef321d4b2..7077dc9e5c7 100644
--- a/crates/ide-assists/src/handlers/generate_function.rs
+++ b/crates/ide-assists/src/handlers/generate_function.rs
@@ -72,7 +72,10 @@ fn gen_fn(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
             }
             Some(hir::PathResolution::Def(hir::ModuleDef::Adt(adt))) => {
                 if let hir::Adt::Enum(_) = adt {
-                    return None;
+                    // Don't suggest generating function if the name starts with an uppercase letter
+                    if name_ref.text().chars().next()?.is_uppercase() {
+                        return None;
+                    }
                 }
 
                 let current_module = ctx.sema.scope(call.syntax())?.module();
@@ -1755,4 +1758,30 @@ fn main() {
 ",
         );
     }
+
+    #[test]
+    fn applicable_for_enum_method() {
+        check_assist(
+            generate_function,
+            r"
+enum Foo {}
+fn main() {
+    Foo::new$0();
+}
+",
+            r"
+enum Foo {}
+fn main() {
+    Foo::new();
+}
+impl Foo {
+
+
+fn new() ${0:-> _} {
+    todo!()
+}
+}
+",
+        )
+    }
 }