Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/project-model/src/workspace.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/crates/project-model/src/workspace.rs b/crates/project-model/src/workspace.rs
index d1e53e12ee..2158485a33 100644
--- a/crates/project-model/src/workspace.rs
+++ b/crates/project-model/src/workspace.rs
@@ -4,7 +4,7 @@
use std::{collections::VecDeque, fmt, fs, process::Command, sync::Arc};
-use anyhow::{format_err, Context, Result};
+use anyhow::{bail, format_err, Context, Result};
use base_db::{
CrateDisplayName, CrateGraph, CrateId, CrateName, CrateOrigin, Dependency, Edition, Env,
FileId, LangCrateOrigin, ProcMacroLoadResult, TargetLayoutLoadResult,
@@ -154,6 +154,12 @@ impl ProjectWorkspace {
) -> Result<ProjectWorkspace> {
let res = match manifest {
ProjectManifest::ProjectJson(project_json) => {
+ let metadata = fs::symlink_metadata(&project_json).with_context(|| {
+ format!("Failed to read json file {}", project_json.display())
+ })?;
+ if metadata.is_symlink() {
+ bail!("The project-json may not currently point to a symlink");
+ }
let file = fs::read_to_string(&project_json).with_context(|| {
format!("Failed to read json file {}", project_json.display())
})?;