diff options
author | Aleksey Kladov <[email protected]> | 2019-07-08 12:09:38 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-07-08 12:09:38 +0100 |
commit | e075e096cf4970014d2c0829476fd7a45a3f32b1 (patch) | |
tree | b074a36491d838bae9405ac42f3e64ef9b4dcd60 /crates/ra_lsp_server/src/main_loop.rs | |
parent | b042faeb64d858c26b05dbf543925bf626454282 (diff) |
don't send LocationLink unless the client opts-in
closes #1474
Diffstat (limited to 'crates/ra_lsp_server/src/main_loop.rs')
-rw-r--r-- | crates/ra_lsp_server/src/main_loop.rs | 26 |
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}; | |||
8 | use gen_lsp_server::{ | 8 | use gen_lsp_server::{ |
9 | handle_shutdown, ErrorCode, RawMessage, RawNotification, RawRequest, RawResponse, | 9 | handle_shutdown, ErrorCode, RawMessage, RawNotification, RawRequest, RawResponse, |
10 | }; | 10 | }; |
11 | use lsp_types::NumberOrString; | 11 | use lsp_types::{ClientCapabilities, NumberOrString}; |
12 | use ra_ide_api::{Canceled, FileId, LibraryData}; | 12 | use ra_ide_api::{Canceled, FileId, LibraryData}; |
13 | use ra_prof::profile; | 13 | use ra_prof::profile; |
14 | use ra_vfs::VfsTask; | 14 | use 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 | ||
52 | pub fn main_loop( | 52 | pub 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 | ||
161 | fn main_loop_inner( | 174 | fn 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 | ) |