From b205a0ced3f8b2136ac256d8a3dca9fa09e910be Mon Sep 17 00:00:00 2001 From: kjeremy Date: Wed, 30 Oct 2019 16:08:27 -0400 Subject: source_binder => match_ast! --- crates/ra_hir/src/source_binder.rs | 64 +++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 28 deletions(-) (limited to 'crates') diff --git a/crates/ra_hir/src/source_binder.rs b/crates/ra_hir/src/source_binder.rs index 01f51ba5d..152bc71bd 100644 --- a/crates/ra_hir/src/source_binder.rs +++ b/crates/ra_hir/src/source_binder.rs @@ -12,7 +12,7 @@ use hir_expand::name::AsName; use ra_db::FileId; use ra_syntax::{ ast::{self, AstNode}, - AstPtr, + match_ast, AstPtr, SyntaxKind::*, SyntaxNode, SyntaxNodePtr, TextRange, TextUnit, }; @@ -37,24 +37,34 @@ fn try_get_resolver_for_node( file_id: FileId, node: &SyntaxNode, ) -> Option { - if let Some(module) = ast::Module::cast(node.clone()) { - let src = crate::Source { file_id: file_id.into(), ast: module }; - Some(crate::Module::from_declaration(db, src)?.resolver(db)) - } else if let Some(file) = ast::SourceFile::cast(node.clone()) { - let src = - crate::Source { file_id: file_id.into(), ast: crate::ModuleSource::SourceFile(file) }; - Some(crate::Module::from_definition(db, src)?.resolver(db)) - } else if let Some(s) = ast::StructDef::cast(node.clone()) { - let src = crate::Source { file_id: file_id.into(), ast: s }; - Some(Struct::from_source(db, src)?.resolver(db)) - } else if let Some(e) = ast::EnumDef::cast(node.clone()) { - let src = crate::Source { file_id: file_id.into(), ast: e }; - Some(Enum::from_source(db, src)?.resolver(db)) - } else if node.kind() == FN_DEF || node.kind() == CONST_DEF || node.kind() == STATIC_DEF { - Some(def_with_body_from_child_node(db, file_id, node)?.resolver(db)) - } else { - // FIXME add missing cases - None + match_ast! { + match node { + ast::Module(it) => { + let src = crate::Source { file_id: file_id.into(), ast: it }; + Some(crate::Module::from_declaration(db, src)?.resolver(db)) + }, + ast::SourceFile(it) => { + let src = + crate::Source { file_id: file_id.into(), ast: crate::ModuleSource::SourceFile(it) }; + Some(crate::Module::from_definition(db, src)?.resolver(db)) + }, + ast::StructDef(it) => { + let src = crate::Source { file_id: file_id.into(), ast: it }; + Some(Struct::from_source(db, src)?.resolver(db)) + }, + ast::EnumDef(it) => { + let src = crate::Source { file_id: file_id.into(), ast: it }; + Some(Enum::from_source(db, src)?.resolver(db)) + }, + _ => { + if node.kind() == FN_DEF || node.kind() == CONST_DEF || node.kind() == STATIC_DEF { + Some(def_with_body_from_child_node(db, file_id, node)?.resolver(db)) + } else { + // FIXME add missing cases + None + } + }, + } } } @@ -68,16 +78,14 @@ fn def_with_body_from_child_node( let ctx = LocationCtx::new(db, module.id, file_id.into()); node.ancestors().find_map(|node| { - if let Some(def) = ast::FnDef::cast(node.clone()) { - return Some(Function { id: ctx.to_def(&def) }.into()); - } - if let Some(def) = ast::ConstDef::cast(node.clone()) { - return Some(Const { id: ctx.to_def(&def) }.into()); - } - if let Some(def) = ast::StaticDef::cast(node) { - return Some(Static { id: ctx.to_def(&def) }.into()); + match_ast! { + match node { + ast::FnDef(def) => { Some(Function {id: ctx.to_def(&def) }.into()) }, + ast::ConstDef(def) => { Some(Const { id: ctx.to_def(&def) }.into()) }, + ast::StaticDef(def) => { Some(Static { id: ctx.to_def(&def) }.into()) }, + _ => { None }, + } } - None }) } -- cgit v1.2.3 From 78f93c8033d4803167536a070c2162b072e16055 Mon Sep 17 00:00:00 2001 From: kjeremy Date: Wed, 30 Oct 2019 16:08:59 -0400 Subject: traits => match_ast! --- crates/ra_syntax/src/ast/traits.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'crates') diff --git a/crates/ra_syntax/src/ast/traits.rs b/crates/ra_syntax/src/ast/traits.rs index 76313684e..c2b005886 100644 --- a/crates/ra_syntax/src/ast/traits.rs +++ b/crates/ra_syntax/src/ast/traits.rs @@ -6,6 +6,7 @@ use itertools::Itertools; use crate::{ ast::{self, child_opt, children, AstChildren, AstNode, AstToken}, + match_ast, syntax_node::{SyntaxElementChildren, SyntaxNodeChildren}, }; @@ -68,11 +69,12 @@ impl Iterator for ItemOrMacroIter { fn next(&mut self) -> Option { loop { let n = self.0.next()?; - if let Some(item) = ast::ModuleItem::cast(n.clone()) { - return Some(ItemOrMacro::Item(item)); - } - if let Some(call) = ast::MacroCall::cast(n) { - return Some(ItemOrMacro::Macro(call)); + match_ast! { + match n { + ast::ModuleItem(it) => { return Some(ItemOrMacro::Item(it)) }, + ast::MacroCall(it) => { return Some(ItemOrMacro::Macro(it)) }, + _ => {}, + } } } } -- cgit v1.2.3 From 4ad37df22339ff91779782d37ab315ef0ce274eb Mon Sep 17 00:00:00 2001 From: kjeremy Date: Wed, 30 Oct 2019 16:09:16 -0400 Subject: runnables => match_ast! --- crates/ra_ide_api/src/runnables.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'crates') diff --git a/crates/ra_ide_api/src/runnables.rs b/crates/ra_ide_api/src/runnables.rs index 910883da7..1b5c8deea 100644 --- a/crates/ra_ide_api/src/runnables.rs +++ b/crates/ra_ide_api/src/runnables.rs @@ -4,7 +4,7 @@ use itertools::Itertools; use ra_db::SourceDatabase; use ra_syntax::{ ast::{self, AstNode, AttrsOwner, ModuleItemOwner, NameOwner}, - SyntaxNode, TextRange, + match_ast, SyntaxNode, TextRange, }; use crate::{db::RootDatabase, FileId}; @@ -29,12 +29,12 @@ pub(crate) fn runnables(db: &RootDatabase, file_id: FileId) -> Vec { } fn runnable(db: &RootDatabase, file_id: FileId, item: SyntaxNode) -> Option { - if let Some(fn_def) = ast::FnDef::cast(item.clone()) { - runnable_fn(fn_def) - } else if let Some(m) = ast::Module::cast(item) { - runnable_mod(db, file_id, m) - } else { - None + match_ast! { + match item { + ast::FnDef(it) => { runnable_fn(it) }, + ast::Module(it) => { runnable_mod(db, file_id, it) }, + _ => { None }, + } } } -- cgit v1.2.3