From 1b783e33e953f2c63c96c1d7fa54d2e64fbd2d9a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 8 Jun 2019 14:48:56 +0300 Subject: one macro def should be enough --- crates/ra_hir/src/code_model.rs | 9 +++++++ crates/ra_hir/src/docs.rs | 7 +++-- crates/ra_hir/src/lib.rs | 2 +- crates/ra_hir/src/source_binder.rs | 30 +++++----------------- crates/ra_ide_api/src/display/navigation_target.rs | 5 +--- crates/ra_ide_api/src/name_ref_kind.rs | 5 ++-- 6 files changed, 25 insertions(+), 33 deletions(-) (limited to 'crates') diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index cf16ed94d..27850028b 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -939,6 +939,15 @@ pub struct MacroDef { pub(crate) id: MacroDefId, } +impl MacroDef { + pub fn source( + &self, + db: &(impl DefDatabase + AstDatabase), + ) -> (HirFileId, TreeArc) { + (self.id.0.file_id(), self.id.0.to_node(db)) + } +} + pub enum Container { Trait(Trait), ImplBlock(ImplBlock), diff --git a/crates/ra_hir/src/docs.rs b/crates/ra_hir/src/docs.rs index 900fd2aa8..1b0f84de5 100644 --- a/crates/ra_hir/src/docs.rs +++ b/crates/ra_hir/src/docs.rs @@ -4,7 +4,7 @@ use ra_syntax::ast; use crate::{ HirDatabase, DefDatabase, AstDatabase, - Module, StructField, Struct, Enum, EnumVariant, Static, Const, Function, Union, Trait, TypeAlias, FieldSource + Module, StructField, Struct, Enum, EnumVariant, Static, Const, Function, Union, Trait, TypeAlias, FieldSource, MacroDef, }; #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] @@ -20,6 +20,7 @@ pub enum DocDef { Union(Union), Trait(Trait), TypeAlias(TypeAlias), + MacroDef(MacroDef), } impl_froms!( @@ -33,7 +34,8 @@ impl_froms!( Function, Union, Trait, - TypeAlias + TypeAlias, + MacroDef ); /// Holds documentation @@ -83,6 +85,7 @@ pub(crate) fn documentation_query( DocDef::Union(it) => docs_from_ast(&*it.source(db).1), DocDef::Trait(it) => docs_from_ast(&*it.source(db).1), DocDef::TypeAlias(it) => docs_from_ast(&*it.source(db).1), + DocDef::MacroDef(it) => docs_from_ast(&*it.source(db).1), } } diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index 18dea5f17..0e4aaf678 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -69,7 +69,7 @@ pub use self::{ expr::ExprScopes, resolve::Resolution, generics::{GenericParams, GenericParam, HasGenericParams}, - source_binder::{SourceAnalyzer, PathResolution, ScopeEntryWithSyntax,MacroByExampleDef}, + source_binder::{SourceAnalyzer, PathResolution, ScopeEntryWithSyntax}, }; pub use self::code_model::{ diff --git a/crates/ra_hir/src/source_binder.rs b/crates/ra_hir/src/source_binder.rs index 6a5799622..410064d45 100644 --- a/crates/ra_hir/src/source_binder.rs +++ b/crates/ra_hir/src/source_binder.rs @@ -10,7 +10,7 @@ use std::sync::Arc; use rustc_hash::{FxHashSet, FxHashMap}; use ra_db::{FileId, FilePosition}; use ra_syntax::{ - SyntaxNode, AstPtr, TextUnit, SyntaxNodePtr, TextRange,TreeArc, + SyntaxNode, AstPtr, TextUnit, SyntaxNodePtr, TextRange, ast::{self, AstNode, NameOwner}, algo::find_node_at_offset, SyntaxKind::*, @@ -18,10 +18,9 @@ use ra_syntax::{ use crate::{ HirDatabase, Function, Struct, Enum, Const, Static, Either, DefWithBody, PerNs, Name, - AsName, Module, HirFileId, Crate, Trait, Resolver, Ty,Path, + AsName, Module, HirFileId, Crate, Trait, Resolver, Ty, Path, MacroDef, expr::{BodySourceMap, scope::{ScopeId, ExprScopes}}, - ids::{LocationCtx, MacroDefId}, - docs::{docs_from_ast,Documentation}, + ids::LocationCtx, expr, AstId, }; @@ -182,27 +181,10 @@ pub enum PathResolution { /// A generic parameter GenericParam(u32), SelfType(crate::ImplBlock), - Macro(MacroByExampleDef), + Macro(MacroDef), AssocItem(crate::ImplItem), } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct MacroByExampleDef { - pub(crate) id: MacroDefId, -} - -impl MacroByExampleDef { - pub fn source(&self, db: &impl HirDatabase) -> (HirFileId, TreeArc) { - (self.id.0.file_id(), self.id.0.to_node(db)) - } -} - -impl crate::Docs for MacroByExampleDef { - fn docs(&self, db: &impl HirDatabase) -> Option { - docs_from_ast(&*self.source(db).1) - } -} - #[derive(Debug, Clone, PartialEq, Eq)] pub struct ScopeEntryWithSyntax { pub(crate) name: Name, @@ -284,10 +266,10 @@ impl SourceAnalyzer { &self, db: &impl HirDatabase, macro_call: &ast::MacroCall, - ) -> Option { + ) -> Option { let id = self.resolver.resolve_macro_call(db, macro_call.path().and_then(Path::from_ast))?; - Some(MacroByExampleDef { id }) + Some(MacroDef { id }) } pub fn resolve_hir_path( diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index e19c071b0..45002d098 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -238,10 +238,7 @@ impl NavigationTarget { } } - pub(crate) fn from_macro_def( - db: &RootDatabase, - macro_call: hir::MacroByExampleDef, - ) -> NavigationTarget { + pub(crate) fn from_macro_def(db: &RootDatabase, macro_call: hir::MacroDef) -> NavigationTarget { let (file_id, node) = macro_call.source(db); log::debug!("nav target {}", node.syntax().debug_dump()); NavigationTarget::from_named(file_id.original_file(db), &*node) diff --git a/crates/ra_ide_api/src/name_ref_kind.rs b/crates/ra_ide_api/src/name_ref_kind.rs index 90972bc58..000036db4 100644 --- a/crates/ra_ide_api/src/name_ref_kind.rs +++ b/crates/ra_ide_api/src/name_ref_kind.rs @@ -1,11 +1,12 @@ use ra_syntax::{AstNode, AstPtr, ast}; use hir::Either; -use crate::db::RootDatabase; use test_utils::tested_by; +use crate::db::RootDatabase; + pub enum NameRefKind { Method(hir::Function), - Macro(hir::MacroByExampleDef), + Macro(hir::MacroDef), FieldAccess(hir::StructField), AssocItem(hir::ImplItem), Def(hir::ModuleDef), -- cgit v1.2.3