diff options
Diffstat (limited to 'crates/ra_hir/src/ids.rs')
-rw-r--r-- | crates/ra_hir/src/ids.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs index ea13c1196..d3fa7d266 100644 --- a/crates/ra_hir/src/ids.rs +++ b/crates/ra_hir/src/ids.rs | |||
@@ -1,6 +1,7 @@ | |||
1 | use std::{ | 1 | use std::{ |
2 | marker::PhantomData, | 2 | marker::PhantomData, |
3 | hash::{Hash, Hasher}, | 3 | hash::{Hash, Hasher}, |
4 | sync::Arc, | ||
4 | }; | 5 | }; |
5 | 6 | ||
6 | use ra_db::{LocationIntener, FileId}; | 7 | use ra_db::{LocationIntener, FileId}; |
@@ -301,10 +302,24 @@ pub struct SourceFileItems { | |||
301 | } | 302 | } |
302 | 303 | ||
303 | impl SourceFileItems { | 304 | impl SourceFileItems { |
304 | pub(crate) fn new(file_id: HirFileId, source_file: &SourceFile) -> SourceFileItems { | 305 | pub(crate) fn file_items_query( |
306 | db: &impl PersistentHirDatabase, | ||
307 | file_id: HirFileId, | ||
308 | ) -> Arc<SourceFileItems> { | ||
309 | let source_file = db.hir_parse(file_id); | ||
305 | let mut res = SourceFileItems { file_id, arena: Arena::default() }; | 310 | let mut res = SourceFileItems { file_id, arena: Arena::default() }; |
306 | res.init(source_file); | 311 | res.init(&source_file); |
307 | res | 312 | Arc::new(res) |
313 | } | ||
314 | |||
315 | pub(crate) fn file_item_query( | ||
316 | db: &impl PersistentHirDatabase, | ||
317 | source_item_id: SourceItemId, | ||
318 | ) -> TreeArc<SyntaxNode> { | ||
319 | let source_file = db.hir_parse(source_item_id.file_id); | ||
320 | db.file_items(source_item_id.file_id)[source_item_id.item_id] | ||
321 | .to_node(&source_file) | ||
322 | .to_owned() | ||
308 | } | 323 | } |
309 | 324 | ||
310 | fn init(&mut self, source_file: &SourceFile) { | 325 | fn init(&mut self, source_file: &SourceFile) { |