diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2024-04-19 15:50:27 +0200 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2024-04-19 18:25:10 +0200 |
| commit | 46f05543a2520af5dced5667e5d2c16586539ffa (patch) | |
| tree | 58a25ce790ea995cde36f9273db5f4f1c60288d7 | |
| parent | 0b24599cf9830caf58d9df5f6b340b7156bc932b (diff) | |
| download | rust-46f05543a2520af5dced5667e5d2c16586539ffa.tar.gz rust-46f05543a2520af5dced5667e5d2c16586539ffa.zip | |
Patch cargo script root files back to manifest
| -rw-r--r-- | crates/project-model/src/cargo_workspace.rs | 18 | ||||
| -rw-r--r-- | crates/project-model/src/workspace.rs | 6 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/reload.rs | 2 | ||||
| -rw-r--r-- | crates/rust-analyzer/tests/slow-tests/main.rs | 16 |
4 files changed, 26 insertions, 16 deletions
diff --git a/crates/project-model/src/cargo_workspace.rs b/crates/project-model/src/cargo_workspace.rs index 7bba987f7d0..ff7cf144aa8 100644 --- a/crates/project-model/src/cargo_workspace.rs +++ b/crates/project-model/src/cargo_workspace.rs @@ -379,11 +379,12 @@ impl CargoWorkspace { let is_local = source.is_none(); let is_member = ws_members.contains(&id); + let manifest = AbsPathBuf::assert(manifest_path); let pkg = packages.alloc(PackageData { id: id.repr.clone(), name, version, - manifest: AbsPathBuf::assert(manifest_path).try_into().unwrap(), + manifest: manifest.clone().try_into().unwrap(), targets: Vec::new(), is_local, is_member, @@ -406,11 +407,22 @@ impl CargoWorkspace { for meta_tgt in meta_targets { let cargo_metadata::Target { name, kind, required_features, src_path, .. } = meta_tgt; + let kind = TargetKind::new(&kind); let tgt = targets.alloc(TargetData { package: pkg, name, - root: AbsPathBuf::assert(src_path), - kind: TargetKind::new(&kind), + root: if kind == TargetKind::Bin + && manifest.extension().is_some_and(|ext| ext == "rs") + { + // cargo strips the script part of a cargo script away and places the + // modified manifest file into a special target dir which is then used as + // the source path. We don't want that, we want the original here so map it + // back + manifest.clone() + } else { + AbsPathBuf::assert(src_path) + }, + kind, required_features, }); pkg_data.targets.push(tgt); diff --git a/crates/project-model/src/workspace.rs b/crates/project-model/src/workspace.rs index dca2c8d7392..7709f99b2e9 100644 --- a/crates/project-model/src/workspace.rs +++ b/crates/project-model/src/workspace.rs @@ -437,7 +437,7 @@ impl ProjectWorkspace { detached_files: Vec<AbsPathBuf>, config: &CargoConfig, ) -> Vec<anyhow::Result<ProjectWorkspace>> { - dbg!(detached_files + detached_files .into_iter() .map(|detached_file| { let dir = detached_file @@ -508,7 +508,7 @@ impl ProjectWorkspace { cargo_script, }) }) - .collect()) + .collect() } /// Runs the build scripts for this [`ProjectWorkspace`]. @@ -822,7 +822,7 @@ impl ProjectWorkspace { } => ( if let Some(cargo) = cargo_script { cargo_to_crate_graph( - load, + &mut |path| load(path), None, cargo, sysroot.as_ref().ok(), diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs index 84db3c6720e..557faaf84ca 100644 --- a/crates/rust-analyzer/src/reload.rs +++ b/crates/rust-analyzer/src/reload.rs @@ -718,9 +718,7 @@ pub fn ws_to_crate_graph( let mut toolchains = Vec::default(); let e = Err(Arc::from("missing layout")); for ws in workspaces { - dbg!(ws); let (other, mut crate_proc_macros) = ws.to_crate_graph(&mut load, extra_env); - dbg!(&other); let num_layouts = layouts.len(); let num_toolchains = toolchains.len(); let (ProjectWorkspace::Cargo { toolchain, target_layout, .. } diff --git a/crates/rust-analyzer/tests/slow-tests/main.rs b/crates/rust-analyzer/tests/slow-tests/main.rs index 715fed5fef6..22d8b6bdf18 100644 --- a/crates/rust-analyzer/tests/slow-tests/main.rs +++ b/crates/rust-analyzer/tests/slow-tests/main.rs @@ -139,10 +139,10 @@ version = "0.1.0" pub struct SpecialHashMap2; //- /src/lib.rs #!/usr/bin/env -S cargo +nightly -Zscript -//! ---cargo -//! [dependencies] -//! dependency = { path = "../dependency" } -//! --- +---cargo +[dependencies] +dependency = { path = "../dependency" } +--- use dependency::Spam; use dependency2::Spam; "#, @@ -178,10 +178,10 @@ use dependency2::Spam; server.write_file_and_save( "src/lib.rs", r#"#!/usr/bin/env -S cargo +nightly -Zscript -//! ---cargo -//! [dependencies] -//! dependency2 = { path = "../dependency2" } -//! --- +---cargo +[dependencies] +dependency2 = { path = "../dependency2" } +--- use dependency::Spam; use dependency2::Spam; "# |
