Add a check_assist_* overload and move tests under assists

This commit is contained in:
Ali Bektas 2025-02-18 21:58:27 +01:00
parent fc10fe44de
commit 9d5a97368a
3 changed files with 66 additions and 37 deletions

View File

@ -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,
}"#,
);
}
}

View File

@ -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,
}
"#,
);
}
}

View File

@ -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(
@ -368,41 +382,6 @@ fn labels(assists: &[Assist]) -> String {
labels.into_iter().collect::<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 }";