Skip to content

Commit ced65f7

Browse files
bors[bot]vsrs
andauthored
Merge #10001
10001: Sort enum variant r=Veykril a=vsrs A small fix to the problem noted by `@lnicola` : > ![sort-fields](https://user-images.githubusercontent.com/308347/129513196-4ffc7937-be58-44d4-9ec7-ba8745dcb460.gif) > > (note the slight inconsistency here: to sort the variants of `Animal` I have to select the enum name, but to sort the fields of `Cat` I have to select the fields themselves) Co-authored-by: vsrs <[email protected]>
2 parents 1b28593 + 7a8f881 commit ced65f7

File tree

1 file changed

+31
-8
lines changed

1 file changed

+31
-8
lines changed

crates/ide_assists/src/handlers/sort_items.rs

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,11 @@ pub(crate) fn sort_items(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
9292
} else if let Some(impl_ast) = ctx.find_node_at_offset::<ast::Impl>() {
9393
add_sort_methods_assist(acc, impl_ast.assoc_item_list()?)
9494
} else if let Some(struct_ast) = ctx.find_node_at_offset::<ast::Struct>() {
95-
match struct_ast.field_list() {
96-
Some(ast::FieldList::RecordFieldList(it)) => add_sort_fields_assist(acc, it),
97-
_ => {
98-
cov_mark::hit!(not_applicable_if_sorted_or_empty_or_single);
99-
None
100-
}
101-
}
95+
add_sort_field_list_assist(acc, struct_ast.field_list())
10296
} else if let Some(union_ast) = ctx.find_node_at_offset::<ast::Union>() {
10397
add_sort_fields_assist(acc, union_ast.record_field_list()?)
98+
} else if let Some(variant_ast) = ctx.find_node_at_offset::<ast::Variant>() {
99+
add_sort_field_list_assist(acc, variant_ast.field_list())
104100
} else if let Some(enum_struct_variant_ast) = ctx.find_node_at_offset::<ast::RecordFieldList>()
105101
{
106102
// should be above enum and below struct
@@ -140,6 +136,16 @@ impl AddRewrite for Assists {
140136
}
141137
}
142138

139+
fn add_sort_field_list_assist(acc: &mut Assists, field_list: Option<ast::FieldList>) -> Option<()> {
140+
match field_list {
141+
Some(ast::FieldList::RecordFieldList(it)) => add_sort_fields_assist(acc, it),
142+
_ => {
143+
cov_mark::hit!(not_applicable_if_sorted_or_empty_or_single);
144+
None
145+
}
146+
}
147+
}
148+
143149
fn add_sort_methods_assist(acc: &mut Assists, item_list: ast::AssocItemList) -> Option<()> {
144150
let methods = get_methods(&item_list);
145151
let sorted = sort_by_name(&methods);
@@ -541,7 +547,7 @@ enum Bar {
541547
}
542548

543549
#[test]
544-
fn sort_struct_enum_variant() {
550+
fn sort_struct_enum_variant_fields() {
545551
check_assist(
546552
sort_items,
547553
r#"
@@ -558,6 +564,23 @@ enum Bar {
558564
b = 14,
559565
a,
560566
c(u32, usize),
567+
}
568+
"#,
569+
)
570+
}
571+
572+
#[test]
573+
fn sort_struct_enum_variant() {
574+
check_assist(
575+
sort_items,
576+
r#"
577+
enum Bar {
578+
$0d$0{ second: usize, first: u32 },
579+
}
580+
"#,
581+
r#"
582+
enum Bar {
583+
d{ first: u32, second: usize },
561584
}
562585
"#,
563586
)

0 commit comments

Comments
 (0)