about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2025-03-16 09:43:25 +0000
committerGitHub <noreply@github.com>2025-03-16 09:43:25 +0000
commitf7e883a0ccbbca63e2cd14ef12e03d1eb00506b8 (patch)
treec5c0e8a0c34b3f0c69de83119485a117a219474c /src
parentfcd6e9418627f9eed2d08d0855b88904c08a2f83 (diff)
parentcd0582c1e1856846811c349e8a90a63a3372e1c4 (diff)
downloadrust-f7e883a0ccbbca63e2cd14ef12e03d1eb00506b8.tar.gz
rust-f7e883a0ccbbca63e2cd14ef12e03d1eb00506b8.zip
Merge pull request #19368 from Veykril/push-pkooqmlxszps
refactor: Remove `CrateGraphBuilder::iter_mut`
Diffstat (limited to 'src')
-rw-r--r--src/tools/rust-analyzer/crates/base-db/src/input.rs14
-rw-r--r--src/tools/rust-analyzer/crates/cfg/src/lib.rs2
-rw-r--r--src/tools/rust-analyzer/crates/hir-def/src/expander.rs7
-rw-r--r--src/tools/rust-analyzer/crates/hir-def/src/expr_store/lower.rs4
-rw-r--r--src/tools/rust-analyzer/crates/hir-def/src/nameres/assoc.rs4
-rw-r--r--src/tools/rust-analyzer/crates/hir-def/src/nameres/tests/incremental.rs2
-rw-r--r--src/tools/rust-analyzer/crates/hir-ty/src/display.rs2
-rw-r--r--src/tools/rust-analyzer/crates/hir/src/lib.rs4
-rw-r--r--src/tools/rust-analyzer/crates/ide/src/lib.rs2
-rw-r--r--src/tools/rust-analyzer/crates/project-model/src/cargo_workspace.rs8
-rw-r--r--src/tools/rust-analyzer/crates/project-model/src/sysroot.rs2
-rw-r--r--src/tools/rust-analyzer/crates/project-model/src/tests.rs32
-rw-r--r--src/tools/rust-analyzer/crates/project-model/src/workspace.rs86
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/alloc/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/core/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/panic_abort/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/panic_unwind/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/proc_macro/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/profiler_builtins/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/std/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/stdarch/crates/std_detect/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/term/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/test/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/unwind/src/lib.rs0
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model.txt30
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model_with_selective_overrides.txt30
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model_with_wildcard_overrides.txt30
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/output/rust_project_cfg_groups.txt601
-rw-r--r--src/tools/rust-analyzer/crates/project-model/test_data/output/rust_project_hello_world_project_model.txt554
-rw-r--r--src/tools/rust-analyzer/crates/query-group-macro/tests/logger_db.rs2
-rw-r--r--src/tools/rust-analyzer/crates/test-fixture/src/lib.rs4
31 files changed, 97 insertions, 1323 deletions
diff --git a/src/tools/rust-analyzer/crates/base-db/src/input.rs b/src/tools/rust-analyzer/crates/base-db/src/input.rs
index 564697facf6..2fe4f688f56 100644
--- a/src/tools/rust-analyzer/crates/base-db/src/input.rs
+++ b/src/tools/rust-analyzer/crates/base-db/src/input.rs
@@ -89,7 +89,7 @@ impl ops::Index<CrateBuilderId> for CrateGraphBuilder {
 pub struct CrateBuilder {
     pub basic: CrateDataBuilder,
     pub extra: ExtraCrateData,
-    pub cfg_options: Arc<CfgOptions>,
+    pub cfg_options: CfgOptions,
     pub env: Env,
     ws_data: Arc<CrateWorkspaceData>,
 }
@@ -311,6 +311,7 @@ pub struct CrateData<Id> {
 pub type CrateDataBuilder = CrateData<CrateBuilderId>;
 pub type BuiltCrateData = CrateData<Crate>;
 
+/// Crate data unrelated to analysis.
 #[derive(Debug, Clone, PartialEq, Eq)]
 pub struct ExtraCrateData {
     pub version: Option<String>,
@@ -402,9 +403,8 @@ pub struct Crate {
     // This is in `Arc` because it is shared for all crates in a workspace.
     #[return_ref]
     pub workspace_data: Arc<CrateWorkspaceData>,
-    // FIXME: Remove this `Arc`.
     #[return_ref]
-    pub cfg_options: Arc<CfgOptions>,
+    pub cfg_options: CfgOptions,
     #[return_ref]
     pub env: Env,
 }
@@ -420,7 +420,7 @@ impl CrateGraphBuilder {
         edition: Edition,
         display_name: Option<CrateDisplayName>,
         version: Option<String>,
-        cfg_options: Arc<CfgOptions>,
+        cfg_options: CfgOptions,
         potential_cfg_options: Option<CfgOptions>,
         mut env: Env,
         origin: CrateOrigin,
@@ -601,12 +601,6 @@ impl CrateGraphBuilder {
         self.arena.iter().map(|(idx, _)| idx)
     }
 
-    // FIXME: used for fixing up the toolchain sysroot, should be removed and done differently
-    #[doc(hidden)]
-    pub fn iter_mut(&mut self) -> impl Iterator<Item = (CrateBuilderId, &mut CrateBuilder)> + '_ {
-        self.arena.iter_mut()
-    }
-
     /// Returns an iterator over all transitive dependencies of the given crate,
     /// including the crate itself.
     pub fn transitive_deps(&self, of: CrateBuilderId) -> impl Iterator<Item = CrateBuilderId> {
diff --git a/src/tools/rust-analyzer/crates/cfg/src/lib.rs b/src/tools/rust-analyzer/crates/cfg/src/lib.rs
index 8218a815560..86a7ea99007 100644
--- a/src/tools/rust-analyzer/crates/cfg/src/lib.rs
+++ b/src/tools/rust-analyzer/crates/cfg/src/lib.rs
@@ -264,7 +264,7 @@ impl fmt::Display for InactiveReason {
 }
 
 /// A `CfgOptions` that implements `Hash`, for the sake of hashing only.
-#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
 pub struct HashableCfgOptions {
     _enabled: Box<[CfgAtom]>,
 }
diff --git a/src/tools/rust-analyzer/crates/hir-def/src/expander.rs b/src/tools/rust-analyzer/crates/hir-def/src/expander.rs
index 895b8279679..16cf969b880 100644
--- a/src/tools/rust-analyzer/crates/hir-def/src/expander.rs
+++ b/src/tools/rust-analyzer/crates/hir-def/src/expander.rs
@@ -11,7 +11,6 @@ use hir_expand::{
 };
 use span::{Edition, SyntaxContext};
 use syntax::{Parse, ast};
-use triomphe::Arc;
 
 use crate::type_ref::{TypesMap, TypesSourceMap};
 use crate::{
@@ -21,7 +20,6 @@ use crate::{
 
 #[derive(Debug)]
 pub struct Expander {
-    cfg_options: Arc<CfgOptions>,
     span_map: OnceCell<SpanMap>,
     current_file_id: HirFileId,
     pub(crate) module: ModuleId,
@@ -44,7 +42,6 @@ impl Expander {
             module,
             recursion_depth: 0,
             recursion_limit,
-            cfg_options: Arc::clone(module.krate.cfg_options(db)),
             span_map: OnceCell::new(),
         }
     }
@@ -141,8 +138,8 @@ impl Expander {
         )
     }
 
-    pub(crate) fn cfg_options(&self) -> &CfgOptions {
-        &self.cfg_options
+    pub(crate) fn cfg_options<'db>(&self, db: &'db dyn DefDatabase) -> &'db CfgOptions {
+        self.module.krate.cfg_options(db)
     }
 
     pub fn current_file_id(&self) -> HirFileId {
diff --git a/src/tools/rust-analyzer/crates/hir-def/src/expr_store/lower.rs b/src/tools/rust-analyzer/crates/hir-def/src/expr_store/lower.rs
index fe1a5e8f29d..86f31dcaf00 100644
--- a/src/tools/rust-analyzer/crates/hir-def/src/expr_store/lower.rs
+++ b/src/tools/rust-analyzer/crates/hir-def/src/expr_store/lower.rs
@@ -1894,14 +1894,14 @@ impl ExprCollector<'_> {
     fn check_cfg(&mut self, owner: &dyn ast::HasAttrs) -> Option<()> {
         match self.expander.parse_attrs(self.db, owner).cfg() {
             Some(cfg) => {
-                if self.expander.cfg_options().check(&cfg) != Some(false) {
+                if self.expander.cfg_options(self.db).check(&cfg) != Some(false) {
                     return Some(());
                 }
 
                 self.source_map.diagnostics.push(ExpressionStoreDiagnostics::InactiveCode {
                     node: self.expander.in_file(SyntaxNodePtr::new(owner.syntax())),
                     cfg,
-                    opts: self.expander.cfg_options().clone(),
+                    opts: self.expander.cfg_options(self.db).clone(),
                 });
 
                 None
diff --git a/src/tools/rust-analyzer/crates/hir-def/src/nameres/assoc.rs b/src/tools/rust-analyzer/crates/hir-def/src/nameres/assoc.rs
index 1b3d10f098b..eb7f8b0061d 100644
--- a/src/tools/rust-analyzer/crates/hir-def/src/nameres/assoc.rs
+++ b/src/tools/rust-analyzer/crates/hir-def/src/nameres/assoc.rs
@@ -167,13 +167,13 @@ impl<'a> AssocItemCollector<'a> {
 
         'items: for &item in assoc_items {
             let attrs = item_tree.attrs(self.db, self.module_id.krate, ModItem::from(item).into());
-            if !attrs.is_cfg_enabled(self.expander.cfg_options()) {
+            if !attrs.is_cfg_enabled(self.expander.cfg_options(self.db)) {
                 self.diagnostics.push(DefDiagnostic::unconfigured_code(
                     self.module_id.local_id,
                     tree_id,
                     ModItem::from(item).into(),
                     attrs.cfg().unwrap(),
-                    self.expander.cfg_options().clone(),
+                    self.expander.cfg_options(self.db).clone(),
                 ));
                 continue;
             }
diff --git a/src/tools/rust-analyzer/crates/hir-def/src/nameres/tests/incremental.rs b/src/tools/rust-analyzer/crates/hir-def/src/nameres/tests/incremental.rs
index bd25d0bd585..14653c64a61 100644
--- a/src/tools/rust-analyzer/crates/hir-def/src/nameres/tests/incremental.rs
+++ b/src/tools/rust-analyzer/crates/hir-def/src/nameres/tests/incremental.rs
@@ -58,7 +58,7 @@ pub const BAZ: u32 = 0;
                 Edition::CURRENT,
                 Some(CrateDisplayName::from_canonical_name(crate_name)),
                 None,
-                Arc::default(),
+                Default::default(),
                 None,
                 Env::default(),
                 CrateOrigin::Local { repo: None, name: Some(Symbol::intern(crate_name)) },
diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/display.rs b/src/tools/rust-analyzer/crates/hir-ty/src/display.rs
index b2e13ba6920..0e3c5b9b474 100644
--- a/src/tools/rust-analyzer/crates/hir-ty/src/display.rs
+++ b/src/tools/rust-analyzer/crates/hir-ty/src/display.rs
@@ -1226,7 +1226,7 @@ impl HirDisplay for Ty {
             TyKind::Adt(AdtId(def_id), parameters) => {
                 f.start_location_link((*def_id).into());
                 match f.display_kind {
-                    DisplayKind::Diagnostics { .. } | DisplayKind::Test { .. } => {
+                    DisplayKind::Diagnostics | DisplayKind::Test => {
                         let name = match *def_id {
                             hir_def::AdtId::StructId(it) => db.struct_data(it).name.clone(),
                             hir_def::AdtId::UnionId(it) => db.union_data(it).name.clone(),
diff --git a/src/tools/rust-analyzer/crates/hir/src/lib.rs b/src/tools/rust-analyzer/crates/hir/src/lib.rs
index b3bb4a0a33a..c3834b3c4d0 100644
--- a/src/tools/rust-analyzer/crates/hir/src/lib.rs
+++ b/src/tools/rust-analyzer/crates/hir/src/lib.rs
@@ -276,8 +276,8 @@ impl Crate {
         doc_url.map(|s| s.trim_matches('"').trim_end_matches('/').to_owned() + "/")
     }
 
-    pub fn cfg(&self, db: &dyn HirDatabase) -> Arc<CfgOptions> {
-        Arc::clone(self.id.cfg_options(db))
+    pub fn cfg<'db>(&self, db: &'db dyn HirDatabase) -> &'db CfgOptions {
+        self.id.cfg_options(db)
     }
 
     pub fn potential_cfg<'db>(&self, db: &'db dyn HirDatabase) -> &'db CfgOptions {
diff --git a/src/tools/rust-analyzer/crates/ide/src/lib.rs b/src/tools/rust-analyzer/crates/ide/src/lib.rs
index f8eb676bfc4..f85a7bf2f25 100644
--- a/src/tools/rust-analyzer/crates/ide/src/lib.rs
+++ b/src/tools/rust-analyzer/crates/ide/src/lib.rs
@@ -250,7 +250,7 @@ impl Analysis {
             Edition::CURRENT,
             None,
             None,
-            Arc::new(cfg_options),
+            cfg_options,
             None,
             Env::default(),
             CrateOrigin::Local { repo: None, name: None },
diff --git a/src/tools/rust-analyzer/crates/project-model/src/cargo_workspace.rs b/src/tools/rust-analyzer/crates/project-model/src/cargo_workspace.rs
index 054312835a8..617c4116a6e 100644
--- a/src/tools/rust-analyzer/crates/project-model/src/cargo_workspace.rs
+++ b/src/tools/rust-analyzer/crates/project-model/src/cargo_workspace.rs
@@ -35,6 +35,8 @@ pub struct CargoWorkspace {
     target_directory: AbsPathBuf,
     manifest_path: ManifestPath,
     is_virtual_workspace: bool,
+    /// Whether this workspace represents the sysroot workspace.
+    is_sysroot: bool,
     /// Environment variables set in the `.cargo/config` file.
     config_env: Env,
 }
@@ -418,6 +420,7 @@ impl CargoWorkspace {
         mut meta: cargo_metadata::Metadata,
         ws_manifest_path: ManifestPath,
         cargo_config_env: Env,
+        is_sysroot: bool,
     ) -> CargoWorkspace {
         let mut pkg_by_id = FxHashMap::default();
         let mut packages = Arena::default();
@@ -539,6 +542,7 @@ impl CargoWorkspace {
             target_directory,
             manifest_path: ws_manifest_path,
             is_virtual_workspace,
+            is_sysroot,
             config_env: cargo_config_env,
         }
     }
@@ -632,4 +636,8 @@ impl CargoWorkspace {
     pub fn env(&self) -> &Env {
         &self.config_env
     }
+
+    pub fn is_sysroot(&self) -> bool {
+        self.is_sysroot
+    }
 }
diff --git a/src/tools/rust-analyzer/crates/project-model/src/sysroot.rs b/src/tools/rust-analyzer/crates/project-model/src/sysroot.rs
index c92dc9f6a67..7e8db8d39dd 100644
--- a/src/tools/rust-analyzer/crates/project-model/src/sysroot.rs
+++ b/src/tools/rust-analyzer/crates/project-model/src/sysroot.rs
@@ -360,7 +360,7 @@ impl Sysroot {
             res.packages.remove(idx);
         });
 
-        let cargo_workspace = CargoWorkspace::new(res, library_manifest, Default::default());
+        let cargo_workspace = CargoWorkspace::new(res, library_manifest, Default::default(), true);
         Some(RustLibSrcWorkspace::Workspace(cargo_workspace))
     }
 }
diff --git a/src/tools/rust-analyzer/crates/project-model/src/tests.rs b/src/tools/rust-analyzer/crates/project-model/src/tests.rs
index ef7b3340644..1faa7b81e43 100644
--- a/src/tools/rust-analyzer/crates/project-model/src/tests.rs
+++ b/src/tools/rust-analyzer/crates/project-model/src/tests.rs
@@ -33,7 +33,7 @@ fn load_workspace_from_metadata(file: &str) -> ProjectWorkspace {
     let meta: Metadata = get_test_json_file(file);
     let manifest_path =
         ManifestPath::try_from(AbsPathBuf::try_from(meta.workspace_root.clone()).unwrap()).unwrap();
-    let cargo_workspace = CargoWorkspace::new(meta, manifest_path, Default::default());
+    let cargo_workspace = CargoWorkspace::new(meta, manifest_path, Default::default(), false);
     ProjectWorkspace {
         kind: ProjectWorkspaceKind::Cargo {
             cargo: cargo_workspace,
@@ -54,7 +54,7 @@ fn load_workspace_from_metadata(file: &str) -> ProjectWorkspace {
 fn load_rust_project(file: &str) -> (CrateGraphBuilder, ProcMacroPaths) {
     let data = get_test_json_file(file);
     let project = rooted_project_json(data);
-    let sysroot = get_fake_sysroot();
+    let sysroot = Sysroot::empty();
     let project_workspace = ProjectWorkspace {
         kind: ProjectWorkspaceKind::Json(project),
         sysroot,
@@ -101,36 +101,11 @@ fn replace_root(s: &mut String, direction: bool) {
     }
 }
 
-fn replace_fake_sys_root(s: &mut String) {
-    let fake_sysroot_path = get_test_path("fake-sysroot");
-    let fake_sysroot_path = if cfg!(windows) {
-        let normalized_path = fake_sysroot_path.as_str().replace('\\', r#"\\"#);
-        format!(r#"{normalized_path}\\"#)
-    } else {
-        format!("{}/", fake_sysroot_path.as_str())
-    };
-    *s = s.replace(&fake_sysroot_path, "$FAKESYSROOT$")
-}
-
 fn get_test_path(file: &str) -> Utf8PathBuf {
     let base = Utf8PathBuf::from(env!("CARGO_MANIFEST_DIR"));
     base.join("test_data").join(file)
 }
 
-fn get_fake_sysroot() -> Sysroot {
-    let sysroot_path = get_test_path("fake-sysroot");
-    // there's no `libexec/` directory with a `proc-macro-srv` binary in that
-    // fake sysroot, so we give them both the same path:
-    let sysroot_dir = AbsPathBuf::assert(sysroot_path);
-    let sysroot_src_dir = sysroot_dir.clone();
-    let mut sysroot = Sysroot::new(Some(sysroot_dir), Some(sysroot_src_dir));
-    let loaded_sysroot = sysroot.load_workspace(&RustSourceWorkspaceConfig::default_cargo());
-    if let Some(loaded_sysroot) = loaded_sysroot {
-        sysroot.set_workspace(loaded_sysroot);
-    }
-    sysroot
-}
-
 fn rooted_project_json(data: ProjectJsonData) -> ProjectJson {
     let mut root = "$ROOT$".to_owned();
     replace_root(&mut root, true);
@@ -159,7 +134,6 @@ fn check_crate_graph(crate_graph: CrateGraphBuilder, expect: ExpectFile) {
 
     replace_root(&mut crate_graph, false);
     replace_cargo(&mut crate_graph);
-    replace_fake_sys_root(&mut crate_graph);
     expect.assert_eq(&crate_graph);
 }
 
@@ -256,7 +230,7 @@ fn smoke_test_real_sysroot_cargo() {
     let meta: Metadata = get_test_json_file("hello-world-metadata.json");
     let manifest_path =
         ManifestPath::try_from(AbsPathBuf::try_from(meta.workspace_root.clone()).unwrap()).unwrap();
-    let cargo_workspace = CargoWorkspace::new(meta, manifest_path, Default::default());
+    let cargo_workspace = CargoWorkspace::new(meta, manifest_path, Default::default(), false);
     let mut sysroot = Sysroot::discover(
         AbsPath::assert(Utf8Path::new(env!("CARGO_MANIFEST_DIR"))),
         &Default::default(),
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 632e7b76896..95148bb1d0c 100644
--- a/src/tools/rust-analyzer/crates/project-model/src/workspace.rs
+++ b/src/tools/rust-analyzer/crates/project-model/src/workspace.rs
@@ -305,8 +305,12 @@ impl ProjectWorkspace {
                         &|_| (),
                     ) {
                         Ok((meta, _error)) => {
-                            let workspace =
-                                CargoWorkspace::new(meta, cargo_toml.clone(), Env::default());
+                            let workspace = CargoWorkspace::new(
+                                meta,
+                                cargo_toml.clone(),
+                                Env::default(),
+                                false,
+                            );
                             let build_scripts = WorkspaceBuildScripts::rustc_crates(
                                 &workspace,
                                 workspace_dir,
@@ -321,8 +325,8 @@ impl ProjectWorkspace {
                                 "Failed to read Cargo metadata from rustc source at {rustc_dir}",
                             );
                             Err(Some(format!(
-                            "Failed to read Cargo metadata from rustc source at {rustc_dir}: {e}"
-                        )))
+                                "Failed to read Cargo metadata from rustc source at {rustc_dir}: {e}"
+                            )))
                         }
                     }
                 })
@@ -379,7 +383,7 @@ impl ProjectWorkspace {
                 "Failed to read Cargo metadata from Cargo.toml file {cargo_toml}, {toolchain:?}",
             )
         })?;
-        let cargo = CargoWorkspace::new(meta, cargo_toml.clone(), cargo_config_extra_env);
+        let cargo = CargoWorkspace::new(meta, cargo_toml.clone(), cargo_config_extra_env, false);
         if let Some(loaded_sysroot) = loaded_sysroot {
             sysroot.set_workspace(loaded_sysroot);
         }
@@ -515,7 +519,7 @@ impl ProjectWorkspace {
             let cargo_config_extra_env =
                 cargo_config_env(detached_file, &config.extra_env, &sysroot);
             (
-                CargoWorkspace::new(ws, detached_file.clone(), cargo_config_extra_env),
+                CargoWorkspace::new(ws, detached_file.clone(), cargo_config_extra_env, false),
                 WorkspaceBuildScripts::default(),
                 error.map(Arc::new),
             )
@@ -866,6 +870,7 @@ impl ProjectWorkspace {
                 extra_env,
                 cfg_overrides,
                 self.set_test,
+                false,
                 crate_ws_data,
             ),
             ProjectWorkspaceKind::Cargo { cargo, rustc, build_scripts, error: _ } => {
@@ -968,6 +973,7 @@ fn project_json_to_crate_graph(
     extra_env: &FxHashMap<String, String>,
     override_cfg: &CfgOverrides,
     set_test: bool,
+    is_sysroot: bool,
     crate_ws_data: Arc<CrateWorkspaceData>,
 ) -> (CrateGraphBuilder, ProcMacroPaths) {
     let mut res = (CrateGraphBuilder::default(), ProcMacroPaths::default());
@@ -1023,7 +1029,7 @@ fn project_json_to_crate_graph(
                         target_cfgs.iter().chain(cfg.iter()).cloned().collect();
 
                     if *is_workspace_member {
-                        if set_test {
+                        if set_test && !is_sysroot {
                             // Add test cfg for local crates
                             cfg_options.insert_atom(sym::test.clone());
                         }
@@ -1045,13 +1051,17 @@ fn project_json_to_crate_graph(
                     *edition,
                     display_name.clone(),
                     version.clone(),
-                    Arc::new(cfg_options),
+                    cfg_options,
                     None,
                     env,
                     if let Some(name) = display_name.clone() {
-                        CrateOrigin::Local {
-                            repo: repository.clone(),
-                            name: Some(name.canonical_name().to_owned()),
+                        if is_sysroot {
+                            CrateOrigin::Lang(LangCrateOrigin::from(name.canonical_name().as_str()))
+                        } else {
+                            CrateOrigin::Local {
+                                repo: repository.clone(),
+                                name: Some(name.canonical_name().to_owned()),
+                            }
                         }
                     } else {
                         CrateOrigin::Local { repo: None, name: None }
@@ -1119,7 +1129,6 @@ fn cargo_to_crate_graph(
         sysroot,
         rustc_cfg.clone(),
         load,
-        // FIXME: This looks incorrect but I don't think this causes problems.
         crate_ws_data.clone(),
     );
 
@@ -1139,7 +1148,7 @@ fn cargo_to_crate_graph(
             let mut cfg_options = cfg_options.clone();
 
             if cargo[pkg].is_local {
-                if set_test {
+                if set_test && !cargo.is_sysroot() {
                     // Add test cfg for local crates
                     cfg_options.insert_atom(sym::test.clone());
                 }
@@ -1152,7 +1161,9 @@ fn cargo_to_crate_graph(
 
         let mut lib_tgt = None;
         for &tgt in cargo[pkg].targets.iter() {
-            if !matches!(cargo[tgt].kind, TargetKind::Lib { .. }) && !cargo[pkg].is_member {
+            if !matches!(cargo[tgt].kind, TargetKind::Lib { .. })
+                && (!cargo[pkg].is_member || cargo.is_sysroot())
+            {
                 // For non-workspace-members, Cargo does not resolve dev-dependencies, so we don't
                 // add any targets except the library target, since those will not work correctly if
                 // they use dev-dependencies.
@@ -1177,9 +1188,13 @@ fn cargo_to_crate_graph(
                 name,
                 kind,
                 if pkg_data.is_local {
-                    CrateOrigin::Local {
-                        repo: pkg_data.repository.clone(),
-                        name: Some(Symbol::intern(&pkg_data.name)),
+                    if cargo.is_sysroot() {
+                        CrateOrigin::Lang(LangCrateOrigin::from(&*pkg_data.name))
+                    } else {
+                        CrateOrigin::Local {
+                            repo: pkg_data.repository.clone(),
+                            name: Some(Symbol::intern(&pkg_data.name)),
+                        }
                     }
                 } else {
                     CrateOrigin::Library {
@@ -1326,7 +1341,7 @@ fn detached_file_to_crate_graph(
     }
     cfg_options.insert_atom(sym::rust_analyzer.clone());
     override_cfg.apply(&mut cfg_options, "");
-    let cfg_options = Arc::new(cfg_options);
+    let cfg_options = cfg_options;
 
     let file_id = match load(detached_file) {
         Some(file_id) => file_id,
@@ -1511,15 +1526,13 @@ fn add_target_crate_root(
         edition,
         Some(CrateDisplayName::from_canonical_name(cargo_name)),
         Some(pkg.version.to_string()),
-        Arc::new(cfg_options),
+        cfg_options,
         potential_cfg_options,
         env,
         origin,
         matches!(kind, TargetKind::Lib { is_proc_macro: true }),
-        Some(if pkg.is_member {
-            cargo.workspace_root().to_path_buf()
-        } else {
-            pkg.manifest.parent().to_path_buf()
+        matches!(kind, TargetKind::Lib { is_proc_macro: true }).then(|| {
+            if pkg.is_member { cargo.workspace_root() } else { pkg.manifest.parent() }.to_path_buf()
         }),
         crate_ws_data,
     );
@@ -1561,16 +1574,8 @@ fn extend_crate_graph_with_sysroot(
 ) -> (SysrootPublicDeps, Option<CrateBuilderId>) {
     let mut pub_deps = vec![];
     let mut libproc_macro = None;
-    let diff = CfgDiff::new(vec![], vec![CfgAtom::Flag(sym::test.clone())]);
-    for (cid, c) in sysroot_crate_graph.iter_mut() {
-        // uninject `test` flag so `core` keeps working.
-        Arc::make_mut(&mut c.cfg_options).apply_diff(diff.clone());
-        // patch the origin
-        if c.basic.origin.is_local() {
-            let lang_crate = LangCrateOrigin::from(
-                c.extra.display_name.as_ref().map_or("", |it| it.canonical_name().as_str()),
-            );
-            c.basic.origin = CrateOrigin::Lang(lang_crate);
+    for cid in sysroot_crate_graph.iter() {
+        if let CrateOrigin::Lang(lang_crate) = sysroot_crate_graph[cid].basic.origin {
             match lang_crate {
                 LangCrateOrigin::Test
                 | LangCrateOrigin::Alloc
@@ -1627,7 +1632,7 @@ fn sysroot_to_crate_graph(
     let _p = tracing::info_span!("sysroot_to_crate_graph").entered();
     match sysroot.workspace() {
         RustLibSrcWorkspace::Workspace(cargo) => {
-            let (cg, pm) = cargo_to_crate_graph(
+            let (sysroot_cg, sysroot_pm) = cargo_to_crate_graph(
                 load,
                 None,
                 cargo,
@@ -1639,7 +1644,7 @@ fn sysroot_to_crate_graph(
                             CfgAtom::Flag(sym::debug_assertions.clone()),
                             CfgAtom::Flag(sym::miri.clone()),
                         ],
-                        vec![],
+                        vec![CfgAtom::Flag(sym::test.clone())],
                     ),
                     ..Default::default()
                 },
@@ -1648,10 +1653,10 @@ fn sysroot_to_crate_graph(
                 crate_ws_data,
             );
 
-            extend_crate_graph_with_sysroot(crate_graph, cg, pm)
+            extend_crate_graph_with_sysroot(crate_graph, sysroot_cg, sysroot_pm)
         }
         RustLibSrcWorkspace::Json(project_json) => {
-            let (cg, pm) = project_json_to_crate_graph(
+            let (sysroot_cg, sysroot_pm) = project_json_to_crate_graph(
                 rustc_cfg,
                 load,
                 project_json,
@@ -1668,19 +1673,20 @@ fn sysroot_to_crate_graph(
                     ..Default::default()
                 },
                 false,
+                true,
                 crate_ws_data,
             );
 
-            extend_crate_graph_with_sysroot(crate_graph, cg, pm)
+            extend_crate_graph_with_sysroot(crate_graph, sysroot_cg, sysroot_pm)
         }
         RustLibSrcWorkspace::Stitched(stitched) => {
-            let cfg_options = Arc::new({
+            let cfg_options = {
                 let mut cfg_options = CfgOptions::default();
                 cfg_options.extend(rustc_cfg);
                 cfg_options.insert_atom(sym::debug_assertions.clone());
                 cfg_options.insert_atom(sym::miri.clone());
                 cfg_options
-            });
+            };
             let sysroot_crates: FxHashMap<
                 crate::sysroot::stitched::RustLibSrcCrate,
                 CrateBuilderId,
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/alloc/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/alloc/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/alloc/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/core/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/core/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/core/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/panic_abort/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/panic_abort/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/panic_abort/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/panic_unwind/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/panic_unwind/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/panic_unwind/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/proc_macro/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/proc_macro/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/proc_macro/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/profiler_builtins/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/profiler_builtins/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/profiler_builtins/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/std/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/std/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/std/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/stdarch/crates/std_detect/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/stdarch/crates/std_detect/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/stdarch/crates/std_detect/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/term/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/term/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/term/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/test/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/test/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/test/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/unwind/src/lib.rs b/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/unwind/src/lib.rs
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/src/tools/rust-analyzer/crates/project-model/test_data/fake-sysroot/unwind/src/lib.rs
+++ /dev/null
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model.txt b/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model.txt
index ae842bf704d..d30d67ed1f3 100644
--- a/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model.txt
+++ b/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model.txt
@@ -22,11 +22,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -108,11 +104,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -194,11 +186,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -280,11 +268,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -349,11 +333,7 @@
                 name: "libc",
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model_with_selective_overrides.txt b/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model_with_selective_overrides.txt
index ae842bf704d..d30d67ed1f3 100644
--- a/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model_with_selective_overrides.txt
+++ b/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model_with_selective_overrides.txt
@@ -22,11 +22,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -108,11 +104,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -194,11 +186,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -280,11 +268,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -349,11 +333,7 @@
                 name: "libc",
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model_with_wildcard_overrides.txt b/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model_with_wildcard_overrides.txt
index 272cd69cb14..925233ceb41 100644
--- a/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model_with_wildcard_overrides.txt
+++ b/src/tools/rust-analyzer/crates/project-model/test_data/output/cargo_hello_world_project_model_with_wildcard_overrides.txt
@@ -22,11 +22,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -107,11 +103,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -192,11 +184,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -277,11 +265,7 @@
                 ),
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$hello-world",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
@@ -345,11 +329,7 @@
                 name: "libc",
             },
             is_proc_macro: false,
-            proc_macro_cwd: Some(
-                AbsPathBuf(
-                    "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
-                ),
-            ),
+            proc_macro_cwd: None,
         },
         extra: ExtraCrateData {
             version: Some(
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/output/rust_project_cfg_groups.txt b/src/tools/rust-analyzer/crates/project-model/test_data/output/rust_project_cfg_groups.txt
index 2b8e521f344..5f18d5e3f08 100644
--- a/src/tools/rust-analyzer/crates/project-model/test_data/output/rust_project_cfg_groups.txt
+++ b/src/tools/rust-analyzer/crates/project-model/test_data/output/rust_project_cfg_groups.txt
@@ -4,560 +4,8 @@
             root_file_id: FileId(
                 1,
             ),
-            edition: Edition2021,
-            dependencies: [
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(1),
-                    name: CrateName(
-                        "core",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-            ],
-            origin: Lang(
-                Alloc,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "alloc",
-                    ),
-                    canonical_name: "alloc",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    1: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                2,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Core,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "core",
-                    ),
-                    canonical_name: "core",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    2: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                3,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Other,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "panic_abort",
-                    ),
-                    canonical_name: "panic_abort",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    3: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                4,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Other,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "panic_unwind",
-                    ),
-                    canonical_name: "panic_unwind",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    4: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                5,
-            ),
-            edition: Edition2021,
-            dependencies: [
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(6),
-                    name: CrateName(
-                        "std",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(1),
-                    name: CrateName(
-                        "core",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-            ],
-            origin: Lang(
-                ProcMacro,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "proc_macro",
-                    ),
-                    canonical_name: "proc_macro",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    5: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                6,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Other,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "profiler_builtins",
-                    ),
-                    canonical_name: "profiler_builtins",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    6: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                7,
-            ),
-            edition: Edition2021,
-            dependencies: [
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(0),
-                    name: CrateName(
-                        "alloc",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(3),
-                    name: CrateName(
-                        "panic_unwind",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(2),
-                    name: CrateName(
-                        "panic_abort",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(1),
-                    name: CrateName(
-                        "core",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(5),
-                    name: CrateName(
-                        "profiler_builtins",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(9),
-                    name: CrateName(
-                        "unwind",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(7),
-                    name: CrateName(
-                        "std_detect",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(8),
-                    name: CrateName(
-                        "test",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-            ],
-            origin: Lang(
-                Std,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "std",
-                    ),
-                    canonical_name: "std",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    7: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                8,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Other,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "std_detect",
-                    ),
-                    canonical_name: "std_detect",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    8: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                9,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Test,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "test",
-                    ),
-                    canonical_name: "test",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    9: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                10,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Other,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "unwind",
-                    ),
-                    canonical_name: "unwind",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    10: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                11,
-            ),
             edition: Edition2018,
-            dependencies: [
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(1),
-                    name: CrateName(
-                        "core",
-                    ),
-                    prelude: true,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(0),
-                    name: CrateName(
-                        "alloc",
-                    ),
-                    prelude: false,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(6),
-                    name: CrateName(
-                        "std",
-                    ),
-                    prelude: true,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(8),
-                    name: CrateName(
-                        "test",
-                    ),
-                    prelude: false,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(4),
-                    name: CrateName(
-                        "proc_macro",
-                    ),
-                    prelude: false,
-                    sysroot: true,
-                },
-            ],
+            dependencies: [],
             origin: Local {
                 repo: None,
                 name: Some(
@@ -599,54 +47,13 @@
             toolchain: None,
         },
     },
-    11: CrateBuilder {
+    1: CrateBuilder {
         basic: CrateData {
             root_file_id: FileId(
-                11,
+                1,
             ),
             edition: Edition2018,
-            dependencies: [
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(1),
-                    name: CrateName(
-                        "core",
-                    ),
-                    prelude: true,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(0),
-                    name: CrateName(
-                        "alloc",
-                    ),
-                    prelude: false,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(6),
-                    name: CrateName(
-                        "std",
-                    ),
-                    prelude: true,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(8),
-                    name: CrateName(
-                        "test",
-                    ),
-                    prelude: false,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(4),
-                    name: CrateName(
-                        "proc_macro",
-                    ),
-                    prelude: false,
-                    sysroot: true,
-                },
-            ],
+            dependencies: [],
             origin: Local {
                 repo: None,
                 name: Some(
diff --git a/src/tools/rust-analyzer/crates/project-model/test_data/output/rust_project_hello_world_project_model.txt b/src/tools/rust-analyzer/crates/project-model/test_data/output/rust_project_hello_world_project_model.txt
index 053e9473cf2..5cb9992b203 100644
--- a/src/tools/rust-analyzer/crates/project-model/test_data/output/rust_project_hello_world_project_model.txt
+++ b/src/tools/rust-analyzer/crates/project-model/test_data/output/rust_project_hello_world_project_model.txt
@@ -4,560 +4,8 @@
             root_file_id: FileId(
                 1,
             ),
-            edition: Edition2021,
-            dependencies: [
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(1),
-                    name: CrateName(
-                        "core",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-            ],
-            origin: Lang(
-                Alloc,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "alloc",
-                    ),
-                    canonical_name: "alloc",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    1: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                2,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Core,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "core",
-                    ),
-                    canonical_name: "core",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    2: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                3,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Other,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "panic_abort",
-                    ),
-                    canonical_name: "panic_abort",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    3: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                4,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Other,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "panic_unwind",
-                    ),
-                    canonical_name: "panic_unwind",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    4: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                5,
-            ),
-            edition: Edition2021,
-            dependencies: [
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(6),
-                    name: CrateName(
-                        "std",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(1),
-                    name: CrateName(
-                        "core",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-            ],
-            origin: Lang(
-                ProcMacro,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "proc_macro",
-                    ),
-                    canonical_name: "proc_macro",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    5: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                6,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Other,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "profiler_builtins",
-                    ),
-                    canonical_name: "profiler_builtins",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    6: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                7,
-            ),
-            edition: Edition2021,
-            dependencies: [
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(0),
-                    name: CrateName(
-                        "alloc",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(3),
-                    name: CrateName(
-                        "panic_unwind",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(2),
-                    name: CrateName(
-                        "panic_abort",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(1),
-                    name: CrateName(
-                        "core",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(5),
-                    name: CrateName(
-                        "profiler_builtins",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(9),
-                    name: CrateName(
-                        "unwind",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(7),
-                    name: CrateName(
-                        "std_detect",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(8),
-                    name: CrateName(
-                        "test",
-                    ),
-                    prelude: true,
-                    sysroot: false,
-                },
-            ],
-            origin: Lang(
-                Std,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "std",
-                    ),
-                    canonical_name: "std",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    7: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                8,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Other,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "std_detect",
-                    ),
-                    canonical_name: "std_detect",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    8: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                9,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Test,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "test",
-                    ),
-                    canonical_name: "test",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    9: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                10,
-            ),
-            edition: Edition2021,
-            dependencies: [],
-            origin: Lang(
-                Other,
-            ),
-            is_proc_macro: false,
-            proc_macro_cwd: None,
-        },
-        extra: ExtraCrateData {
-            version: None,
-            display_name: Some(
-                CrateDisplayName {
-                    crate_name: CrateName(
-                        "unwind",
-                    ),
-                    canonical_name: "unwind",
-                },
-            ),
-            potential_cfg_options: None,
-        },
-        cfg_options: CfgOptions(
-            [
-                "debug_assertions",
-                "miri",
-                "true",
-            ],
-        ),
-        env: Env {
-            entries: {},
-        },
-        ws_data: CrateWorkspaceData {
-            data_layout: Err(
-                "test has no data layout",
-            ),
-            toolchain: None,
-        },
-    },
-    10: CrateBuilder {
-        basic: CrateData {
-            root_file_id: FileId(
-                11,
-            ),
             edition: Edition2018,
-            dependencies: [
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(1),
-                    name: CrateName(
-                        "core",
-                    ),
-                    prelude: true,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(0),
-                    name: CrateName(
-                        "alloc",
-                    ),
-                    prelude: false,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(6),
-                    name: CrateName(
-                        "std",
-                    ),
-                    prelude: true,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(8),
-                    name: CrateName(
-                        "test",
-                    ),
-                    prelude: false,
-                    sysroot: true,
-                },
-                Dependency {
-                    crate_id: Idx::<CrateBuilder>(4),
-                    name: CrateName(
-                        "proc_macro",
-                    ),
-                    prelude: false,
-                    sysroot: true,
-                },
-            ],
+            dependencies: [],
             origin: Local {
                 repo: None,
                 name: Some(
diff --git a/src/tools/rust-analyzer/crates/query-group-macro/tests/logger_db.rs b/src/tools/rust-analyzer/crates/query-group-macro/tests/logger_db.rs
index b3457c1046e..5cf9be36f70 100644
--- a/src/tools/rust-analyzer/crates/query-group-macro/tests/logger_db.rs
+++ b/src/tools/rust-analyzer/crates/query-group-macro/tests/logger_db.rs
@@ -18,7 +18,7 @@ impl salsa::Database for LoggerDb {
         let event = event();
         match event.kind {
             salsa::EventKind::WillExecute { .. }
-            | salsa::EventKind::WillCheckCancellation { .. }
+            | salsa::EventKind::WillCheckCancellation
             | salsa::EventKind::DidValidateMemoizedValue { .. }
             | salsa::EventKind::WillDiscardStaleOutput { .. }
             | salsa::EventKind::DidDiscard { .. } => {
diff --git a/src/tools/rust-analyzer/crates/test-fixture/src/lib.rs b/src/tools/rust-analyzer/crates/test-fixture/src/lib.rs
index 2c5c1c2e7fe..3fea49d1f61 100644
--- a/src/tools/rust-analyzer/crates/test-fixture/src/lib.rs
+++ b/src/tools/rust-analyzer/crates/test-fixture/src/lib.rs
@@ -207,7 +207,7 @@ impl ChangeFixture {
                     meta.edition,
                     Some(crate_name.clone().into()),
                     version,
-                    From::from(meta.cfg.clone()),
+                    meta.cfg.clone(),
                     Some(meta.cfg),
                     meta.env,
                     origin,
@@ -247,7 +247,7 @@ impl ChangeFixture {
                 Edition::CURRENT,
                 Some(CrateName::new("ra_test_fixture").unwrap().into()),
                 None,
-                From::from(default_cfg.clone()),
+                default_cfg.clone(),
                 Some(default_cfg),
                 default_env,
                 CrateOrigin::Local { repo: None, name: None },