Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/load-cargo/src/lib.rs')
-rw-r--r--crates/load-cargo/src/lib.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/crates/load-cargo/src/lib.rs b/crates/load-cargo/src/lib.rs
index 128e86f1d6..10c41fda75 100644
--- a/crates/load-cargo/src/lib.rs
+++ b/crates/load-cargo/src/lib.rs
@@ -15,7 +15,7 @@ use ide_db::{
};
use itertools::Itertools;
use proc_macro_api::{MacroDylib, ProcMacroServer};
-use project_model::{CargoConfig, PackageRoot, ProjectManifest, ProjectWorkspace};
+use project_model::{CargoConfig, ManifestPath, PackageRoot, ProjectManifest, ProjectWorkspace};
use span::Span;
use tracing::instrument;
use vfs::{file_set::FileSetConfig, loader::Handle, AbsPath, AbsPathBuf, VfsPath};
@@ -238,6 +238,19 @@ impl ProjectFolders {
fsc.add_file_set(file_set_roots)
}
+ // register the workspace manifest as well, note that this currently causes duplicates for
+ // non-virtual cargo workspaces! We ought to fix that
+ for manifest in workspaces.iter().filter_map(|ws| ws.manifest().map(ManifestPath::as_ref)) {
+ let file_set_roots: Vec<VfsPath> = vec![VfsPath::from(manifest.to_owned())];
+
+ let entry = vfs::loader::Entry::Files(vec![manifest.to_owned()]);
+
+ res.watch.push(res.load.len());
+ res.load.push(entry);
+ local_filesets.push(fsc.len() as u64);
+ fsc.add_file_set(file_set_roots)
+ }
+
let fsc = fsc.build();
res.source_root_config = SourceRootConfig { fsc, local_filesets };