Skip to content

Commit 9cea631

Browse files
authored
Merge pull request github#17931 from github/redsun82/rust-target-dir
Rust: allow to specify the target directory
2 parents 26839f5 + 0833940 commit 9cea631

File tree

5 files changed

+21
-13
lines changed

5 files changed

+21
-13
lines changed

rust/codeql-extractor.yml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ options:
2323
title: Controls compression for the TRAP files written by the extractor.
2424
description: >
2525
This option is only intended for use in debugging the extractor. Accepted
26-
values are 'gzip' (the default, to write gzip-compressed TRAP) and 'none'
27-
(to write uncompressed TRAP).
26+
values are 'gzip' (to write gzip-compressed TRAP) and 'none'
27+
(currently the default, to write uncompressed TRAP).
2828
type: string
2929
pattern: "^(none|gzip)$"
30-
extract_dependencies:
31-
title: Whether to extract dependencies.
30+
cargo_target_dir:
31+
title: Directory to use for cargo output files.
3232
description: >
33-
Extract the source code of dependencies and the standard libraries in addition to
34-
normal source code.
33+
This value is an optional path to use as `CARGO_TARGET_DIR` for the internal
34+
cargo commands the extractor uses. Pointing it to a persistent directory may
35+
reduce execution time of consecutive extractor runs. By default, a new scratch
36+
directory is used for each run.
3537
type: string
36-
pattern: "^(false|true)$"

rust/extractor/macros/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ pub fn extractor_cli_config(_attr: TokenStream, item: TokenStream) -> TokenStrea
2121
#id: bool,
2222
};
2323
}
24+
if p.path.segments.len() == 1 && p.path.segments[0].ident == "Option" {
25+
return quote! {
26+
#[arg(long)]
27+
#id: #ty,
28+
};
29+
}
2430
}
2531
if id == &format_ident!("verbose") {
2632
quote! {

rust/extractor/src/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ pub struct Config {
3737
pub scratch_dir: PathBuf,
3838
pub trap_dir: PathBuf,
3939
pub source_archive_dir: PathBuf,
40-
pub extract_dependencies: bool,
40+
pub cargo_target_dir: Option<PathBuf>,
4141
pub verbose: u8,
4242
pub compression: Compression,
4343
pub inputs: Vec<PathBuf>,

rust/extractor/src/main.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,11 @@ fn main() -> anyhow::Result<()> {
130130
}
131131
extractor.extract_without_semantics(file, "no manifest found");
132132
}
133+
let target_dir = &cfg
134+
.cargo_target_dir
135+
.unwrap_or_else(|| cfg.scratch_dir.join("target"));
133136
for (manifest, files) in map.values().filter(|(_, files)| !files.is_empty()) {
134-
if let Some((ref db, ref vfs)) = RustAnalyzer::load_workspace(manifest, &cfg.scratch_dir) {
137+
if let Some((ref db, ref vfs)) = RustAnalyzer::load_workspace(manifest, target_dir) {
135138
let semantics = Semantics::new(db);
136139
for file in files {
137140
let Some(id) = path_to_file_id(file, vfs) else {

rust/extractor/src/rust_analyzer.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,11 @@ pub struct ParseResult<'a> {
4545
impl<'a> RustAnalyzer<'a> {
4646
pub fn load_workspace(
4747
project: &ProjectManifest,
48-
scratch_dir: &Path,
48+
target_dir: &Path,
4949
) -> Option<(RootDatabase, Vfs)> {
5050
let config = CargoConfig {
5151
sysroot: Some(RustLibSource::Discover),
52-
target_dir: ra_ap_paths::Utf8PathBuf::from_path_buf(scratch_dir.to_path_buf())
53-
.map(|x| x.join("target"))
54-
.ok(),
52+
target_dir: ra_ap_paths::Utf8PathBuf::from_path_buf(target_dir.to_path_buf()).ok(),
5553
..Default::default()
5654
};
5755
let progress = |t| (log::trace!("progress: {}", t));

0 commit comments

Comments
 (0)