Merge pull request #17931 from github/redsun82/rust-target-dir

Rust: allow to specify the target directory
This commit is contained in:
Paolo Tranquilli
2024-11-08 13:34:03 +01:00
committed by GitHub
5 changed files with 21 additions and 13 deletions

View File

@@ -23,14 +23,15 @@ options:
title: Controls compression for the TRAP files written by the extractor.
description: >
This option is only intended for use in debugging the extractor. Accepted
values are 'gzip' (the default, to write gzip-compressed TRAP) and 'none'
(to write uncompressed TRAP).
values are 'gzip' (to write gzip-compressed TRAP) and 'none'
(currently the default, to write uncompressed TRAP).
type: string
pattern: "^(none|gzip)$"
extract_dependencies:
title: Whether to extract dependencies.
cargo_target_dir:
title: Directory to use for cargo output files.
description: >
Extract the source code of dependencies and the standard libraries in addition to
normal source code.
This value is an optional path to use as `CARGO_TARGET_DIR` for the internal
cargo commands the extractor uses. Pointing it to a persistent directory may
reduce execution time of consecutive extractor runs. By default, a new scratch
directory is used for each run.
type: string
pattern: "^(false|true)$"

View File

@@ -21,6 +21,12 @@ pub fn extractor_cli_config(_attr: TokenStream, item: TokenStream) -> TokenStrea
#id: bool,
};
}
if p.path.segments.len() == 1 && p.path.segments[0].ident == "Option" {
return quote! {
#[arg(long)]
#id: #ty,
};
}
}
if id == &format_ident!("verbose") {
quote! {

View File

@@ -37,7 +37,7 @@ pub struct Config {
pub scratch_dir: PathBuf,
pub trap_dir: PathBuf,
pub source_archive_dir: PathBuf,
pub extract_dependencies: bool,
pub cargo_target_dir: Option<PathBuf>,
pub verbose: u8,
pub compression: Compression,
pub inputs: Vec<PathBuf>,

View File

@@ -130,8 +130,11 @@ fn main() -> anyhow::Result<()> {
}
extractor.extract_without_semantics(file, "no manifest found");
}
let target_dir = &cfg
.cargo_target_dir
.unwrap_or_else(|| cfg.scratch_dir.join("target"));
for (manifest, files) in map.values().filter(|(_, files)| !files.is_empty()) {
if let Some((ref db, ref vfs)) = RustAnalyzer::load_workspace(manifest, &cfg.scratch_dir) {
if let Some((ref db, ref vfs)) = RustAnalyzer::load_workspace(manifest, target_dir) {
let semantics = Semantics::new(db);
for file in files {
let Some(id) = path_to_file_id(file, vfs) else {

View File

@@ -45,13 +45,11 @@ pub struct ParseResult<'a> {
impl<'a> RustAnalyzer<'a> {
pub fn load_workspace(
project: &ProjectManifest,
scratch_dir: &Path,
target_dir: &Path,
) -> Option<(RootDatabase, Vfs)> {
let config = CargoConfig {
sysroot: Some(RustLibSource::Discover),
target_dir: ra_ap_paths::Utf8PathBuf::from_path_buf(scratch_dir.to_path_buf())
.map(|x| x.join("target"))
.ok(),
target_dir: ra_ap_paths::Utf8PathBuf::from_path_buf(target_dir.to_path_buf()).ok(),
..Default::default()
};
let progress = |t| (log::trace!("progress: {}", t));