Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/project-model/src/lib.rs11
-rw-r--r--crates/project-model/src/manifest_path.rs8
-rw-r--r--crates/project-model/src/workspace.rs9
-rw-r--r--crates/rust-analyzer/src/reload.rs4
4 files changed, 30 insertions, 2 deletions
diff --git a/crates/project-model/src/lib.rs b/crates/project-model/src/lib.rs
index 61acc646f8..9685fb3f97 100644
--- a/crates/project-model/src/lib.rs
+++ b/crates/project-model/src/lib.rs
@@ -31,6 +31,7 @@ pub mod target_data_layout;
mod tests;
use std::{
+ fmt,
fs::{self, read_dir, ReadDir},
io,
process::Command,
@@ -145,6 +146,16 @@ impl ProjectManifest {
}
}
+impl fmt::Display for ProjectManifest {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match self {
+ ProjectManifest::ProjectJson(it) | ProjectManifest::CargoToml(it) => {
+ fmt::Display::fmt(&it, f)
+ }
+ }
+ }
+}
+
fn utf8_stdout(mut cmd: Command) -> Result<String> {
let output = cmd.output().with_context(|| format!("{cmd:?} failed"))?;
if !output.status.success() {
diff --git a/crates/project-model/src/manifest_path.rs b/crates/project-model/src/manifest_path.rs
index 3f60e4dd92..5ef2086fda 100644
--- a/crates/project-model/src/manifest_path.rs
+++ b/crates/project-model/src/manifest_path.rs
@@ -1,5 +1,5 @@
//! See [`ManifestPath`].
-use std::{ops, path::Path};
+use std::{fmt, ops, path::Path};
use paths::{AbsPath, AbsPathBuf};
@@ -40,6 +40,12 @@ impl ManifestPath {
}
}
+impl fmt::Display for ManifestPath {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ fmt::Display::fmt(&self.file.display(), f)
+ }
+}
+
impl ops::Deref for ManifestPath {
type Target = AbsPath;
diff --git a/crates/project-model/src/workspace.rs b/crates/project-model/src/workspace.rs
index b5fe237fc4..34e5c1a9e2 100644
--- a/crates/project-model/src/workspace.rs
+++ b/crates/project-model/src/workspace.rs
@@ -152,6 +152,15 @@ impl ProjectWorkspace {
config: &CargoConfig,
progress: &dyn Fn(String),
) -> Result<ProjectWorkspace> {
+ ProjectWorkspace::load_inner(&manifest, config, progress)
+ .with_context(|| format!("Failed to load the project at {manifest}"))
+ }
+
+ fn load_inner(
+ manifest: &ProjectManifest,
+ config: &CargoConfig,
+ progress: &dyn Fn(String),
+ ) -> Result<ProjectWorkspace> {
let version = |current_dir, cmd_path, prefix: &str| {
let cargo_version = utf8_stdout({
let mut cmd = Command::new(cmd_path);
diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs
index 310c6b076c..07e284e346 100644
--- a/crates/rust-analyzer/src/reload.rs
+++ b/crates/rust-analyzer/src/reload.rs
@@ -534,7 +534,9 @@ impl GlobalState {
pub(super) fn fetch_workspace_error(&self) -> Result<(), String> {
let mut buf = String::new();
- let Some((last_op_result, _)) = self.fetch_workspaces_queue.last_op_result() else { return Ok(()) };
+ let Some((last_op_result, _)) = self.fetch_workspaces_queue.last_op_result() else {
+ return Ok(())
+ };
if last_op_result.is_empty() {
stdx::format_to!(buf, "rust-analyzer failed to discover workspace");
} else {