diff options
Diffstat (limited to 'crates/ra_hir/src/ids.rs')
-rw-r--r-- | crates/ra_hir/src/ids.rs | 34 |
1 files changed, 33 insertions, 1 deletions
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}; | |||
2 | use ra_syntax::{SourceFileNode, SyntaxKind, SyntaxNode, SyntaxNodeRef, SourceFile, AstNode, ast}; | 2 | use ra_syntax::{SourceFileNode, SyntaxKind, SyntaxNode, SyntaxNodeRef, SourceFile, AstNode, ast}; |
3 | 3 | ||
4 | use crate::{ | 4 | use crate::{ |
5 | MacroCallId, HirDatabase, PerNs, ModuleId, Module, Def, Function, Struct, Enum, | 5 | HirDatabase, PerNs, ModuleId, Module, Def, Function, Struct, Enum, |
6 | arena::{Arena, Id}, | 6 | arena::{Arena, Id}, |
7 | }; | 7 | }; |
8 | 8 | ||
@@ -77,6 +77,38 @@ impl From<MacroCallId> for HirFileId { | |||
77 | } | 77 | } |
78 | } | 78 | } |
79 | 79 | ||
80 | /// `MacroCallId` identifies a particular macro invocation, like | ||
81 | /// `println!("Hello, {}", world)`. | ||
82 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
83 | pub struct MacroCallId(u32); | ||
84 | ra_db::impl_numeric_id!(MacroCallId); | ||
85 | |||
86 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
87 | pub struct MacroCallLoc { | ||
88 | pub(crate) source_root_id: SourceRootId, | ||
89 | pub(crate) module_id: ModuleId, | ||
90 | pub(crate) source_item_id: SourceItemId, | ||
91 | } | ||
92 | |||
93 | impl MacroCallId { | ||
94 | pub(crate) fn loc( | ||
95 | self, | ||
96 | db: &impl AsRef<LocationIntener<MacroCallLoc, MacroCallId>>, | ||
97 | ) -> MacroCallLoc { | ||
98 | db.as_ref().id2loc(self) | ||
99 | } | ||
100 | } | ||
101 | |||
102 | impl MacroCallLoc { | ||
103 | #[allow(unused)] | ||
104 | pub(crate) fn id( | ||
105 | &self, | ||
106 | db: &impl AsRef<LocationIntener<MacroCallLoc, MacroCallId>>, | ||
107 | ) -> MacroCallId { | ||
108 | db.as_ref().loc2id(&self) | ||
109 | } | ||
110 | } | ||
111 | |||
80 | /// Def's are a core concept of hir. A `Def` is an Item (function, module, etc) | 112 | /// Def's are a core concept of hir. A `Def` is an Item (function, module, etc) |
81 | /// in a specific module. | 113 | /// in a specific module. |
82 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | 114 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |