From 083b458301b2610141df6fb4808d45f20eb55527 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 28 Apr 2026 13:55:45 +0000 Subject: [PATCH] Add RUST_COVERAGE_IGNORE_REGEX for configurable coverage filtering The llvm-cov export step hardcodes two ignore patterns (external/, /tmp/). Projects often need additional filters for third-party C code, generated files, or stdlib sources, but editing the coverage script is not practical. Add support for the RUST_COVERAGE_IGNORE_REGEX environment variable: a comma-separated list of additional -ignore-filename-regex patterns passed to llvm-cov. Users can set this via --test_env in .bazelrc: coverage --test_env=RUST_COVERAGE_IGNORE_REGEX=.*third_party/.*,^bazel-out/ --- util/collect_coverage/collect_coverage.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/util/collect_coverage/collect_coverage.rs b/util/collect_coverage/collect_coverage.rs index 06097ea340..2a4f4125ca 100644 --- a/util/collect_coverage/collect_coverage.rs +++ b/util/collect_coverage/collect_coverage.rs @@ -190,7 +190,20 @@ fn main() { .arg("-instr-profile") .arg(&profdata_file) .arg("-ignore-filename-regex=.*external/.+") - .arg("-ignore-filename-regex=/tmp/.+") + .arg("-ignore-filename-regex=/tmp/.+"); + + // Allow additional ignore patterns via RUST_COVERAGE_IGNORE_REGEX env var + // (comma-separated list of regexes passed to llvm-cov -ignore-filename-regex). + if let Ok(extra) = env::var("RUST_COVERAGE_IGNORE_REGEX") { + for pattern in extra.split(',') { + let pattern = pattern.trim(); + if !pattern.is_empty() { + llvm_cov_cmd.arg(format!("-ignore-filename-regex={}", pattern)); + } + } + } + + llvm_cov_cmd .arg(format!("-path-equivalence=.,{}", execroot.display())) .arg(test_binary) .stdout(process::Stdio::piped())