diff options
author | Aleksey Kladov <[email protected]> | 2020-04-11 22:33:17 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-04-11 23:00:15 +0100 |
commit | 5e5eb6a108b00c573455d8d088742592012707be (patch) | |
tree | 49146b7e25835f21c09f75ec56e129367f56cab0 /crates/ra_assists/src | |
parent | 6b49e774e23c04a04ff5f377fc8dae25b5c69bb0 (diff) |
Align grammar for record patterns and literals
The grammar now looks like this
[name_ref :] pat
Diffstat (limited to 'crates/ra_assists/src')
-rw-r--r-- | crates/ra_assists/src/handlers/reorder_fields.rs | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/crates/ra_assists/src/handlers/reorder_fields.rs b/crates/ra_assists/src/handlers/reorder_fields.rs index 692dd1315..a43e53a11 100644 --- a/crates/ra_assists/src/handlers/reorder_fields.rs +++ b/crates/ra_assists/src/handlers/reorder_fields.rs | |||
@@ -1,20 +1,20 @@ | |||
1 | use std::collections::HashMap; | 1 | use std::collections::HashMap; |
2 | 2 | ||
3 | use itertools::Itertools; | ||
4 | |||
5 | use hir::{Adt, ModuleDef, PathResolution, Semantics, Struct}; | 3 | use hir::{Adt, ModuleDef, PathResolution, Semantics, Struct}; |
4 | use itertools::Itertools; | ||
6 | use ra_ide_db::RootDatabase; | 5 | use ra_ide_db::RootDatabase; |
7 | use ra_syntax::{ | 6 | use ra_syntax::{ |
8 | algo, ast, | 7 | algo, |
9 | ast::{Name, Path, RecordLit, RecordPat}, | 8 | ast::{self, Path, RecordLit, RecordPat}, |
10 | AstNode, SyntaxKind, SyntaxNode, | 9 | match_ast, AstNode, SyntaxKind, |
10 | SyntaxKind::*, | ||
11 | SyntaxNode, | ||
11 | }; | 12 | }; |
12 | 13 | ||
13 | use crate::{ | 14 | use crate::{ |
14 | assist_ctx::{Assist, AssistCtx}, | 15 | assist_ctx::{Assist, AssistCtx}, |
15 | AssistId, | 16 | AssistId, |
16 | }; | 17 | }; |
17 | use ra_syntax::ast::{Expr, NameRef}; | ||
18 | 18 | ||
19 | // Assist: reorder_fields | 19 | // Assist: reorder_fields |
20 | // | 20 | // |
@@ -59,7 +59,6 @@ fn reorder<R: AstNode>(ctx: AssistCtx) -> Option<Assist> { | |||
59 | } | 59 | } |
60 | 60 | ||
61 | fn get_fields_kind(node: &SyntaxNode) -> Vec<SyntaxKind> { | 61 | fn get_fields_kind(node: &SyntaxNode) -> Vec<SyntaxKind> { |
62 | use SyntaxKind::*; | ||
63 | match node.kind() { | 62 | match node.kind() { |
64 | RECORD_LIT => vec![RECORD_FIELD], | 63 | RECORD_LIT => vec![RECORD_FIELD], |
65 | RECORD_PAT => vec![RECORD_FIELD_PAT, BIND_PAT], | 64 | RECORD_PAT => vec![RECORD_FIELD_PAT, BIND_PAT], |
@@ -68,19 +67,14 @@ fn get_fields_kind(node: &SyntaxNode) -> Vec<SyntaxKind> { | |||
68 | } | 67 | } |
69 | 68 | ||
70 | fn get_field_name(node: &SyntaxNode) -> String { | 69 | fn get_field_name(node: &SyntaxNode) -> String { |
71 | use SyntaxKind::*; | 70 | let res = match_ast! { |
72 | match node.kind() { | 71 | match node { |
73 | RECORD_FIELD => { | 72 | ast::RecordField(field) => { field.field_name().map(|it| it.to_string()) }, |
74 | if let Some(name) = node.children().find_map(NameRef::cast) { | 73 | ast::RecordFieldPat(field) => { field.field_name().map(|it| it.to_string()) }, |
75 | return name.to_string(); | 74 | _ => None, |
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() | ||
81 | } | 75 | } |
82 | _ => String::new(), | 76 | }; |
83 | } | 77 | res.unwrap_or_default() |
84 | } | 78 | } |
85 | 79 | ||
86 | fn get_fields(record: &SyntaxNode) -> Vec<SyntaxNode> { | 80 | fn get_fields(record: &SyntaxNode) -> Vec<SyntaxNode> { |