Skip to content

Commit 46f0554

Browse files
committed
Patch cargo script root files back to manifest
1 parent 0b24599 commit 46f0554

File tree

4 files changed

+26
-16
lines changed

4 files changed

+26
-16
lines changed

crates/project-model/src/cargo_workspace.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -379,11 +379,12 @@ impl CargoWorkspace {
379379
let is_local = source.is_none();
380380
let is_member = ws_members.contains(&id);
381381

382+
let manifest = AbsPathBuf::assert(manifest_path);
382383
let pkg = packages.alloc(PackageData {
383384
id: id.repr.clone(),
384385
name,
385386
version,
386-
manifest: AbsPathBuf::assert(manifest_path).try_into().unwrap(),
387+
manifest: manifest.clone().try_into().unwrap(),
387388
targets: Vec::new(),
388389
is_local,
389390
is_member,
@@ -406,11 +407,22 @@ impl CargoWorkspace {
406407
for meta_tgt in meta_targets {
407408
let cargo_metadata::Target { name, kind, required_features, src_path, .. } =
408409
meta_tgt;
410+
let kind = TargetKind::new(&kind);
409411
let tgt = targets.alloc(TargetData {
410412
package: pkg,
411413
name,
412-
root: AbsPathBuf::assert(src_path),
413-
kind: TargetKind::new(&kind),
414+
root: if kind == TargetKind::Bin
415+
&& manifest.extension().is_some_and(|ext| ext == "rs")
416+
{
417+
// cargo strips the script part of a cargo script away and places the
418+
// modified manifest file into a special target dir which is then used as
419+
// the source path. We don't want that, we want the original here so map it
420+
// back
421+
manifest.clone()
422+
} else {
423+
AbsPathBuf::assert(src_path)
424+
},
425+
kind,
414426
required_features,
415427
});
416428
pkg_data.targets.push(tgt);

crates/project-model/src/workspace.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ impl ProjectWorkspace {
437437
detached_files: Vec<AbsPathBuf>,
438438
config: &CargoConfig,
439439
) -> Vec<anyhow::Result<ProjectWorkspace>> {
440-
dbg!(detached_files
440+
detached_files
441441
.into_iter()
442442
.map(|detached_file| {
443443
let dir = detached_file
@@ -508,7 +508,7 @@ impl ProjectWorkspace {
508508
cargo_script,
509509
})
510510
})
511-
.collect())
511+
.collect()
512512
}
513513

514514
/// Runs the build scripts for this [`ProjectWorkspace`].
@@ -822,7 +822,7 @@ impl ProjectWorkspace {
822822
} => (
823823
if let Some(cargo) = cargo_script {
824824
cargo_to_crate_graph(
825-
load,
825+
&mut |path| load(path),
826826
None,
827827
cargo,
828828
sysroot.as_ref().ok(),

crates/rust-analyzer/src/reload.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -718,9 +718,7 @@ pub fn ws_to_crate_graph(
718718
let mut toolchains = Vec::default();
719719
let e = Err(Arc::from("missing layout"));
720720
for ws in workspaces {
721-
dbg!(ws);
722721
let (other, mut crate_proc_macros) = ws.to_crate_graph(&mut load, extra_env);
723-
dbg!(&other);
724722
let num_layouts = layouts.len();
725723
let num_toolchains = toolchains.len();
726724
let (ProjectWorkspace::Cargo { toolchain, target_layout, .. }

crates/rust-analyzer/tests/slow-tests/main.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,10 @@ version = "0.1.0"
139139
pub struct SpecialHashMap2;
140140
//- /src/lib.rs
141141
#!/usr/bin/env -S cargo +nightly -Zscript
142-
//! ---cargo
143-
//! [dependencies]
144-
//! dependency = { path = "../dependency" }
145-
//! ---
142+
---cargo
143+
[dependencies]
144+
dependency = { path = "../dependency" }
145+
---
146146
use dependency::Spam;
147147
use dependency2::Spam;
148148
"#,
@@ -178,10 +178,10 @@ use dependency2::Spam;
178178
server.write_file_and_save(
179179
"src/lib.rs",
180180
r#"#!/usr/bin/env -S cargo +nightly -Zscript
181-
//! ---cargo
182-
//! [dependencies]
183-
//! dependency2 = { path = "../dependency2" }
184-
//! ---
181+
---cargo
182+
[dependencies]
183+
dependency2 = { path = "../dependency2" }
184+
---
185185
use dependency::Spam;
186186
use dependency2::Spam;
187187
"#

0 commit comments

Comments
 (0)