Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 28 additions & 15 deletions qlty-cli/src/commands/coverage/publish.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use qlty_coverage::print::{print_report_as_json, print_report_as_text};
use qlty_coverage::publish::{Plan, Planner, Processor, Reader, Report, Settings, Upload};
use qlty_coverage::token::load_auth_token;
use qlty_coverage::validate::{ValidationStatus, Validator};
use qlty_coverage::{ExclusionStrategy, JavaSrcDirFinder};
use qlty_coverage::{ExclusionStrategy, SrcDirFinder};
use std::io::Write as _;
use std::path::PathBuf;
use std::time::Instant;
Expand All @@ -41,6 +41,15 @@ pub struct Publish {
/// and use them to resolve file paths in coverage reports.
pub discover_java_src_dirs: bool,

#[arg(long = "add-src-dir", hide = true)]
/// Add a source directory to search for files. Can be specified multiple times.
/// These directories take precedence over auto-discovered directories.
pub add_src_dirs: Vec<PathBuf>,

#[arg(long = "remove-src-dir", hide = true)]
/// Remove a source directory from the search list. Can be specified multiple times.
pub remove_src_dirs: Vec<PathBuf>,

#[arg(long, hide = true)]
pub output_dir: Option<PathBuf>,

Expand Down Expand Up @@ -256,24 +265,31 @@ impl Publish {

let root = std::env::current_dir()?;
let config = load_config();
let java_src_dirs = if self.discover_java_src_dirs {
let exclusion_strategy = if config.exclude_patterns.is_empty() {

let mut src_search_dirs = self.add_src_dirs.clone();
if self.discover_java_src_dirs {
let exclusion_strategy = if !self.remove_src_dirs.is_empty() {
let patterns: Vec<String> = self
.remove_src_dirs
.iter()
.map(|p| format!("{}/**", p.display()))
.collect();
ExclusionStrategy::UserDefined(patterns)
} else if config.exclude_patterns.is_empty() {
ExclusionStrategy::DefaultHeuristics
} else {
ExclusionStrategy::UserDefined(config.exclude_patterns)
};
let finder = JavaSrcDirFinder::new(root.clone(), exclusion_strategy);
finder.find()?
} else {
Vec::new()
};
let finder = SrcDirFinder::new(root.clone(), exclusion_strategy);
src_search_dirs.extend(finder.find()?);
}

Ok(Settings {
add_prefix,
dry_run: self.dry_run,
discover_java_src_dirs: self.discover_java_src_dirs,
root,
java_src_dirs,
src_search_dirs,
incomplete,
name: self.name.clone(),
output_dir: self.output_dir.clone(),
Expand Down Expand Up @@ -320,13 +336,10 @@ impl Publish {
return;
}

if settings.discover_java_src_dirs
&& !settings.java_src_dirs.is_empty()
&& std::env::var("JACOCO_SOURCE_PATH").is_ok()
{
eprintln!("WARNING: Both --discover-java-src-dirs and JACOCO_SOURCE_PATH are set.");
if !settings.src_search_dirs.is_empty() && std::env::var("JACOCO_SOURCE_PATH").is_ok() {
eprintln!("WARNING: Both source search directories and JACOCO_SOURCE_PATH are set.");
eprintln!("JACOCO_SOURCE_PATH applies during JaCoCo parsing.");
eprintln!("--discover-java-src-dirs applies to all formats during processing.\n");
eprintln!("Source search directories (--add-src-dir/--discover-java-src-dirs) apply to all formats during processing.\n");
}
}

Expand Down
13 changes: 7 additions & 6 deletions qlty-cli/src/commands/coverage/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,15 +108,16 @@ pub fn print_settings(settings: &Settings) {

eprintln!();

// Print discovered Java src dirs as a sub-section if --discover-java-src-dirs is enabled
if settings.discover_java_src_dirs {
eprintln!(" discover-java-src-dirs: true");
if settings.discover_java_src_dirs || !settings.src_search_dirs.is_empty() {
if settings.discover_java_src_dirs {
eprintln!(" discover-java-src-dirs: true");
}
eprintln!();
eprintln!(" Discovered Java source directories:");
if settings.java_src_dirs.is_empty() {
eprintln!(" Source search directories:");
if settings.src_search_dirs.is_empty() {
eprintln!(" (none found)");
} else {
for dir in &settings.java_src_dirs {
for dir in &settings.src_search_dirs {
eprintln!(" {}", dir.display());
}
}
Expand Down
2 changes: 1 addition & 1 deletion qlty-cli/tests/cmd/coverage/discover_java_src_dirs.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ https://qlty.sh/d/coverage

discover-java-src-dirs: true

Discovered Java source directories:
Source search directories:
src/main/java

METADATA
Expand Down
4 changes: 2 additions & 2 deletions qlty-coverage/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@ mod env;
pub mod export;
pub mod formats;
pub mod git;
mod java_src_dir_finder;
pub mod parser;
pub mod print;
pub mod publish;
mod src_dir_finder;
pub mod token;
pub mod transform;
mod transformer;
mod utils;
pub mod validate;

pub use java_src_dir_finder::{ExclusionStrategy, JavaSrcDirFinder};
pub use src_dir_finder::{ExclusionStrategy, SrcDirFinder};

#[macro_use]
mod macros;
Expand Down
4 changes: 2 additions & 2 deletions qlty-coverage/src/publish/planner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,10 @@ impl Planner {

// Add PrependSrcDir transformer if Java src dirs were discovered
// This runs after path normalization so it receives clean relative paths
if !self.settings.java_src_dirs.is_empty() {
if !self.settings.src_search_dirs.is_empty() {
transformers.push(Box::new(PrependSrcDir::new(
self.settings.root.clone(),
self.settings.java_src_dirs.clone(),
self.settings.src_search_dirs.clone(),
)));
}

Expand Down
2 changes: 1 addition & 1 deletion qlty-coverage/src/publish/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ pub struct Settings {
pub dry_run: bool,
pub discover_java_src_dirs: bool,
pub root: PathBuf,
pub java_src_dirs: Vec<PathBuf>,
pub src_search_dirs: Vec<PathBuf>,
pub incomplete: bool,
pub name: Option<String>,
pub output_dir: Option<PathBuf>,
Expand Down
Loading
Loading