You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// This module takes an absolute path to a rustc repo and alters the dependencies to point towards
9
+
// the respective rustc subcrates instead of using extern crate xyz.
10
+
// This allows rust analyzer to analyze rustc internals and show proper information inside clippy
11
+
// code. See https://github.com/rust-analyzer/rust-analyzer/issues/3517 and https://github.com/rust-lang/rust-clippy/issues/5514 for details
12
+
13
+
pubfnrun(rustc_path:Option<&str>){
14
+
// we can unwrap here because the arg is required here
15
+
let rustc_path = PathBuf::from(rustc_path.unwrap());
16
+
assert!(rustc_path.is_dir(),"path is not a directory");
17
+
let rustc_source_basedir = rustc_path.join("src");
18
+
assert!(
19
+
rustc_source_basedir.is_dir(),
20
+
"are you sure the path leads to a rustc repo?"
21
+
);
22
+
23
+
let clippy_root_manifest = fs::read_to_string("Cargo.toml").expect("failed to read ./Cargo.toml");
24
+
let clippy_root_lib_rs = fs::read_to_string("src/driver.rs").expect("failed to read ./src/driver.rs");
25
+
inject_deps_into_manifest(
26
+
&rustc_source_basedir,
27
+
"Cargo.toml",
28
+
&clippy_root_manifest,
29
+
&clippy_root_lib_rs,
30
+
)
31
+
.expect("Failed to inject deps into ./Cargo.toml");
32
+
33
+
let clippy_lints_manifest =
34
+
fs::read_to_string("clippy_lints/Cargo.toml").expect("failed to read ./clippy_lints/Cargo.toml");
35
+
let clippy_lints_lib_rs =
36
+
fs::read_to_string("clippy_lints/src/lib.rs").expect("failed to read ./clippy_lints/src/lib.rs");
37
+
inject_deps_into_manifest(
38
+
&rustc_source_basedir,
39
+
"clippy_lints/Cargo.toml",
40
+
&clippy_lints_manifest,
41
+
&clippy_lints_lib_rs,
42
+
)
43
+
.expect("Failed to inject deps into ./clippy_lints/Cargo.toml");
44
+
}
45
+
46
+
fninject_deps_into_manifest(
47
+
rustc_source_dir:&PathBuf,
48
+
manifest_path:&str,
49
+
cargo_toml:&str,
50
+
lib_rs:&str,
51
+
) -> std::io::Result<()>{
52
+
let extern_crates = lib_rs
53
+
.lines()
54
+
// get the deps
55
+
.filter(|line| line.starts_with("extern crate"))
56
+
// we have something like "extern crate foo;", we only care about the "foo"
57
+
// ↓ ↓
58
+
// extern crate rustc_middle;
59
+
.map(|s| &s[13..(s.len() - 1)]);
60
+
61
+
let new_deps = extern_crates.map(|dep| {
62
+
// format the dependencies that are going to be put inside the Cargo.toml
0 commit comments