diff options
-rw-r--r-- | crates/ra_cargo_watch/src/lib.rs | 6 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/world.rs | 28 |
2 files changed, 20 insertions, 14 deletions
diff --git a/crates/ra_cargo_watch/src/lib.rs b/crates/ra_cargo_watch/src/lib.rs index 9bc0fd405..cb0856aa4 100644 --- a/crates/ra_cargo_watch/src/lib.rs +++ b/crates/ra_cargo_watch/src/lib.rs | |||
@@ -58,6 +58,12 @@ impl CheckWatcher { | |||
58 | CheckWatcher { task_recv, cmd_send: Some(cmd_send), handle: Some(handle), shared } | 58 | CheckWatcher { task_recv, cmd_send: Some(cmd_send), handle: Some(handle), shared } |
59 | } | 59 | } |
60 | 60 | ||
61 | /// Returns a CheckWatcher that doesn't actually do anything | ||
62 | pub fn dummy() -> CheckWatcher { | ||
63 | let shared = Arc::new(RwLock::new(CheckWatcherSharedState::new())); | ||
64 | CheckWatcher { task_recv: never(), cmd_send: None, handle: None, shared } | ||
65 | } | ||
66 | |||
61 | /// Schedule a re-start of the cargo check worker. | 67 | /// Schedule a re-start of the cargo check worker. |
62 | pub fn update(&self) { | 68 | pub fn update(&self) { |
63 | if let Some(cmd_send) = &self.cmd_send { | 69 | if let Some(cmd_send) = &self.cmd_send { |
diff --git a/crates/ra_lsp_server/src/world.rs b/crates/ra_lsp_server/src/world.rs index cea18937f..a52bd2633 100644 --- a/crates/ra_lsp_server/src/world.rs +++ b/crates/ra_lsp_server/src/world.rs | |||
@@ -132,20 +132,20 @@ impl WorldState { | |||
132 | change.set_crate_graph(crate_graph); | 132 | change.set_crate_graph(crate_graph); |
133 | 133 | ||
134 | // FIXME: Figure out the multi-workspace situation | 134 | // FIXME: Figure out the multi-workspace situation |
135 | let check_watcher = { | 135 | let check_watcher = workspaces |
136 | let first_workspace = workspaces.first().unwrap(); | 136 | .iter() |
137 | let cargo_project_root = match first_workspace { | 137 | .find_map(|w| match w { |
138 | ProjectWorkspace::Cargo { cargo, .. } => cargo.workspace_root().to_path_buf(), | 138 | ProjectWorkspace::Cargo { cargo, .. } => Some(cargo), |
139 | ProjectWorkspace::Json { .. } => { | 139 | ProjectWorkspace::Json { .. } => None, |
140 | log::warn!( | 140 | }) |
141 | "Cargo check watching only supported for cargo workspaces, disabling" | 141 | .map(|cargo| { |
142 | ); | 142 | let cargo_project_root = cargo.workspace_root().to_path_buf(); |
143 | options.cargo_watch.enable = false; | 143 | CheckWatcher::new(&options.cargo_watch, cargo_project_root) |
144 | PathBuf::new() | 144 | }) |
145 | } | 145 | .unwrap_or_else(|| { |
146 | }; | 146 | log::warn!("Cargo check watching only supported for cargo workspaces, disabling"); |
147 | CheckWatcher::new(&options.cargo_watch, cargo_project_root) | 147 | CheckWatcher::dummy() |
148 | }; | 148 | }); |
149 | 149 | ||
150 | let mut analysis_host = AnalysisHost::new(lru_capacity, feature_flags); | 150 | let mut analysis_host = AnalysisHost::new(lru_capacity, feature_flags); |
151 | analysis_host.apply_change(change); | 151 | analysis_host.apply_change(change); |