Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-assists/src/handlers/generate_delegate_methods.rs21
-rw-r--r--crates/ide-assists/src/handlers/generate_delegate_trait.rs33
-rw-r--r--crates/ide-assists/src/tests.rs49
3 files changed, 66 insertions, 37 deletions
diff --git a/crates/ide-assists/src/handlers/generate_delegate_methods.rs b/crates/ide-assists/src/handlers/generate_delegate_methods.rs
index 03ec60bede..220259451e 100644
--- a/crates/ide-assists/src/handlers/generate_delegate_methods.rs
+++ b/crates/ide-assists/src/handlers/generate_delegate_methods.rs
@@ -217,7 +217,9 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext<'
#[cfg(test)]
mod tests {
- use crate::tests::{check_assist, check_assist_not_applicable};
+ use crate::tests::{
+ check_assist, check_assist_not_applicable, check_assist_not_applicable_no_grouping,
+ };
use super::*;
@@ -721,4 +723,21 @@ impl Person {
"#,
);
}
+
+ #[test]
+ fn delegate_method_skipped_when_no_grouping() {
+ check_assist_not_applicable_no_grouping(
+ generate_delegate_methods,
+ r#"
+struct Age(u8);
+impl Age {
+ fn age(&self) -> u8 {
+ self.0
+ }
+}
+struct Person {
+ ag$0e: Age,
+}"#,
+ );
+ }
}
diff --git a/crates/ide-assists/src/handlers/generate_delegate_trait.rs b/crates/ide-assists/src/handlers/generate_delegate_trait.rs
index 6a4541e4fe..55b860d0ff 100644
--- a/crates/ide-assists/src/handlers/generate_delegate_trait.rs
+++ b/crates/ide-assists/src/handlers/generate_delegate_trait.rs
@@ -792,7 +792,9 @@ fn qualified_path(qual_path_ty: ast::Path, path_expr_seg: ast::Path) -> ast::Pat
mod test {
use super::*;
- use crate::tests::{check_assist, check_assist_not_applicable};
+ use crate::tests::{
+ check_assist, check_assist_not_applicable, check_assist_not_applicable_no_grouping,
+ };
#[test]
fn test_tuple_struct_basic() {
@@ -1840,4 +1842,33 @@ impl<D, T: C<A>> C<D> for B<T> {
"#,
)
}
+
+ #[test]
+ fn delegate_trait_skipped_when_no_grouping() {
+ check_assist_not_applicable_no_grouping(
+ generate_delegate_trait,
+ r#"
+trait SomeTrait {
+ type T;
+ fn fn_(arg: u32) -> u32;
+ fn method_(&mut self) -> bool;
+}
+struct A;
+impl SomeTrait for A {
+ type T = u32;
+
+ fn fn_(arg: u32) -> u32 {
+ 42
+ }
+
+ fn method_(&mut self) -> bool {
+ false
+ }
+}
+struct B {
+ a$0 : A,
+}
+"#,
+ );
+ }
}
diff --git a/crates/ide-assists/src/tests.rs b/crates/ide-assists/src/tests.rs
index 87851e445d..11aeb21c77 100644
--- a/crates/ide-assists/src/tests.rs
+++ b/crates/ide-assists/src/tests.rs
@@ -195,6 +195,20 @@ pub(crate) fn check_assist_not_applicable_for_import_one(
);
}
+#[track_caller]
+pub(crate) fn check_assist_not_applicable_no_grouping(
+ assist: Handler,
+ #[rust_analyzer::rust_fixture] ra_fixture: &str,
+) {
+ check_with_config(
+ TEST_CONFIG_NO_GROUPING,
+ assist,
+ ra_fixture,
+ ExpectedResult::NotApplicable,
+ None,
+ );
+}
+
/// Check assist in unresolved state. Useful to check assists for lazy computation.
#[track_caller]
pub(crate) fn check_assist_unresolved(
@@ -369,41 +383,6 @@ fn labels(assists: &[Assist]) -> String {
}
#[test]
-fn long_groups_are_skipped_under_skip_resolve_strategy() {
- let before = r#"
-trait SomeTrait {
- type T;
- fn fn_(arg: u32) -> u32;
- fn method_(&mut self) -> bool;
-}
-struct A;
-impl SomeTrait for A {
- type T = u32;
-
- fn fn_(arg: u32) -> u32 {
- 42
- }
-
- fn method_(&mut self) -> bool {
- false
- }
-}
-struct B {
- a$0 : A,
-}
- "#;
- let (before_cursor_pos, before) = extract_offset(before);
- let (db, file_id) = with_single_file(&before);
- let frange = FileRange { file_id, range: TextRange::empty(before_cursor_pos) };
- let res = assists(&db, &TEST_CONFIG, AssistResolveStrategy::None, frange.into());
- assert!(res.iter().map(|a| &a.id).any(|a| { a.0 == "generate_delegate_trait" }));
-
- let limited =
- assists(&db, &TEST_CONFIG_NO_GROUPING, AssistResolveStrategy::None, frange.into());
- assert!(!limited.iter().map(|a| &a.id).any(|a| { a.0 == "generate_delegate_trait" }));
-}
-
-#[test]
fn assist_order_field_struct() {
let before = "struct Foo { $0bar: u32 }";
let (before_cursor_pos, before) = extract_offset(before);