Unnamed repository; edit this file 'description' to name the repository.
Send status notification if there are no found workspaces
Lukas Wirth 2022-11-11
parent 599142c · commit e35836e
-rw-r--r--crates/rust-analyzer/src/reload.rs19
1 files changed, 16 insertions, 3 deletions
diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs
index e1f651786d..407416d9f4 100644
--- a/crates/rust-analyzer/src/reload.rs
+++ b/crates/rust-analyzer/src/reload.rs
@@ -106,6 +106,14 @@ impl GlobalState {
status.health = lsp_ext::Health::Error;
status.message = Some(error)
}
+
+ if self.config.linked_projects().is_empty()
+ && self.config.detached_files().is_empty()
+ && self.config.notifications().cargo_toml_not_found
+ {
+ status.health = lsp_ext::Health::Warning;
+ status.message = Some("Workspace reload required".to_string())
+ }
status
}
@@ -427,9 +435,14 @@ impl GlobalState {
fn fetch_workspace_error(&self) -> Result<(), String> {
let mut buf = String::new();
- for ws in self.fetch_workspaces_queue.last_op_result() {
- if let Err(err) = ws {
- stdx::format_to!(buf, "rust-analyzer failed to load workspace: {:#}\n", err);
+ let last_op_result = self.fetch_workspaces_queue.last_op_result();
+ if last_op_result.is_empty() {
+ stdx::format_to!(buf, "rust-analyzer failed to discover workspace");
+ } else {
+ for ws in last_op_result {
+ if let Err(err) = ws {
+ stdx::format_to!(buf, "rust-analyzer failed to load workspace: {:#}\n", err);
+ }
}
}