Merge #3643
3643: Use match_ast r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
b376cabe5e
@ -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 New Issue
Block a user