Skip to content

Commit d7f5c11

Browse files
brynaryclaude
andcommitted
refactor(coverage): rename JavaSrcDirFinder to SrcDirFinder and add CLI options
- Rename `java_src_dirs` to `src_search_dirs` in Settings - Rename `JavaSrcDirFinder` to `SrcDirFinder` (and rename file) - Update user-facing output from "Discovered Java source directories" to "Source search directories" - Add `--add-src-dir` CLI option to manually specify source directories (takes precedence over auto-discovered) - Add `--remove-src-dir` CLI option to exclude directories from the search list - Add warning when a file is found in multiple source directories 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent aa57cff commit d7f5c11

File tree

8 files changed

+148
-115
lines changed

8 files changed

+148
-115
lines changed

qlty-cli/src/commands/coverage/publish.rs

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use qlty_coverage::print::{print_report_as_json, print_report_as_text};
1414
use qlty_coverage::publish::{Plan, Planner, Processor, Reader, Report, Settings, Upload};
1515
use qlty_coverage::token::load_auth_token;
1616
use qlty_coverage::validate::{ValidationStatus, Validator};
17-
use qlty_coverage::{ExclusionStrategy, JavaSrcDirFinder};
17+
use qlty_coverage::{ExclusionStrategy, SrcDirFinder};
1818
use std::io::Write as _;
1919
use std::path::PathBuf;
2020
use std::time::Instant;
@@ -41,6 +41,15 @@ pub struct Publish {
4141
/// and use them to resolve file paths in coverage reports.
4242
pub discover_java_src_dirs: bool,
4343

44+
#[arg(long = "add-src-dir", hide = true)]
45+
/// Add a source directory to search for files. Can be specified multiple times.
46+
/// These directories take precedence over auto-discovered directories.
47+
pub add_src_dirs: Vec<PathBuf>,
48+
49+
#[arg(long = "remove-src-dir", hide = true)]
50+
/// Remove a source directory from the search list. Can be specified multiple times.
51+
pub remove_src_dirs: Vec<PathBuf>,
52+
4453
#[arg(long, hide = true)]
4554
pub output_dir: Option<PathBuf>,
4655

@@ -256,24 +265,31 @@ impl Publish {
256265

257266
let root = std::env::current_dir()?;
258267
let config = load_config();
259-
let java_src_dirs = if self.discover_java_src_dirs {
260-
let exclusion_strategy = if config.exclude_patterns.is_empty() {
268+
269+
let mut src_search_dirs = self.add_src_dirs.clone();
270+
if self.discover_java_src_dirs {
271+
let exclusion_strategy = if !self.remove_src_dirs.is_empty() {
272+
let patterns: Vec<String> = self
273+
.remove_src_dirs
274+
.iter()
275+
.map(|p| format!("{}/**", p.display()))
276+
.collect();
277+
ExclusionStrategy::UserDefined(patterns)
278+
} else if config.exclude_patterns.is_empty() {
261279
ExclusionStrategy::DefaultHeuristics
262280
} else {
263281
ExclusionStrategy::UserDefined(config.exclude_patterns)
264282
};
265-
let finder = JavaSrcDirFinder::new(root.clone(), exclusion_strategy);
266-
finder.find()?
267-
} else {
268-
Vec::new()
269-
};
283+
let finder = SrcDirFinder::new(root.clone(), exclusion_strategy);
284+
src_search_dirs.extend(finder.find()?);
285+
}
270286

271287
Ok(Settings {
272288
add_prefix,
273289
dry_run: self.dry_run,
274290
discover_java_src_dirs: self.discover_java_src_dirs,
275291
root,
276-
java_src_dirs,
292+
src_search_dirs,
277293
incomplete,
278294
name: self.name.clone(),
279295
output_dir: self.output_dir.clone(),
@@ -320,13 +336,10 @@ impl Publish {
320336
return;
321337
}
322338

323-
if settings.discover_java_src_dirs
324-
&& !settings.java_src_dirs.is_empty()
325-
&& std::env::var("JACOCO_SOURCE_PATH").is_ok()
326-
{
327-
eprintln!("WARNING: Both --discover-java-src-dirs and JACOCO_SOURCE_PATH are set.");
339+
if !settings.src_search_dirs.is_empty() && std::env::var("JACOCO_SOURCE_PATH").is_ok() {
340+
eprintln!("WARNING: Both source search directories and JACOCO_SOURCE_PATH are set.");
328341
eprintln!("JACOCO_SOURCE_PATH applies during JaCoCo parsing.");
329-
eprintln!("--discover-java-src-dirs applies to all formats during processing.\n");
342+
eprintln!("Source search directories (--add-src-dir/--discover-java-src-dirs) apply to all formats during processing.\n");
330343
}
331344
}
332345

qlty-cli/src/commands/coverage/utils.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,16 @@ pub fn print_settings(settings: &Settings) {
108108

109109
eprintln!();
110110

111-
// Print discovered Java src dirs as a sub-section if --discover-java-src-dirs is enabled
112-
if settings.discover_java_src_dirs {
113-
eprintln!(" discover-java-src-dirs: true");
111+
if settings.discover_java_src_dirs || !settings.src_search_dirs.is_empty() {
112+
if settings.discover_java_src_dirs {
113+
eprintln!(" discover-java-src-dirs: true");
114+
}
114115
eprintln!();
115-
eprintln!(" Discovered Java source directories:");
116-
if settings.java_src_dirs.is_empty() {
116+
eprintln!(" Source search directories:");
117+
if settings.src_search_dirs.is_empty() {
117118
eprintln!(" (none found)");
118119
} else {
119-
for dir in &settings.java_src_dirs {
120+
for dir in &settings.src_search_dirs {
120121
eprintln!(" {}", dir.display());
121122
}
122123
}

qlty-cli/tests/cmd/coverage/discover_java_src_dirs.stderr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ https://qlty.sh/d/coverage
1212

1313
discover-java-src-dirs: true
1414

15-
Discovered Java source directories:
15+
Source search directories:
1616
src/main/java
1717

1818
METADATA

qlty-coverage/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ mod env;
33
pub mod export;
44
pub mod formats;
55
pub mod git;
6-
mod java_src_dir_finder;
76
pub mod parser;
87
pub mod print;
98
pub mod publish;
9+
mod src_dir_finder;
1010
pub mod token;
1111
pub mod transform;
1212
mod transformer;
1313
mod utils;
1414
pub mod validate;
1515

16-
pub use java_src_dir_finder::{ExclusionStrategy, JavaSrcDirFinder};
16+
pub use src_dir_finder::{ExclusionStrategy, SrcDirFinder};
1717

1818
#[macro_use]
1919
mod macros;

qlty-coverage/src/publish/planner.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,10 @@ impl Planner {
115115

116116
// Add PrependSrcDir transformer if Java src dirs were discovered
117117
// This runs after path normalization so it receives clean relative paths
118-
if !self.settings.java_src_dirs.is_empty() {
118+
if !self.settings.src_search_dirs.is_empty() {
119119
transformers.push(Box::new(PrependSrcDir::new(
120120
self.settings.root.clone(),
121-
self.settings.java_src_dirs.clone(),
121+
self.settings.src_search_dirs.clone(),
122122
)));
123123
}
124124

qlty-coverage/src/publish/settings.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ pub struct Settings {
99
pub dry_run: bool,
1010
pub discover_java_src_dirs: bool,
1111
pub root: PathBuf,
12-
pub java_src_dirs: Vec<PathBuf>,
12+
pub src_search_dirs: Vec<PathBuf>,
1313
pub incomplete: bool,
1414
pub name: Option<String>,
1515
pub output_dir: Option<PathBuf>,

0 commit comments

Comments
 (0)