aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-09-04 02:13:22 +0100
committerAleksey Kladov <[email protected]>2018-09-04 02:13:22 +0100
commit4df965a002b5296fc728f1bc2fb9312fe421ea5d (patch)
tree989dfb2bbc2751d97959b4ca320cc5301b2ec4f5 /crates
parentc3e28f06463854e4711c4c49a49c77d1e136969f (diff)
work
Diffstat (limited to 'crates')
-rw-r--r--crates/libanalysis/src/roots.rs10
-rw-r--r--crates/server/src/main_loop/mod.rs9
-rw-r--r--crates/server/src/vfs.rs6
-rw-r--r--crates/server/tests/heavy_tests/main.rs2
4 files changed, 15 insertions, 12 deletions
diff --git a/crates/libanalysis/src/roots.rs b/crates/libanalysis/src/roots.rs
index f1bc72e33..6d1375f88 100644
--- a/crates/libanalysis/src/roots.rs
+++ b/crates/libanalysis/src/roots.rs
@@ -138,6 +138,11 @@ pub(crate) struct ReadonlySourceRoot {
138impl ReadonlySourceRoot { 138impl ReadonlySourceRoot {
139 pub fn new(files: Vec<(FileId, String)>) -> ReadonlySourceRoot { 139 pub fn new(files: Vec<(FileId, String)>) -> ReadonlySourceRoot {
140 let mut module_map = ModuleMap::new(); 140 let mut module_map = ModuleMap::new();
141 let symbol_index = SymbolIndex::for_files(
142 files.par_iter().map(|(file_id, text)| {
143 (*file_id, File::parse(text))
144 })
145 );
141 let file_map: HashMap<FileId, FileData> = files 146 let file_map: HashMap<FileId, FileData> = files
142 .into_iter() 147 .into_iter()
143 .map(|(id, text)| { 148 .map(|(id, text)| {
@@ -145,11 +150,6 @@ impl ReadonlySourceRoot {
145 (id, FileData::new(text)) 150 (id, FileData::new(text))
146 }) 151 })
147 .collect(); 152 .collect();
148 let symbol_index = SymbolIndex::for_files(
149 file_map.par_iter().map(|(&file_id, file_data)| {
150 (file_id, file_data.syntax_transient())
151 })
152 );
153 153
154 ReadonlySourceRoot { 154 ReadonlySourceRoot {
155 symbol_index, 155 symbol_index,
diff --git a/crates/server/src/main_loop/mod.rs b/crates/server/src/main_loop/mod.rs
index 58f6f88a7..52e3b661d 100644
--- a/crates/server/src/main_loop/mod.rs
+++ b/crates/server/src/main_loop/mod.rs
@@ -8,7 +8,7 @@ use std::{
8 8
9use threadpool::ThreadPool; 9use threadpool::ThreadPool;
10use serde::{Serialize, de::DeserializeOwned}; 10use serde::{Serialize, de::DeserializeOwned};
11use crossbeam_channel::{bounded, Sender, Receiver}; 11use crossbeam_channel::{unbounded, Sender, Receiver};
12use languageserver_types::{NumberOrString}; 12use languageserver_types::{NumberOrString};
13use libanalysis::{FileId, JobHandle, JobToken, LibraryData}; 13use libanalysis::{FileId, JobHandle, JobToken, LibraryData};
14use gen_lsp_server::{ 14use gen_lsp_server::{
@@ -38,7 +38,7 @@ pub fn main_loop(
38 msg_sender: &mut Sender<RawMessage>, 38 msg_sender: &mut Sender<RawMessage>,
39) -> Result<()> { 39) -> Result<()> {
40 let pool = ThreadPool::new(4); 40 let pool = ThreadPool::new(4);
41 let (task_sender, task_receiver) = bounded::<Task>(16); 41 let (task_sender, task_receiver) = unbounded::<Task>();
42 let (fs_sender, fs_receiver, fs_watcher) = vfs::roots_loader(); 42 let (fs_sender, fs_receiver, fs_watcher) = vfs::roots_loader();
43 let (ws_sender, ws_receiver, ws_watcher) = workspace_loader(); 43 let (ws_sender, ws_receiver, ws_watcher) = workspace_loader();
44 44
@@ -97,7 +97,7 @@ fn main_loop_inner(
97 pending_requests: &mut HashMap<u64, JobHandle>, 97 pending_requests: &mut HashMap<u64, JobHandle>,
98 subs: &mut Subscriptions, 98 subs: &mut Subscriptions,
99) -> Result<()> { 99) -> Result<()> {
100 let (libdata_sender, libdata_receiver) = bounded(1024); 100 let (libdata_sender, libdata_receiver) = unbounded();
101 ws_sender.send(ws_root.clone()); 101 ws_sender.send(ws_root.clone());
102 fs_sender.send(ws_root.clone()); 102 fs_sender.send(ws_root.clone());
103 loop { 103 loop {
@@ -137,7 +137,10 @@ fn main_loop_inner(
137 let files = state.events_to_files(events); 137 let files = state.events_to_files(events);
138 let sender = libdata_sender.clone(); 138 let sender = libdata_sender.clone();
139 pool.execute(move || { 139 pool.execute(move || {
140 let start = ::std::time::Instant::now();
141 info!("indexing {} ... ", root.display());
140 let data = LibraryData::prepare(files); 142 let data = LibraryData::prepare(files);
143 info!("indexed {:?} {}", start.elapsed(), root.display());
141 sender.send(data); 144 sender.send(data);
142 }); 145 });
143 } 146 }
diff --git a/crates/server/src/vfs.rs b/crates/server/src/vfs.rs
index 69a7654af..2699fc21e 100644
--- a/crates/server/src/vfs.rs
+++ b/crates/server/src/vfs.rs
@@ -3,7 +3,7 @@ use std::{
3 fs, 3 fs,
4}; 4};
5 5
6use crossbeam_channel::{Sender, Receiver, bounded}; 6use crossbeam_channel::{Sender, Receiver, unbounded};
7use walkdir::WalkDir; 7use walkdir::WalkDir;
8 8
9use { 9use {
@@ -23,8 +23,8 @@ pub enum FileEventKind {
23} 23}
24 24
25pub fn roots_loader() -> (Sender<PathBuf>, Receiver<(PathBuf, Vec<FileEvent>)>, ThreadWatcher) { 25pub fn roots_loader() -> (Sender<PathBuf>, Receiver<(PathBuf, Vec<FileEvent>)>, ThreadWatcher) {
26 let (path_sender, path_receiver) = bounded::<PathBuf>(2048); 26 let (path_sender, path_receiver) = unbounded::<PathBuf>();
27 let (event_sender, event_receiver) = bounded::<(PathBuf, Vec<FileEvent>)>(1); 27 let (event_sender, event_receiver) = unbounded::<(PathBuf, Vec<FileEvent>)>();
28 let thread = ThreadWatcher::spawn("roots loader", move || { 28 let thread = ThreadWatcher::spawn("roots loader", move || {
29 path_receiver 29 path_receiver
30 .into_iter() 30 .into_iter()
diff --git a/crates/server/tests/heavy_tests/main.rs b/crates/server/tests/heavy_tests/main.rs
index 66620ac62..50529f453 100644
--- a/crates/server/tests/heavy_tests/main.rs
+++ b/crates/server/tests/heavy_tests/main.rs
@@ -95,5 +95,5 @@ fn test_eggs() {}
95// extern crate regex; 95// extern crate regex;
96// "#); 96// "#);
97// server.wait_for_feedback("workspace loaded"); 97// server.wait_for_feedback("workspace loaded");
98// server.wait_for_feedback_n("library loaded", 1); 98// server.wait_for_feedback_n("library loaded", 9);
99// } 99// }