about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Richey <davidrichey@fb.com>2024-09-26 11:58:30 -0400
committerDavid Richey <davidrichey@fb.com>2024-09-26 12:54:55 -0400
commit75ca498a488729e16d856de8fd6fd58aabf6f3d3 (patch)
treec1c2ab24c6627523eb6f713d2d10b1ea5930fac2
parent2904b35bdf82c8f73493639e7eaf81d23dbe5c23 (diff)
downloadrust-75ca498a488729e16d856de8fd6fd58aabf6f3d3.tar.gz
rust-75ca498a488729e16d856de8fd6fd58aabf6f3d3.zip
Include buildfiles in vfs
-rw-r--r--src/tools/rust-analyzer/crates/load-cargo/src/lib.rs5
-rw-r--r--src/tools/rust-analyzer/crates/project-model/src/workspace.rs11
2 files changed, 16 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/load-cargo/src/lib.rs b/src/tools/rust-analyzer/crates/load-cargo/src/lib.rs
index baa45174236..2ffefa17305 100644
--- a/src/tools/rust-analyzer/crates/load-cargo/src/lib.rs
+++ b/src/tools/rust-analyzer/crates/load-cargo/src/lib.rs
@@ -265,6 +265,11 @@ impl ProjectFolders {
                 entries.push(manifest.to_owned());
             }
 
+            for buildfile in ws.buildfiles() {
+                file_set_roots.push(VfsPath::from(buildfile.to_owned()));
+                entries.push(buildfile.to_owned());
+            }
+
             // In case of detached files we do **not** look for a rust-analyzer.toml.
             if !matches!(ws.kind, ProjectWorkspaceKind::DetachedFile { .. }) {
                 let ws_root = ws.workspace_root();
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 17b40a87cda..c05c03340eb 100644
--- a/src/tools/rust-analyzer/crates/project-model/src/workspace.rs
+++ b/src/tools/rust-analyzer/crates/project-model/src/workspace.rs
@@ -539,6 +539,17 @@ impl ProjectWorkspace {
         }
     }
 
+    pub fn buildfiles(&self) -> Vec<AbsPathBuf> {
+        match &self.kind {
+            ProjectWorkspaceKind::Json(project) => project
+                .crates()
+                .filter_map(|(_, krate)| krate.build.as_ref().map(|build| build.build_file.clone()))
+                .map(AbsPathBuf::assert)
+                .collect(),
+            _ => vec![],
+        }
+    }
+
     pub fn find_sysroot_proc_macro_srv(&self) -> anyhow::Result<AbsPathBuf> {
         self.sysroot.discover_proc_macro_srv()
     }