about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2023-09-19 13:48:05 +0200
committerEmilio Cobos Álvarez <emilio@crisal.io>2023-09-19 13:48:05 +0200
commitc3724311236916264adaaede2e05bf4ebbf08f5f (patch)
tree02641c276e571eeac573b564a4fb8494576706f6
parent258b15c506a2d3ad862fd17ae24eaf272443f477 (diff)
downloadrust-c3724311236916264adaaede2e05bf4ebbf08f5f.tar.gz
rust-c3724311236916264adaaede2e05bf4ebbf08f5f.zip
scip: Use load_workspace_at.
This honors the build script config, and is also simpler.
-rw-r--r--crates/rust-analyzer/src/cli/scip.rs25
1 files changed, 11 insertions, 14 deletions
diff --git a/crates/rust-analyzer/src/cli/scip.rs b/crates/rust-analyzer/src/cli/scip.rs
index 8c056fff000..875b724bd89 100644
--- a/crates/rust-analyzer/src/cli/scip.rs
+++ b/crates/rust-analyzer/src/cli/scip.rs
@@ -11,10 +11,9 @@ use ide::{
     TokenStaticData,
 };
 use ide_db::LineIndexDatabase;
-use load_cargo::{load_workspace, LoadCargoConfig, ProcMacroServerChoice};
-use project_model::{CargoConfig, ProjectManifest, ProjectWorkspace, RustLibSource};
+use load_cargo::{load_workspace_at, LoadCargoConfig, ProcMacroServerChoice};
+use project_model::{CargoConfig, RustLibSource};
 use scip::types as scip_types;
-use std::env;
 
 use crate::{
     cli::flags,
@@ -34,14 +33,13 @@ impl flags::Scip {
             with_proc_macro_server: ProcMacroServerChoice::Sysroot,
             prefill_caches: true,
         };
-        let path = vfs::AbsPathBuf::assert(env::current_dir()?.join(&self.path));
-        let rootpath = path.normalize();
-        let manifest = ProjectManifest::discover_single(&path)?;
-
-        let workspace = ProjectWorkspace::load(manifest, &cargo_config, no_progress)?;
-
-        let (host, vfs, _) =
-            load_workspace(workspace, &cargo_config.extra_env, &load_cargo_config)?;
+        let root = vfs::AbsPathBuf::assert(std::env::current_dir()?.join(&self.path)).normalize();
+        let (host, vfs, _) = load_workspace_at(
+            root.as_path().as_ref(),
+            &cargo_config,
+            &load_cargo_config,
+            &no_progress,
+        )?;
         let db = host.raw_database();
         let analysis = host.analysis();
 
@@ -58,8 +56,7 @@ impl flags::Scip {
             .into(),
             project_root: format!(
                 "file://{}",
-                path.normalize()
-                    .as_os_str()
+                root.as_os_str()
                     .to_str()
                     .ok_or(anyhow::format_err!("Unable to normalize project_root path"))?
             ),
@@ -80,7 +77,7 @@ impl flags::Scip {
                 new_symbol
             };
 
-            let relative_path = match get_relative_filepath(&vfs, &rootpath, file_id) {
+            let relative_path = match get_relative_filepath(&vfs, &root, file_id) {
                 Some(relative_path) => relative_path,
                 None => continue,
             };