mirror of
https://github.com/github/codeql.git
synced 2026-04-25 08:45:14 +02:00
Merge pull request #17931 from github/redsun82/rust-target-dir
Rust: allow to specify the target directory
This commit is contained in:
@@ -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)$"
|
||||
|
||||
@@ -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! {
|
||||
|
||||
@@ -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>,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user