From db8d29320855d68ee9af04ceeb7d1aceda8e63b7 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 2 Jan 2019 00:37:36 +0300 Subject: move macro id to ids --- crates/ra_hir/src/ids.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src/ids.rs') diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs index cd32033f3..aa6b2d2aa 100644 --- a/crates/ra_hir/src/ids.rs +++ b/crates/ra_hir/src/ids.rs @@ -2,7 +2,7 @@ use ra_db::{SourceRootId, LocationIntener, Cancelable, FileId}; use ra_syntax::{SourceFileNode, SyntaxKind, SyntaxNode, SyntaxNodeRef, SourceFile, AstNode, ast}; use crate::{ - MacroCallId, HirDatabase, PerNs, ModuleId, Module, Def, Function, Struct, Enum, + HirDatabase, PerNs, ModuleId, Module, Def, Function, Struct, Enum, arena::{Arena, Id}, }; @@ -77,6 +77,38 @@ impl From for HirFileId { } } +/// `MacroCallId` identifies a particular macro invocation, like +/// `println!("Hello, {}", world)`. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct MacroCallId(u32); +ra_db::impl_numeric_id!(MacroCallId); + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct MacroCallLoc { + pub(crate) source_root_id: SourceRootId, + pub(crate) module_id: ModuleId, + pub(crate) source_item_id: SourceItemId, +} + +impl MacroCallId { + pub(crate) fn loc( + self, + db: &impl AsRef>, + ) -> MacroCallLoc { + db.as_ref().id2loc(self) + } +} + +impl MacroCallLoc { + #[allow(unused)] + pub(crate) fn id( + &self, + db: &impl AsRef>, + ) -> MacroCallId { + db.as_ref().loc2id(&self) + } +} + /// Def's are a core concept of hir. A `Def` is an Item (function, module, etc) /// in a specific module. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -- cgit v1.2.3