aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_lsp_server/src/main_loop.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_lsp_server/src/main_loop.rs')
-rw-r--r--crates/ra_lsp_server/src/main_loop.rs26
1 files changed, 19 insertions, 7 deletions
diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs
index c44fc6603..f7becd8fb 100644
--- a/crates/ra_lsp_server/src/main_loop.rs
+++ b/crates/ra_lsp_server/src/main_loop.rs
@@ -8,7 +8,7 @@ use crossbeam_channel::{select, unbounded, Receiver, RecvError, Sender};
8use gen_lsp_server::{ 8use gen_lsp_server::{
9 handle_shutdown, ErrorCode, RawMessage, RawNotification, RawRequest, RawResponse, 9 handle_shutdown, ErrorCode, RawMessage, RawNotification, RawRequest, RawResponse,
10}; 10};
11use lsp_types::NumberOrString; 11use lsp_types::{ClientCapabilities, NumberOrString};
12use ra_ide_api::{Canceled, FileId, LibraryData}; 12use ra_ide_api::{Canceled, FileId, LibraryData};
13use ra_prof::profile; 13use ra_prof::profile;
14use ra_vfs::VfsTask; 14use ra_vfs::VfsTask;
@@ -22,7 +22,7 @@ use crate::{
22 }, 22 },
23 project_model::workspace_loader, 23 project_model::workspace_loader,
24 req, 24 req,
25 world::{WorldSnapshot, WorldState}, 25 world::{Options, WorldSnapshot, WorldState},
26 InitializationOptions, Result, 26 InitializationOptions, Result,
27}; 27};
28 28
@@ -51,6 +51,7 @@ impl Error for LspError {}
51 51
52pub fn main_loop( 52pub fn main_loop(
53 ws_roots: Vec<PathBuf>, 53 ws_roots: Vec<PathBuf>,
54 client_caps: ClientCapabilities,
54 options: InitializationOptions, 55 options: InitializationOptions,
55 msg_receiver: &Receiver<RawMessage>, 56 msg_receiver: &Receiver<RawMessage>,
56 msg_sender: &Sender<RawMessage>, 57 msg_sender: &Sender<RawMessage>,
@@ -77,7 +78,20 @@ pub fn main_loop(
77 loaded_workspaces 78 loaded_workspaces
78 }; 79 };
79 80
80 let mut state = WorldState::new(ws_roots, workspaces, options.lru_capacity); 81 let mut state = WorldState::new(
82 ws_roots,
83 workspaces,
84 options.lru_capacity,
85 Options {
86 publish_decorations: options.publish_decorations,
87 show_workspace_loaded: options.show_workspace_loaded,
88 supports_location_link: client_caps
89 .text_document
90 .and_then(|it| it.definition)
91 .and_then(|it| it.link_support)
92 .unwrap_or(false),
93 },
94 );
81 95
82 let pool = ThreadPool::new(THREADPOOL_SIZE); 96 let pool = ThreadPool::new(THREADPOOL_SIZE);
83 let (task_sender, task_receiver) = unbounded::<Task>(); 97 let (task_sender, task_receiver) = unbounded::<Task>();
@@ -85,7 +99,6 @@ pub fn main_loop(
85 99
86 log::info!("server initialized, serving requests"); 100 log::info!("server initialized, serving requests");
87 let main_res = main_loop_inner( 101 let main_res = main_loop_inner(
88 options,
89 &pool, 102 &pool,
90 msg_sender, 103 msg_sender,
91 msg_receiver, 104 msg_receiver,
@@ -159,7 +172,6 @@ impl fmt::Debug for Event {
159} 172}
160 173
161fn main_loop_inner( 174fn main_loop_inner(
162 options: InitializationOptions,
163 pool: &ThreadPool, 175 pool: &ThreadPool,
164 msg_sender: &Sender<RawMessage>, 176 msg_sender: &Sender<RawMessage>,
165 msg_receiver: &Receiver<RawMessage>, 177 msg_receiver: &Receiver<RawMessage>,
@@ -258,7 +270,7 @@ fn main_loop_inner(
258 && in_flight_libraries == 0 270 && in_flight_libraries == 0
259 { 271 {
260 let n_packages: usize = state.workspaces.iter().map(|it| it.count()).sum(); 272 let n_packages: usize = state.workspaces.iter().map(|it| it.count()).sum();
261 if options.show_workspace_loaded { 273 if state.options.show_workspace_loaded {
262 let msg = format!("workspace loaded, {} rust packages", n_packages); 274 let msg = format!("workspace loaded, {} rust packages", n_packages);
263 show_message(req::MessageType::Info, msg, msg_sender); 275 show_message(req::MessageType::Info, msg, msg_sender);
264 } 276 }
@@ -270,7 +282,7 @@ fn main_loop_inner(
270 update_file_notifications_on_threadpool( 282 update_file_notifications_on_threadpool(
271 pool, 283 pool,
272 state.snapshot(), 284 state.snapshot(),
273 options.publish_decorations, 285 state.options.publish_decorations,
274 task_sender.clone(), 286 task_sender.clone(),
275 subs.subscriptions(), 287 subs.subscriptions(),
276 ) 288 )