11use std:: collections:: HashMap ;
22
3- use itertools:: Itertools ;
4-
53use hir:: { Adt , ModuleDef , PathResolution , Semantics , Struct } ;
4+ use itertools:: Itertools ;
65use ra_ide_db:: RootDatabase ;
76use ra_syntax:: {
8- algo, ast,
9- ast:: { Name , Path , RecordLit , RecordPat } ,
10- AstNode , SyntaxKind , SyntaxNode ,
7+ algo,
8+ ast:: { self , Path , RecordLit , RecordPat } ,
9+ match_ast, AstNode , SyntaxKind ,
10+ SyntaxKind :: * ,
11+ SyntaxNode ,
1112} ;
1213
1314use crate :: {
1415 assist_ctx:: { Assist , AssistCtx } ,
1516 AssistId ,
1617} ;
17- use ra_syntax:: ast:: { Expr , NameRef } ;
1818
1919// Assist: reorder_fields
2020//
@@ -59,7 +59,6 @@ fn reorder<R: AstNode>(ctx: AssistCtx) -> Option<Assist> {
5959}
6060
6161fn get_fields_kind ( node : & SyntaxNode ) -> Vec < SyntaxKind > {
62- use SyntaxKind :: * ;
6362 match node. kind ( ) {
6463 RECORD_LIT => vec ! [ RECORD_FIELD ] ,
6564 RECORD_PAT => vec ! [ RECORD_FIELD_PAT , BIND_PAT ] ,
@@ -68,19 +67,14 @@ fn get_fields_kind(node: &SyntaxNode) -> Vec<SyntaxKind> {
6867}
6968
7069fn get_field_name ( node : & SyntaxNode ) -> String {
71- use SyntaxKind :: * ;
72- match node. kind ( ) {
73- RECORD_FIELD => {
74- if let Some ( name) = node. children ( ) . find_map ( NameRef :: cast) {
75- return name. to_string ( ) ;
76- }
77- node. children ( ) . find_map ( Expr :: cast) . map ( |expr| expr. to_string ( ) ) . unwrap_or_default ( )
78- }
79- BIND_PAT | RECORD_FIELD_PAT => {
80- node. children ( ) . find_map ( Name :: cast) . map ( |n| n. to_string ( ) ) . unwrap_or_default ( )
70+ let res = match_ast ! {
71+ match node {
72+ ast:: RecordField ( field) => { field. field_name( ) . map( |it| it. to_string( ) ) } ,
73+ ast:: RecordFieldPat ( field) => { field. field_name( ) . map( |it| it. to_string( ) ) } ,
74+ _ => None ,
8175 }
82- _ => String :: new ( ) ,
83- }
76+ } ;
77+ res . unwrap_or_default ( )
8478}
8579
8680fn get_fields ( record : & SyntaxNode ) -> Vec < SyntaxNode > {
0 commit comments