Fix selected multi variants applicable generate_default_from_enum_variant

This commit is contained in:
A4-Tacks 2025-09-18 13:57:07 +08:00
parent 2268a56350
commit d6c66dff1d
No known key found for this signature in database
GPG key ID: DBD861323040663B

View file

@ -39,6 +39,9 @@ pub(crate) fn generate_default_from_enum_variant(
cov_mark::hit!(test_gen_default_on_non_unit_variant_not_implemented);
return None;
}
if !variant.syntax().text_range().contains_range(ctx.selection_trimmed()) {
return None;
}
if existing_default_impl(&ctx.sema, &variant).is_some() {
cov_mark::hit!(test_gen_default_impl_already_exists);
@ -114,6 +117,49 @@ impl Default for Variant {
);
}
#[test]
fn test_generate_default_selected_variant() {
check_assist(
generate_default_from_enum_variant,
r#"
//- minicore: default
enum Variant {
Undefined,
$0Minor$0,
Major,
}
"#,
r#"
enum Variant {
Undefined,
Minor,
Major,
}
impl Default for Variant {
fn default() -> Self {
Self::Minor
}
}
"#,
);
}
#[test]
fn test_generate_default_not_applicable_with_multiple_variant_selection() {
check_assist_not_applicable(
generate_default_from_enum_variant,
r#"
//- minicore: default
enum Variant {
Undefined,
$0Minor,
M$0ajor,
}
"#,
);
}
#[test]
fn test_generate_default_already_implemented() {
cov_mark::check!(test_gen_default_impl_already_exists);