aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/nameres/raw.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_def/src/nameres/raw.rs')
-rw-r--r--crates/ra_hir_def/src/nameres/raw.rs20
1 files changed, 10 insertions, 10 deletions
diff --git a/crates/ra_hir_def/src/nameres/raw.rs b/crates/ra_hir_def/src/nameres/raw.rs
index 2ec84f2cc..401af031c 100644
--- a/crates/ra_hir_def/src/nameres/raw.rs
+++ b/crates/ra_hir_def/src/nameres/raw.rs
@@ -22,7 +22,8 @@ use ra_syntax::{
22use test_utils::tested_by; 22use test_utils::tested_by;
23 23
24use crate::{ 24use crate::{
25 attr::Attrs, db::DefDatabase, path::Path, FileAstId, HirFileId, LocalImportId, Source, 25 attr::Attrs, db::DefDatabase, path::Path, trace::Trace, FileAstId, HirFileId, LocalImportId,
26 Source,
26}; 27};
27 28
28/// `RawItems` is a set of top-level items in a file (except for impls). 29/// `RawItems` is a set of top-level items in a file (except for impls).
@@ -48,10 +49,6 @@ pub struct ImportSourceMap {
48type ImportSourcePtr = Either<AstPtr<ast::UseTree>, AstPtr<ast::ExternCrateItem>>; 49type ImportSourcePtr = Either<AstPtr<ast::UseTree>, AstPtr<ast::ExternCrateItem>>;
49 50
50impl ImportSourceMap { 51impl ImportSourceMap {
51 fn insert(&mut self, import: LocalImportId, ptr: ImportSourcePtr) {
52 self.map.insert(import, ptr)
53 }
54
55 pub fn get(&self, import: LocalImportId) -> ImportSourcePtr { 52 pub fn get(&self, import: LocalImportId) -> ImportSourcePtr {
56 self.map[import].clone() 53 self.map[import].clone()
57 } 54 }
@@ -72,7 +69,7 @@ impl RawItems {
72 let mut collector = RawItemsCollector { 69 let mut collector = RawItemsCollector {
73 raw_items: RawItems::default(), 70 raw_items: RawItems::default(),
74 source_ast_id_map: db.ast_id_map(file_id), 71 source_ast_id_map: db.ast_id_map(file_id),
75 source_map: ImportSourceMap::default(), 72 imports: Trace::new(),
76 file_id, 73 file_id,
77 hygiene: Hygiene::new(db, file_id), 74 hygiene: Hygiene::new(db, file_id),
78 }; 75 };
@@ -83,7 +80,11 @@ impl RawItems {
83 collector.process_module(None, item_list); 80 collector.process_module(None, item_list);
84 } 81 }
85 } 82 }
86 (Arc::new(collector.raw_items), Arc::new(collector.source_map)) 83 let mut raw_items = collector.raw_items;
84 let (arena, map) = collector.imports.into_arena_and_map();
85 raw_items.imports = arena;
86 let source_map = ImportSourceMap { map };
87 (Arc::new(raw_items), Arc::new(source_map))
87 } 88 }
88 89
89 pub(super) fn items(&self) -> &[RawItem] { 90 pub(super) fn items(&self) -> &[RawItem] {
@@ -207,8 +208,8 @@ pub(super) struct ImplData {
207 208
208struct RawItemsCollector { 209struct RawItemsCollector {
209 raw_items: RawItems, 210 raw_items: RawItems,
211 imports: Trace<LocalImportId, ImportData, ImportSourcePtr>,
210 source_ast_id_map: Arc<AstIdMap>, 212 source_ast_id_map: Arc<AstIdMap>,
211 source_map: ImportSourceMap,
212 file_id: HirFileId, 213 file_id: HirFileId,
213 hygiene: Hygiene, 214 hygiene: Hygiene,
214} 215}
@@ -392,8 +393,7 @@ impl RawItemsCollector {
392 data: ImportData, 393 data: ImportData,
393 source: ImportSourcePtr, 394 source: ImportSourcePtr,
394 ) { 395 ) {
395 let import = self.raw_items.imports.alloc(data); 396 let import = self.imports.alloc(|| source, || data);
396 self.source_map.insert(import, source);
397 self.push_item(current_module, attrs, RawItemKind::Import(import)) 397 self.push_item(current_module, attrs, RawItemKind::Import(import))
398 } 398 }
399 399