From 5ba645c0094c79d9aab527f0396fdad3e99bef3b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 3 Sep 2018 21:26:59 +0300 Subject: index libraies off the main thread --- crates/libanalysis/src/imp.rs | 5 ++--- crates/libanalysis/src/lib.rs | 16 ++++++++++++++-- crates/libanalysis/src/roots.rs | 3 ++- 3 files changed, 18 insertions(+), 6 deletions(-) (limited to 'crates/libanalysis/src') diff --git a/crates/libanalysis/src/imp.rs b/crates/libanalysis/src/imp.rs index 3ea27947e..50855551e 100644 --- a/crates/libanalysis/src/imp.rs +++ b/crates/libanalysis/src/imp.rs @@ -57,9 +57,8 @@ impl AnalysisHostImpl { } self.data_mut().crate_graph = graph; } - pub fn add_library(&mut self, files: impl Iterator) { - let libs = ReadonlySourceRoot::new(files); - self.data_mut().libs.push(Arc::new(libs)); + pub fn add_library(&mut self, root: ReadonlySourceRoot) { + self.data_mut().libs.push(Arc::new(root)); } fn data_mut(&mut self) -> &mut WorldData { Arc::make_mut(&mut self.data) diff --git a/crates/libanalysis/src/lib.rs b/crates/libanalysis/src/lib.rs index e9e0c51d5..a8152939b 100644 --- a/crates/libanalysis/src/lib.rs +++ b/crates/libanalysis/src/lib.rs @@ -68,8 +68,8 @@ impl AnalysisHost { pub fn set_crate_graph(&mut self, graph: CrateGraph) { self.imp.set_crate_graph(graph) } - pub fn add_library(&mut self, files: impl Iterator) { - self.imp.add_library(files) + pub fn add_library(&mut self, data: LibraryData) { + self.imp.add_library(data.root) } } @@ -216,3 +216,15 @@ impl Analysis { self.imp.diagnostics(file_id) } } + +#[derive(Debug)] +pub struct LibraryData { + root: roots::ReadonlySourceRoot +} + +impl LibraryData { + pub fn prepare(files: Vec<(FileId, String)>) -> LibraryData { + let root = roots::ReadonlySourceRoot::new(files); + LibraryData { root } + } +} diff --git a/crates/libanalysis/src/roots.rs b/crates/libanalysis/src/roots.rs index a65668c9b..f1bc72e33 100644 --- a/crates/libanalysis/src/roots.rs +++ b/crates/libanalysis/src/roots.rs @@ -136,9 +136,10 @@ pub(crate) struct ReadonlySourceRoot { } impl ReadonlySourceRoot { - pub fn new(files: impl Iterator) -> ReadonlySourceRoot { + pub fn new(files: Vec<(FileId, String)>) -> ReadonlySourceRoot { let mut module_map = ModuleMap::new(); let file_map: HashMap = files + .into_iter() .map(|(id, text)| { module_map.update_file(id, ChangeKind::Insert); (id, FileData::new(text)) -- cgit v1.2.3