mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Use match_ast
This commit is contained in:
parent
b28d411866
commit
0bf903411c
2 changed files with 15 additions and 12 deletions
|
@ -1,6 +1,6 @@
|
|||
use ra_syntax::{
|
||||
ast::{self, edit::AstNodeEdit, make, AstNode, NameOwner, TypeBoundsOwner},
|
||||
SyntaxElement,
|
||||
match_ast,
|
||||
SyntaxKind::*,
|
||||
};
|
||||
|
||||
|
@ -34,15 +34,18 @@ pub(crate) fn move_bounds_to_where_clause(ctx: AssistCtx) -> Option<Assist> {
|
|||
return None;
|
||||
}
|
||||
|
||||
let anchor: SyntaxElement = match parent.kind() {
|
||||
FN_DEF => ast::FnDef::cast(parent)?.body()?.syntax().clone().into(),
|
||||
TRAIT_DEF => ast::TraitDef::cast(parent)?.item_list()?.syntax().clone().into(),
|
||||
IMPL_DEF => ast::ImplDef::cast(parent)?.item_list()?.syntax().clone().into(),
|
||||
ENUM_DEF => ast::EnumDef::cast(parent)?.variant_list()?.syntax().clone().into(),
|
||||
STRUCT_DEF => parent
|
||||
.children_with_tokens()
|
||||
.find(|it| it.kind() == RECORD_FIELD_DEF_LIST || it.kind() == SEMI)?,
|
||||
_ => return None,
|
||||
let anchor = match_ast! {
|
||||
match parent {
|
||||
ast::FnDef(it) => it.body()?.syntax().clone().into(),
|
||||
ast::TraitDef(it) => it.item_list()?.syntax().clone().into(),
|
||||
ast::ImplDef(it) => it.item_list()?.syntax().clone().into(),
|
||||
ast::EnumDef(it) => it.variant_list()?.syntax().clone().into(),
|
||||
ast::StructDef(it) => {
|
||||
it.syntax().children_with_tokens()
|
||||
.find(|it| it.kind() == RECORD_FIELD_DEF_LIST || it.kind() == SEMI)?
|
||||
},
|
||||
_ => return None
|
||||
}
|
||||
};
|
||||
|
||||
ctx.add_assist(AssistId("move_bounds_to_where_clause"), "Move to where clause", |edit| {
|
||||
|
|
|
@ -179,10 +179,10 @@ macro_rules! match_ast {
|
|||
(match $node:ident { $($tt:tt)* }) => { match_ast!(match ($node) { $($tt)* }) };
|
||||
|
||||
(match ($node:expr) {
|
||||
$( ast::$ast:ident($it:ident) => $res:block, )*
|
||||
$( ast::$ast:ident($it:ident) => $res:expr, )*
|
||||
_ => $catch_all:expr $(,)?
|
||||
}) => {{
|
||||
$( if let Some($it) = ast::$ast::cast($node.clone()) $res else )*
|
||||
$( if let Some($it) = ast::$ast::cast($node.clone()) { $res } else )*
|
||||
{ $catch_all }
|
||||
}};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue