Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_assists/src/handlers/generate_enum_projection_method.rs')
-rw-r--r--crates/ide_assists/src/handlers/generate_enum_projection_method.rs43
1 files changed, 25 insertions, 18 deletions
diff --git a/crates/ide_assists/src/handlers/generate_enum_projection_method.rs b/crates/ide_assists/src/handlers/generate_enum_projection_method.rs
index a9116be67c..fdaa791340 100644
--- a/crates/ide_assists/src/handlers/generate_enum_projection_method.rs
+++ b/crates/ide_assists/src/handlers/generate_enum_projection_method.rs
@@ -1,3 +1,4 @@
+use ide_db::assists::GroupLabel;
use itertools::Itertools;
use stdx::to_lower_snake_case;
use syntax::ast::HasVisibility;
@@ -139,31 +140,37 @@ fn generate_enum_projection_method(
let impl_def = find_struct_impl(ctx, &parent_enum, &fn_name)?;
let target = variant.syntax().text_range();
- acc.add(AssistId(assist_id, AssistKind::Generate), assist_description, target, |builder| {
- let vis = parent_enum.visibility().map_or(String::new(), |v| format!("{} ", v));
- let method = format!(
- " {0}fn {1}({2}) -> {3}{4}{5} {{
+ acc.add_group(
+ &GroupLabel("Generate `is_`,`as_`,`try_into_`".to_owned()),
+ AssistId(assist_id, AssistKind::Generate),
+ assist_description,
+ target,
+ |builder| {
+ let vis = parent_enum.visibility().map_or(String::new(), |v| format!("{} ", v));
+ let method = format!(
+ " {0}fn {1}({2}) -> {3}{4}{5} {{
if let Self::{6}{7} = self {{
{8}({9})
}} else {{
{10}
}}
}}",
- vis,
- fn_name,
- props.self_param,
- props.return_prefix,
- field_type.syntax(),
- props.return_suffix,
- variant_name,
- pattern_suffix,
- props.happy_case,
- bound_name,
- props.sad_case,
- );
+ vis,
+ fn_name,
+ props.self_param,
+ props.return_prefix,
+ field_type.syntax(),
+ props.return_suffix,
+ variant_name,
+ pattern_suffix,
+ props.happy_case,
+ bound_name,
+ props.sad_case,
+ );
- add_method_to_adt(builder, &parent_enum, impl_def, &method);
- })
+ add_method_to_adt(builder, &parent_enum, impl_def, &method);
+ },
+ )
}
#[cfg(test)]