aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ids.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ids.rs')
-rw-r--r--crates/ra_hir/src/ids.rs21
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 @@
1use std::{ 1use std::{
2 marker::PhantomData, 2 marker::PhantomData,
3 hash::{Hash, Hasher}, 3 hash::{Hash, Hasher},
4 sync::Arc,
4}; 5};
5 6
6use ra_db::{LocationIntener, FileId}; 7use ra_db::{LocationIntener, FileId};
@@ -301,10 +302,24 @@ pub struct SourceFileItems {
301} 302}
302 303
303impl SourceFileItems { 304impl 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) {