about summary refs log tree commit diff
path: root/src/tools/rust-analyzer/crates/project-model
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2024-06-09 12:54:50 +0200
committerLukas Wirth <lukastw97@gmail.com>2024-06-09 12:54:50 +0200
commit7053aed3dc1c097e8d84679e8714922e5a5e3c2d (patch)
tree76bdcb22d9a67fac213c0c8db9d4789974f0b7c3 /src/tools/rust-analyzer/crates/project-model
parent3243ea0c2ba86b1431286befa84cff19e032262a (diff)
Register virtual workspace Cargo.toml files in the VFS
Diffstat (limited to 'src/tools/rust-analyzer/crates/project-model')
-rw-r--r--src/tools/rust-analyzer/crates/project-model/src/project_json.rs5
-rw-r--r--src/tools/rust-analyzer/crates/project-model/src/workspace.rs10
2 files changed, 15 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/project-model/src/project_json.rs b/src/tools/rust-analyzer/crates/project-model/src/project_json.rs
index 5bee446f619..408593ea8a6 100644
--- a/src/tools/rust-analyzer/crates/project-model/src/project_json.rs
+++ b/src/tools/rust-analyzer/crates/project-model/src/project_json.rs
@@ -167,6 +167,11 @@ impl ProjectJson {
         &self.project_root
     }
 
+    /// Returns the path to the project's manifest file, if it exists.
+    pub fn manifest(&self) -> Option<&ManifestPath> {
+        self.manifest.as_ref()
+    }
+
     /// Returns the path to the project's manifest or root folder, if no manifest exists.
     pub fn manifest_or_root(&self) -> &AbsPath {
         self.manifest.as_ref().map_or(&self.project_root, |manifest| manifest.as_ref())
diff --git a/src/tools/rust-analyzer/crates/project-model/src/workspace.rs b/src/tools/rust-analyzer/crates/project-model/src/workspace.rs
index 6b18b768cd8..4dba11eac3f 100644
--- a/src/tools/rust-analyzer/crates/project-model/src/workspace.rs
+++ b/src/tools/rust-analyzer/crates/project-model/src/workspace.rs
@@ -527,6 +527,16 @@ impl ProjectWorkspace {
         }
     }
 
+    pub fn manifest(&self) -> Option<&ManifestPath> {
+        match &self.kind {
+            ProjectWorkspaceKind::Cargo { cargo, .. } => Some(cargo.manifest_path()),
+            ProjectWorkspaceKind::Json(project) => project.manifest(),
+            ProjectWorkspaceKind::DetachedFile { cargo, .. } => {
+                Some(cargo.as_ref()?.0.manifest_path())
+            }
+        }
+    }
+
     pub fn find_sysroot_proc_macro_srv(&self) -> anyhow::Result<AbsPathBuf> {
         self.sysroot.discover_proc_macro_srv()
     }