aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/lib.rs')
-rw-r--r--crates/ra_hir/src/lib.rs21
1 files changed, 14 insertions, 7 deletions
diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs
index 4c67921bd..1219b9fba 100644
--- a/crates/ra_hir/src/lib.rs
+++ b/crates/ra_hir/src/lib.rs
@@ -57,11 +57,18 @@ pub use self::function::FnSignatureInfo;
57 57
58/// An `MFileId` is like a `FileId`, but it can also refer to code generated by 58/// An `MFileId` is like a `FileId`, but it can also refer to code generated by
59/// macros. 59/// macros.
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
60pub enum MFileId { 61pub enum MFileId {
61 File(FileId), 62 File(FileId),
62 Macro(MacroCallId), 63 Macro(MacroCallId),
63} 64}
64 65
66impl From<FileId> for MFileId {
67 fn from(file_id: FileId) -> MFileId {
68 MFileId::File(file_id)
69 }
70}
71
65/// Def's are a core concept of hir. A `Def` is an Item (function, module, etc) 72/// Def's are a core concept of hir. A `Def` is an Item (function, module, etc)
66/// in a specific module. 73/// in a specific module.
67#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 74#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
@@ -163,7 +170,7 @@ pub(crate) type SourceFileItemId = Id<SyntaxNode>;
163 170
164#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 171#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
165pub struct SourceItemId { 172pub struct SourceItemId {
166 file_id: FileId, 173 mfile_id: MFileId,
167 /// None for the whole file. 174 /// None for the whole file.
168 item_id: Option<SourceFileItemId>, 175 item_id: Option<SourceFileItemId>,
169} 176}
@@ -171,14 +178,14 @@ pub struct SourceItemId {
171/// Maps item's `SyntaxNode`s to `SourceFileItemId` and back. 178/// Maps item's `SyntaxNode`s to `SourceFileItemId` and back.
172#[derive(Debug, PartialEq, Eq)] 179#[derive(Debug, PartialEq, Eq)]
173pub struct SourceFileItems { 180pub struct SourceFileItems {
174 file_id: FileId, 181 mfile_id: MFileId,
175 arena: Arena<SyntaxNode>, 182 arena: Arena<SyntaxNode>,
176} 183}
177 184
178impl SourceFileItems { 185impl SourceFileItems {
179 fn new(file_id: FileId, source_file: SourceFile) -> SourceFileItems { 186 fn new(mfile_id: MFileId, source_file: SourceFile) -> SourceFileItems {
180 let mut res = SourceFileItems { 187 let mut res = SourceFileItems {
181 file_id, 188 mfile_id,
182 arena: Arena::default(), 189 arena: Arena::default(),
183 }; 190 };
184 res.init(source_file); 191 res.init(source_file);
@@ -198,11 +205,11 @@ impl SourceFileItems {
198 fn alloc(&mut self, item: SyntaxNode) -> SourceFileItemId { 205 fn alloc(&mut self, item: SyntaxNode) -> SourceFileItemId {
199 self.arena.alloc(item) 206 self.arena.alloc(item)
200 } 207 }
201 pub fn id_of(&self, file_id: FileId, item: SyntaxNodeRef) -> SourceFileItemId { 208 pub fn id_of(&self, mfile_id: MFileId, item: SyntaxNodeRef) -> SourceFileItemId {
202 assert_eq!( 209 assert_eq!(
203 self.file_id, file_id, 210 self.mfile_id, mfile_id,
204 "SourceFileItems: wrong file, expected {:?}, got {:?}", 211 "SourceFileItems: wrong file, expected {:?}, got {:?}",
205 self.file_id, file_id 212 self.mfile_id, mfile_id
206 ); 213 );
207 self.id_of_unchecked(item) 214 self.id_of_unchecked(item)
208 } 215 }