diff --git a/crates/forge/src/cmd/coverage.rs b/crates/forge/src/cmd/coverage.rs
index 3b2e04eb88b26..729f96e5a9838 100644
--- a/crates/forge/src/cmd/coverage.rs
+++ b/crates/forge/src/cmd/coverage.rs
@@ -75,6 +75,10 @@ pub struct CoverageArgs {
#[arg(long)]
include_libs: bool,
+ /// Whether to exclude tests from the coverage report.
+ #[arg(long)]
+ exclude_tests: bool,
+
/// The coverage reporters to use. Constructed from the other fields.
#[arg(skip)]
reporters: Vec<Box<dyn CoverageReporter>>,
@@ -194,8 +198,10 @@ impl CoverageArgs {
for (path, source_file, version) in output.output().sources.sources_with_version() {
report.add_source(version.clone(), source_file.id as usize, path.clone());
- // Filter out dependencies.
- if !self.include_libs && project_paths.has_library_ancestor(path) {
+ // Filter out libs dependencies and tests.
+ if (!self.include_libs && project_paths.has_library_ancestor(path)) ||
+ (self.exclude_tests && project_paths.is_test(path))
+ {
continue;
}