diff options
Diffstat (limited to 'crates/ra_hir/src/ids.rs')
-rw-r--r-- | crates/ra_hir/src/ids.rs | 34 |
1 files changed, 8 insertions, 26 deletions
diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs index 95678bf70..ea13c1196 100644 --- a/crates/ra_hir/src/ids.rs +++ b/crates/ra_hir/src/ids.rs | |||
@@ -169,11 +169,7 @@ impl<N: AstNode> Hash for ItemLoc<N> { | |||
169 | 169 | ||
170 | impl<N: AstNode> Clone for ItemLoc<N> { | 170 | impl<N: AstNode> Clone for ItemLoc<N> { |
171 | fn clone(&self) -> ItemLoc<N> { | 171 | fn clone(&self) -> ItemLoc<N> { |
172 | ItemLoc { | 172 | ItemLoc { module: self.module, raw: self.raw, _ty: PhantomData } |
173 | module: self.module, | ||
174 | raw: self.raw, | ||
175 | _ty: PhantomData, | ||
176 | } | ||
177 | } | 173 | } |
178 | } | 174 | } |
179 | 175 | ||
@@ -186,11 +182,7 @@ pub(crate) struct LocationCtx<DB> { | |||
186 | 182 | ||
187 | impl<'a, DB: PersistentHirDatabase> LocationCtx<&'a DB> { | 183 | impl<'a, DB: PersistentHirDatabase> LocationCtx<&'a DB> { |
188 | pub(crate) fn new(db: &'a DB, module: Module, file_id: HirFileId) -> LocationCtx<&'a DB> { | 184 | pub(crate) fn new(db: &'a DB, module: Module, file_id: HirFileId) -> LocationCtx<&'a DB> { |
189 | LocationCtx { | 185 | LocationCtx { db, module, file_id } |
190 | db, | ||
191 | module, | ||
192 | file_id, | ||
193 | } | ||
194 | } | 186 | } |
195 | pub(crate) fn to_def<N, DEF>(self, ast: &N) -> DEF | 187 | pub(crate) fn to_def<N, DEF>(self, ast: &N) -> DEF |
196 | where | 188 | where |
@@ -205,15 +197,9 @@ pub(crate) trait AstItemDef<N: AstNode>: ArenaId + Clone { | |||
205 | fn interner(interner: &HirInterner) -> &LocationIntener<ItemLoc<N>, Self>; | 197 | fn interner(interner: &HirInterner) -> &LocationIntener<ItemLoc<N>, Self>; |
206 | fn from_ast(ctx: LocationCtx<&impl PersistentHirDatabase>, ast: &N) -> Self { | 198 | fn from_ast(ctx: LocationCtx<&impl PersistentHirDatabase>, ast: &N) -> Self { |
207 | let items = ctx.db.file_items(ctx.file_id); | 199 | let items = ctx.db.file_items(ctx.file_id); |
208 | let raw = SourceItemId { | 200 | let raw = |
209 | file_id: ctx.file_id, | 201 | SourceItemId { file_id: ctx.file_id, item_id: items.id_of(ctx.file_id, ast.syntax()) }; |
210 | item_id: items.id_of(ctx.file_id, ast.syntax()), | 202 | let loc = ItemLoc { module: ctx.module, raw, _ty: PhantomData }; |
211 | }; | ||
212 | let loc = ItemLoc { | ||
213 | module: ctx.module, | ||
214 | raw, | ||
215 | _ty: PhantomData, | ||
216 | }; | ||
217 | 203 | ||
218 | Self::interner(ctx.db.as_ref()).loc2id(&loc) | 204 | Self::interner(ctx.db.as_ref()).loc2id(&loc) |
219 | } | 205 | } |
@@ -221,9 +207,8 @@ pub(crate) trait AstItemDef<N: AstNode>: ArenaId + Clone { | |||
221 | let int = Self::interner(db.as_ref()); | 207 | let int = Self::interner(db.as_ref()); |
222 | let loc = int.id2loc(self); | 208 | let loc = int.id2loc(self); |
223 | let syntax = db.file_item(loc.raw); | 209 | let syntax = db.file_item(loc.raw); |
224 | let ast = N::cast(&syntax) | 210 | let ast = |
225 | .unwrap_or_else(|| panic!("invalid ItemLoc: {:?}", loc.raw)) | 211 | N::cast(&syntax).unwrap_or_else(|| panic!("invalid ItemLoc: {:?}", loc.raw)).to_owned(); |
226 | .to_owned(); | ||
227 | (loc.raw.file_id, ast) | 212 | (loc.raw.file_id, ast) |
228 | } | 213 | } |
229 | fn module(self, db: &impl HirDatabase) -> Module { | 214 | fn module(self, db: &impl HirDatabase) -> Module { |
@@ -317,10 +302,7 @@ pub struct SourceFileItems { | |||
317 | 302 | ||
318 | impl SourceFileItems { | 303 | impl SourceFileItems { |
319 | pub(crate) fn new(file_id: HirFileId, source_file: &SourceFile) -> SourceFileItems { | 304 | pub(crate) fn new(file_id: HirFileId, source_file: &SourceFile) -> SourceFileItems { |
320 | let mut res = SourceFileItems { | 305 | let mut res = SourceFileItems { file_id, arena: Arena::default() }; |
321 | file_id, | ||
322 | arena: Arena::default(), | ||
323 | }; | ||
324 | res.init(source_file); | 306 | res.init(source_file); |
325 | res | 307 | res |
326 | } | 308 | } |