Is your feature request related to a problem?
Seems like nix lang have zero coverage tool
Proposed solution
Thru environment, like NODE_V8_COVERAGE
Collect coverage for nix build
$ export NIX_COVERAGE=...
$ nix build ...
Collect coverage for configuration.nix and nested imports
$ export NIX_COVERAGE=...
$ nixos-rebuild ...
Collect coverage for nix expr
$ export NIX_COVERAGE=...
$ nix eval ...
Programmatically
https://nodejs.org/api/v8.html#v8takecoverage
https://pptr.dev/next/api/puppeteer.coverage#example
https://playwright.dev/docs/api/class-coverage
await page.coverage.startJSCoverage();
await page.goto('https://chromium.org');
const coverage = await page.coverage.stopJSCoverage();
start/stopCoverage region is good, but seems cannot apply to nix lang, thus suggest
expr = builtins.withCoverage expr
Alternative solutions
Additional context
Generated code included.
Not yet verify all of them.
Just a prove of prior Art.
javascript
playwrigtht programmatically
https://playwright.dev/docs/api/class-coverage
await coverage.startCSSCoverage(options);
await page.coverage.startJSCoverage();
await page.goto('https://chromium.org');
const coverage = await page.coverage.stopJSCoverage();
puppeteer programmatically
https://pptr.dev/next/api/puppeteer.coverage#example
await Promise.all([
page.coverage.startJSCoverage(),
page.coverage.startCSSCoverage(),
]);
await page.goto('https://example.com');
const [jsCoverage, cssCoverage] = await Promise.all([
page.coverage.stopJSCoverage(),
page.coverage.stopCSSCoverage(),
]);
node
node coverage for file
node coverage for expression
$ NODE_V8_COVERAGE=. node -e 'console.log(42)'
42
This wil collect coverage into ./coverage-XXX-XXX-XXX.json
node programmatically
https://nodejs.org/api/v8.html#v8takecoverage
deno
deno test --coverage=cov_profile && deno coverage cov_profile
bun
C
gcc -fprofile-arcs -ftest-coverage -o test test.c && ./test && gcovr --print-summary
C++
g++ -fprofile-arcs -ftest-coverage -o test test.cpp && ./test && gcovr --print-summary
go
go test -coverprofile=coverage.out ./... && go tool cover -func=coverage.out | grep total | awk '{print $3}'
lua
lua -lluacov test.lua && luacov . && luacov-console .
python
pytest --cov=. --cov-report=term
ruby
ruby -r simplecov -e 'SimpleCov.start; Dir.glob("test/**/*_test.rb").each{|f| require "./#{f}"}; puts "Coverage: #{SimpleCov.result.covered_percent.round(2)}%"'
rust
cargo tarpaulin --out Stdout
shellscript
bash
bashcov ./script.sh && ruby -rjson -e 'puts JSON.parse(File.read("coverage/coverage.json"))["covered_percent"]'
zsh
No widely‑adopted coverage tool; consider running scripts with bashcov (bash) or limited kcov support.
Checklist
Add 👍 to issues you find important.
Is your feature request related to a problem?
Seems like nix lang have zero coverage tool
Proposed solution
Thru environment, like
NODE_V8_COVERAGECollect coverage for nix build
Collect coverage for
configuration.nixand nestedimportsCollect coverage for nix expr
Programmatically
https://nodejs.org/api/v8.html#v8takecoverage
https://pptr.dev/next/api/puppeteer.coverage#example
https://playwright.dev/docs/api/class-coverage
start/stopCoverageregion is good, but seems cannot apply to nix lang, thus suggestAlternative solutions
Additional context
Generated code included.
Not yet verify all of them.
Just a prove of prior Art.
javascript
playwrigtht programmatically
https://playwright.dev/docs/api/class-coverage
puppeteer programmatically
https://pptr.dev/next/api/puppeteer.coverage#example
node
node coverage for file
node coverage for expression
This wil collect coverage into
./coverage-XXX-XXX-XXX.jsonnode programmatically
https://nodejs.org/api/v8.html#v8takecoverage
deno
bun
bun test --coverageC
C++
go
lua
python
ruby
ruby -r simplecov -e 'SimpleCov.start; Dir.glob("test/**/*_test.rb").each{|f| require "./#{f}"}; puts "Coverage: #{SimpleCov.result.covered_percent.round(2)}%"'rust
shellscript
bash
zsh
No widely‑adopted coverage tool; consider running scripts with bashcov (bash) or limited kcov support.
Checklist
Add 👍 to issues you find important.