aboutsummaryrefslogtreecommitdiff
path: root/crates/server
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-09-10 10:57:40 +0100
committerAleksey Kladov <[email protected]>2018-09-10 10:57:40 +0100
commit505895a25f98423de07c3cec4793b66a19d098c7 (patch)
tree2df3f41f33b5db0b2bba1e2d2acd08f23fffbc2a /crates/server
parent4f647096665b2ca3725ba1f7415a21fbc46044bb (diff)
store file rsovler
Diffstat (limited to 'crates/server')
-rw-r--r--crates/server/src/main_loop/mod.rs4
-rw-r--r--crates/server/src/server_world.rs31
2 files changed, 20 insertions, 15 deletions
diff --git a/crates/server/src/main_loop/mod.rs b/crates/server/src/main_loop/mod.rs
index f1297ee48..f3b2744bf 100644
--- a/crates/server/src/main_loop/mod.rs
+++ b/crates/server/src/main_loop/mod.rs
@@ -135,12 +135,12 @@ fn main_loop_inner(
135 if root == ws_root { 135 if root == ws_root {
136 state.apply_fs_changes(events); 136 state.apply_fs_changes(events);
137 } else { 137 } else {
138 let files = state.events_to_files(events); 138 let (files, resolver) = state.events_to_files(events);
139 let sender = libdata_sender.clone(); 139 let sender = libdata_sender.clone();
140 pool.spawn(move || { 140 pool.spawn(move || {
141 let start = ::std::time::Instant::now(); 141 let start = ::std::time::Instant::now();
142 info!("indexing {} ... ", root.display()); 142 info!("indexing {} ... ", root.display());
143 let data = LibraryData::prepare(files); 143 let data = LibraryData::prepare(files, resolver);
144 info!("indexed {:?} {}", start.elapsed(), root.display()); 144 info!("indexed {:?} {}", start.elapsed(), root.display());
145 sender.send(data); 145 sender.send(data);
146 }); 146 });
diff --git a/crates/server/src/server_world.rs b/crates/server/src/server_world.rs
index 8ceec594f..ffa0e74b8 100644
--- a/crates/server/src/server_world.rs
+++ b/crates/server/src/server_world.rs
@@ -6,7 +6,7 @@ use std::{
6}; 6};
7 7
8use languageserver_types::Url; 8use languageserver_types::Url;
9use libanalysis::{FileId, AnalysisHost, Analysis, CrateGraph, CrateId, LibraryData}; 9use libanalysis::{FileId, AnalysisHost, Analysis, CrateGraph, CrateId, LibraryData, FileResolver};
10 10
11use { 11use {
12 Result, 12 Result,
@@ -64,17 +64,21 @@ impl ServerWorldState {
64 64
65 self.analysis_host.change_files(changes); 65 self.analysis_host.change_files(changes);
66 } 66 }
67 pub fn events_to_files(&mut self, events: Vec<FileEvent>) -> Vec<(FileId, String)> { 67 pub fn events_to_files(&mut self, events: Vec<FileEvent>) -> (Vec<(FileId, String)>, Arc<FileResolver>) {
68 let pm = &mut self.path_map; 68 let files = {
69 events.into_iter() 69 let pm = &mut self.path_map;
70 .map(|event| { 70 events.into_iter()
71 let text = match event.kind { 71 .map(|event| {
72 FileEventKind::Add(text) => text, 72 let text = match event.kind {
73 }; 73 FileEventKind::Add(text) => text,
74 (event.path, text) 74 };
75 }) 75 (event.path, text)
76 .map(|(path, text)| (pm.get_or_insert(path, Root::Lib), text)) 76 })
77 .collect() 77 .map(|(path, text)| (pm.get_or_insert(path, Root::Lib), text))
78 .collect()
79 };
80 let resolver = Arc::new(self.path_map.clone());
81 (files, resolver)
78 } 82 }
79 pub fn add_lib(&mut self, data: LibraryData) { 83 pub fn add_lib(&mut self, data: LibraryData) {
80 self.analysis_host.add_library(data); 84 self.analysis_host.add_library(data);
@@ -82,6 +86,7 @@ impl ServerWorldState {
82 86
83 pub fn add_mem_file(&mut self, path: PathBuf, text: String) -> FileId { 87 pub fn add_mem_file(&mut self, path: PathBuf, text: String) -> FileId {
84 let file_id = self.path_map.get_or_insert(path, Root::Workspace); 88 let file_id = self.path_map.get_or_insert(path, Root::Workspace);
89 self.analysis_host.set_file_resolver(Arc::new(self.path_map.clone()));
85 self.mem_map.insert(file_id, None); 90 self.mem_map.insert(file_id, None);
86 if self.path_map.get_root(file_id) != Root::Lib { 91 if self.path_map.get_root(file_id) != Root::Lib {
87 self.analysis_host.change_file(file_id, Some(text)); 92 self.analysis_host.change_file(file_id, Some(text));
@@ -135,7 +140,7 @@ impl ServerWorldState {
135 pub fn snapshot(&self) -> ServerWorld { 140 pub fn snapshot(&self) -> ServerWorld {
136 ServerWorld { 141 ServerWorld {
137 workspaces: Arc::clone(&self.workspaces), 142 workspaces: Arc::clone(&self.workspaces),
138 analysis: self.analysis_host.analysis(self.path_map.clone()), 143 analysis: self.analysis_host.analysis(),
139 path_map: self.path_map.clone() 144 path_map: self.path_map.clone()
140 } 145 }
141 } 146 }