mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-01 20:31:59 +00:00
fix: Correctly handle no_core/no_std for preludes
This commit is contained in:
parent
cfce2bb46d
commit
a268eaf053
9 changed files with 120 additions and 71 deletions
|
|
@ -4,7 +4,7 @@
|
|||
//! but we can't process `.rlib` and need source code instead. The source code
|
||||
//! is typically installed with `rustup component add rust-src` command.
|
||||
|
||||
use std::{env, fs, iter, ops, process::Command, sync::Arc};
|
||||
use std::{env, fs, ops, process::Command, sync::Arc};
|
||||
|
||||
use anyhow::{format_err, Result};
|
||||
use base_db::CrateName;
|
||||
|
|
@ -58,13 +58,11 @@ impl Stitched {
|
|||
pub(crate) fn public_deps(&self) -> impl Iterator<Item = (CrateName, SysrootCrate, bool)> + '_ {
|
||||
// core is added as a dependency before std in order to
|
||||
// mimic rustcs dependency order
|
||||
["core", "alloc", "std"]
|
||||
.into_iter()
|
||||
.zip(iter::repeat(true))
|
||||
.chain(iter::once(("test", false)))
|
||||
.filter_map(move |(name, prelude)| {
|
||||
[("core", true), ("alloc", false), ("std", true), ("test", false)].into_iter().filter_map(
|
||||
move |(name, prelude)| {
|
||||
Some((CrateName::new(name).unwrap(), self.by_name(name)?, prelude))
|
||||
})
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
pub(crate) fn proc_macro(&self) -> Option<SysrootCrate> {
|
||||
|
|
|
|||
|
|
@ -1413,7 +1413,7 @@ impl SysrootPublicDeps {
|
|||
/// Makes `from` depend on the public sysroot crates.
|
||||
fn add_to_crate_graph(&self, crate_graph: &mut CrateGraph, from: CrateId) {
|
||||
for (name, krate, prelude) in &self.deps {
|
||||
add_dep_with_prelude(crate_graph, from, name.clone(), *krate, *prelude);
|
||||
add_dep_with_prelude(crate_graph, from, name.clone(), *krate, *prelude, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1466,7 +1466,7 @@ fn sysroot_to_crate_graph(
|
|||
| LangCrateOrigin::Std => pub_deps.push((
|
||||
CrateName::normalize_dashes(&lang_crate.to_string()),
|
||||
cid,
|
||||
!matches!(lang_crate, LangCrateOrigin::Test),
|
||||
!matches!(lang_crate, LangCrateOrigin::Test | LangCrateOrigin::Alloc),
|
||||
)),
|
||||
LangCrateOrigin::ProcMacro => libproc_macro = Some(cid),
|
||||
LangCrateOrigin::Other => (),
|
||||
|
|
@ -1567,12 +1567,20 @@ fn add_dep_with_prelude(
|
|||
name: CrateName,
|
||||
to: CrateId,
|
||||
prelude: bool,
|
||||
sysroot: bool,
|
||||
) {
|
||||
add_dep_inner(graph, from, Dependency::with_prelude(name, to, prelude))
|
||||
add_dep_inner(graph, from, Dependency::with_prelude(name, to, prelude, sysroot))
|
||||
}
|
||||
|
||||
fn add_proc_macro_dep(crate_graph: &mut CrateGraph, from: CrateId, to: CrateId, prelude: bool) {
|
||||
add_dep_with_prelude(crate_graph, from, CrateName::new("proc_macro").unwrap(), to, prelude);
|
||||
add_dep_with_prelude(
|
||||
crate_graph,
|
||||
from,
|
||||
CrateName::new("proc_macro").unwrap(),
|
||||
to,
|
||||
prelude,
|
||||
true,
|
||||
);
|
||||
}
|
||||
|
||||
fn add_dep_inner(graph: &mut CrateGraph, from: CrateId, dep: Dependency) {
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
@ -111,6 +112,7 @@
|
|||
"hello_world",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(4),
|
||||
|
|
@ -118,6 +120,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
@ -179,6 +182,7 @@
|
|||
"hello_world",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(4),
|
||||
|
|
@ -186,6 +190,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
@ -247,6 +252,7 @@
|
|||
"hello_world",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(4),
|
||||
|
|
@ -254,6 +260,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
@ -111,6 +112,7 @@
|
|||
"hello_world",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(4),
|
||||
|
|
@ -118,6 +120,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
@ -179,6 +182,7 @@
|
|||
"hello_world",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(4),
|
||||
|
|
@ -186,6 +190,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
@ -247,6 +252,7 @@
|
|||
"hello_world",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(4),
|
||||
|
|
@ -254,6 +260,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
@ -109,6 +110,7 @@
|
|||
"hello_world",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(4),
|
||||
|
|
@ -116,6 +118,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
@ -176,6 +179,7 @@
|
|||
"hello_world",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(4),
|
||||
|
|
@ -183,6 +187,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
@ -243,6 +248,7 @@
|
|||
"hello_world",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(4),
|
||||
|
|
@ -250,6 +256,7 @@
|
|||
"libc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
"core",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Lang(
|
||||
|
|
@ -158,6 +159,7 @@
|
|||
"std",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(1),
|
||||
|
|
@ -165,6 +167,7 @@
|
|||
"core",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Lang(
|
||||
|
|
@ -233,6 +236,7 @@
|
|||
"alloc",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(3),
|
||||
|
|
@ -240,6 +244,7 @@
|
|||
"panic_unwind",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(2),
|
||||
|
|
@ -247,6 +252,7 @@
|
|||
"panic_abort",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(1),
|
||||
|
|
@ -254,6 +260,7 @@
|
|||
"core",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(5),
|
||||
|
|
@ -261,6 +268,7 @@
|
|||
"profiler_builtins",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(9),
|
||||
|
|
@ -268,6 +276,7 @@
|
|||
"unwind",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(7),
|
||||
|
|
@ -275,6 +284,7 @@
|
|||
"std_detect",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(8),
|
||||
|
|
@ -282,6 +292,7 @@
|
|||
"test",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: false,
|
||||
},
|
||||
],
|
||||
origin: Lang(
|
||||
|
|
@ -409,13 +420,15 @@
|
|||
"core",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: true,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(0),
|
||||
name: CrateName(
|
||||
"alloc",
|
||||
),
|
||||
prelude: true,
|
||||
prelude: false,
|
||||
sysroot: true,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(6),
|
||||
|
|
@ -423,6 +436,7 @@
|
|||
"std",
|
||||
),
|
||||
prelude: true,
|
||||
sysroot: true,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(8),
|
||||
|
|
@ -430,6 +444,7 @@
|
|||
"test",
|
||||
),
|
||||
prelude: false,
|
||||
sysroot: true,
|
||||
},
|
||||
Dependency {
|
||||
crate_id: Idx::<CrateData>(4),
|
||||
|
|
@ -437,6 +452,7 @@
|
|||
"proc_macro",
|
||||
),
|
||||
prelude: false,
|
||||
sysroot: true,
|
||||
},
|
||||
],
|
||||
origin: Local {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue