Disable cargo checking in workspaces with no cargo projects

This commit is contained in:
Emil Lauridsen 2020-01-11 21:32:40 +01:00
parent d6da18e99d
commit 480c44918c
2 changed files with 20 additions and 14 deletions

View File

@ -58,6 +58,12 @@ pub fn new(options: &CheckOptions, workspace_root: PathBuf) -> CheckWatcher {
CheckWatcher { task_recv, cmd_send: Some(cmd_send), handle: Some(handle), shared }
}
/// Returns a CheckWatcher that doesn't actually do anything
pub fn dummy() -> CheckWatcher {
let shared = Arc::new(RwLock::new(CheckWatcherSharedState::new()));
CheckWatcher { task_recv: never(), cmd_send: None, handle: None, shared }
}
/// Schedule a re-start of the cargo check worker.
pub fn update(&self) {
if let Some(cmd_send) = &self.cmd_send {

View File

@ -132,20 +132,20 @@ pub fn new(
change.set_crate_graph(crate_graph);
// FIXME: Figure out the multi-workspace situation
let check_watcher = {
let first_workspace = workspaces.first().unwrap();
let cargo_project_root = match first_workspace {
ProjectWorkspace::Cargo { cargo, .. } => cargo.workspace_root().to_path_buf(),
ProjectWorkspace::Json { .. } => {
log::warn!(
"Cargo check watching only supported for cargo workspaces, disabling"
);
options.cargo_watch.enable = false;
PathBuf::new()
}
};
CheckWatcher::new(&options.cargo_watch, cargo_project_root)
};
let check_watcher = workspaces
.iter()
.find_map(|w| match w {
ProjectWorkspace::Cargo { cargo, .. } => Some(cargo),
ProjectWorkspace::Json { .. } => None,
})
.map(|cargo| {
let cargo_project_root = cargo.workspace_root().to_path_buf();
CheckWatcher::new(&options.cargo_watch, cargo_project_root)
})
.unwrap_or_else(|| {
log::warn!("Cargo check watching only supported for cargo workspaces, disabling");
CheckWatcher::dummy()
});
let mut analysis_host = AnalysisHost::new(lru_capacity, feature_flags);
analysis_host.apply_change(change);