From 8cd23a4fb8c6a1012ba3e40dd3329a5abaed06b7 Mon Sep 17 00:00:00 2001 From: uHOOCCOOHu Date: Fri, 27 Sep 2019 00:16:55 +0800 Subject: Store crate info in `MacroDefId` --- crates/ra_hir/src/code_model/src.rs | 2 +- crates/ra_hir/src/ids.rs | 9 ++++++--- crates/ra_hir/src/nameres/collector.rs | 5 ++++- 3 files changed, 11 insertions(+), 5 deletions(-) (limited to 'crates') diff --git a/crates/ra_hir/src/code_model/src.rs b/crates/ra_hir/src/code_model/src.rs index c0cb27b47..dc964e156 100644 --- a/crates/ra_hir/src/code_model/src.rs +++ b/crates/ra_hir/src/code_model/src.rs @@ -119,7 +119,7 @@ impl HasSource for TypeAlias { impl HasSource for MacroDef { type Ast = ast::MacroCall; fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { - Source { file_id: self.id.0.file_id(), ast: self.id.0.to_node(db) } + Source { file_id: self.id.ast_id.file_id(), ast: self.id.ast_id.to_node(db) } } } diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs index 9ea4e695d..246377100 100644 --- a/crates/ra_hir/src/ids.rs +++ b/crates/ra_hir/src/ids.rs @@ -10,7 +10,7 @@ use ra_syntax::{ast, AstNode, Parse, SyntaxNode}; use crate::{ db::{AstDatabase, DefDatabase, InternDatabase}, - AstId, FileAstId, Module, Source, + AstId, Crate, FileAstId, Module, Source, }; /// hir makes heavy use of ids: integer (u32) handlers to various things. You @@ -121,10 +121,13 @@ impl From for HirFileId { } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct MacroDefId(pub(crate) AstId); +pub struct MacroDefId { + pub(crate) ast_id: AstId, + pub(crate) krate: Crate, +} pub(crate) fn macro_def_query(db: &impl AstDatabase, id: MacroDefId) -> Option> { - let macro_call = id.0.to_node(db); + let macro_call = id.ast_id.to_node(db); let arg = macro_call.token_tree()?; let (tt, _) = mbe::ast_to_token_tree(&arg).or_else(|| { log::warn!("fail on macro_def to token tree: {:#?}", arg); diff --git a/crates/ra_hir/src/nameres/collector.rs b/crates/ra_hir/src/nameres/collector.rs index ef7dc6ebe..65929c522 100644 --- a/crates/ra_hir/src/nameres/collector.rs +++ b/crates/ra_hir/src/nameres/collector.rs @@ -662,7 +662,10 @@ where // Case 1: macro rules, define a macro in crate-global mutable scope if is_macro_rules(&mac.path) { if let Some(name) = &mac.name { - let macro_id = MacroDefId(mac.ast_id.with_file_id(self.file_id)); + let macro_id = MacroDefId { + ast_id: mac.ast_id.with_file_id(self.file_id), + krate: self.def_collector.def_map.krate, + }; let macro_ = MacroDef { id: macro_id }; self.def_collector.define_macro(self.module_id, name.clone(), macro_, mac.export); } -- cgit v1.2.3