Skip to content

Commit caac771

Browse files
bors[bot]vsrs
andauthored
Merge #9735
9735: Add assist to sort members alphabetically. r=matklad a=vsrs Supports traits, impls, structs, unions and enums (including inner struct variants). Does not support modules yet. ```rust en┃um Animal { Dog(String, f64), Cat { weight: f64, name: String }, } ``` -> ```rust enum Animal { Cat { weight: f64, name: String }, Dog(String, f64), } ``` --- ```rust enum Animal { Dog(String, f64), Cat {┃ weight: f64, name: String }, } ``` -> ```rust enum Animal { Dog(String, f64), Cat { name: String, weight: f64 }, } ``` --- More samples in docs https://github.com/vsrs/rust-analyzer/blob/0b7835619a3ec7fdc5c11e6ab001ad452314a3f2/crates/ide_assists/src/handlers/sort_items.rs#L12-L83. Relates #6110 Co-authored-by: vsrs <[email protected]>
2 parents 7008161 + cc33b0d commit caac771

File tree

8 files changed

+728
-51
lines changed

8 files changed

+728
-51
lines changed

crates/ide_assists/src/handlers/introduce_named_lifetime.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ static ASSIST_LABEL: &str = "Introduce named lifetime";
3333
// }
3434
// }
3535
// ```
36-
// FIXME: How can we handle renaming any one of multiple anonymous lifetimes?
37-
// FIXME: should also add support for the case fun(f: &Foo) -> &$0Foo
3836
pub(crate) fn introduce_named_lifetime(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
37+
// FIXME: How can we handle renaming any one of multiple anonymous lifetimes?
38+
// FIXME: should also add support for the case fun(f: &Foo) -> &$0Foo
3939
let lifetime =
4040
ctx.find_node_at_offset::<ast::Lifetime>().filter(|lifetime| lifetime.text() == "'_")?;
4141
let lifetime_loc = lifetime.lifetime_ident_token()?.text_range();

crates/ide_assists/src/handlers/reorder_fields.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ use crate::{AssistContext, AssistId, AssistKind, Assists};
2020
// struct Foo {foo: i32, bar: i32};
2121
// const test: Foo = Foo {foo: 1, bar: 0}
2222
// ```
23-
//
2423
pub(crate) fn reorder_fields(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
2524
let record = ctx
2625
.find_node_at_offset::<ast::RecordExpr>()

crates/ide_assists/src/handlers/reorder_impl.rs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use syntax::{
88
ted, AstNode,
99
};
1010

11-
use crate::{AssistContext, AssistId, AssistKind, Assists};
11+
use crate::{utils::get_methods, AssistContext, AssistId, AssistKind, Assists};
1212

1313
// Assist: reorder_impl
1414
//
@@ -44,7 +44,6 @@ use crate::{AssistContext, AssistId, AssistKind, Assists};
4444
// fn c() {}
4545
// }
4646
// ```
47-
//
4847
pub(crate) fn reorder_impl(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
4948
let impl_ast = ctx.find_node_at_offset::<ast::Impl>()?;
5049
let items = impl_ast.assoc_item_list()?;
@@ -76,7 +75,7 @@ pub(crate) fn reorder_impl(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
7675
let target = items.syntax().text_range();
7776
acc.add(
7877
AssistId("reorder_impl", AssistKind::RefactorRewrite),
79-
"Sort methods",
78+
"Sort methods by trait definition",
8079
target,
8180
|builder| {
8281
let methods = methods.into_iter().map(|fn_| builder.make_mut(fn_)).collect::<Vec<_>>();
@@ -111,17 +110,6 @@ fn trait_definition(path: &ast::Path, sema: &Semantics<RootDatabase>) -> Option<
111110
}
112111
}
113112

114-
fn get_methods(items: &ast::AssocItemList) -> Vec<ast::Fn> {
115-
items
116-
.assoc_items()
117-
.flat_map(|i| match i {
118-
ast::AssocItem::Fn(f) => Some(f),
119-
_ => None,
120-
})
121-
.filter(|f| f.name().is_some())
122-
.collect()
123-
}
124-
125113
#[cfg(test)]
126114
mod tests {
127115
use crate::tests::{check_assist, check_assist_not_applicable};

0 commit comments

Comments
 (0)