Skip to content

Commit 24f3b6e

Browse files
committed
Update doco to match new "overrideModules" workflow
1 parent df07b02 commit 24f3b6e

File tree

1 file changed

+52
-11
lines changed

1 file changed

+52
-11
lines changed

docs/tutorials/coverage.md

Lines changed: 52 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,40 @@
33
haskell.nix can generate coverage information for your package or
44
project using Cabal's inbuilt hpc support.
55

6+
## Prerequisites
7+
8+
To get a sensible coverage report, you need to enable coverage on each
9+
of the components of your project. We recommend you use the
10+
`overrideModules` function to do this:
11+
12+
```nix
13+
let
14+
inherit (pkgs.haskell-nix) haskellLib;
15+
16+
project = pkgs.haskell-nix.project {
17+
src = pkgs.haskell-nix.haskellLib.cleanGit {
18+
name = "haskell-nix-project";
19+
src = ./.;
20+
};
21+
# For `cabal.project` based projects specify the GHC version to use.
22+
compiler-nix-name = "ghc884"; # Not used for `stack.yaml` based projects.
23+
};
24+
25+
projectWithCoverage = project.overrideModules(oldModules: oldModules ++ [{
26+
packages.$pkg.components.library.doCoverage = true;
27+
packages.$pkg.components.tests.a-test.doCoverage = true;
28+
}]);
29+
30+
in {
31+
inherit project projectWithCoverage;
32+
}
33+
34+
```
35+
636
## Per-package
737

838
```bash
9-
nix-build default.nix -A "$pkg.coverageReport'"
39+
nix-build default.nix -A "projectWithCoverage.$pkg.coverageReport'"
1040
```
1141

1242
This will generate a coverage report for the package you requested. By
@@ -18,7 +48,7 @@ See the [developer coverage docs](../dev/coverage.md#package-reports) for more i
1848
## Project-wide
1949

2050
```bash
21-
nix-build default.nix -A "projectCoverageReport'"
51+
nix-build default.nix -A "projectWithCoverage.projectCoverageReport'"
2252
```
2353

2454
This will generate a coverage report for all the local packages in
@@ -28,16 +58,18 @@ See the [developer coverage docs](../dev/coverage.md#project-wide-reports) for m
2858

2959
## Custom
3060

31-
haskell.nix also exposes two functions which allow you to generate
32-
custom coverage reports: `coverageReport` and `projectCoverageReport`.
61+
By default, `projectCoverageReport'` generates a coverage report
62+
including all the packages in your project, and `coverageReport'`
63+
generates a report for the library and all enabled tests in the
64+
requested package. You can modify what is included in each report by
65+
using the `coverageReport` and `projectCoverageReport` functions.
3366
These are found in the haskell.nix library:
3467

3568
```nix
3669
let
3770
inherit (pkgs.haskell-nix) haskellLib;
3871
3972
project = pkgs.haskell-nix.project {
40-
# 'cleanGit' cleans a source directory based on the files known by git
4173
src = pkgs.haskell-nix.haskellLib.cleanGit {
4274
name = "haskell-nix-project";
4375
src = ./.;
@@ -46,17 +78,26 @@ let
4678
compiler-nix-name = "ghc884"; # Not used for `stack.yaml` based projects.
4779
};
4880
81+
projectWithCoverage = project.overrideModules(oldModules: oldModules ++ [{
82+
packages.$pkg.components.library.doCoverage = true;
83+
packages.$pkg.components.tests.a-test.doCoverage = true;
84+
}]);
85+
86+
# Choose the library and tests you want included in the coverage
87+
# report for a package.
4988
custom$pkgCoverageReport = haskellLib.coverageReport {
50-
inherit (project.$pkg.identifier) name version;
51-
inherit (project.$pkg.components) library tests;
89+
inherit (projectWithCoverage.$pkg.identifier) name version;
90+
inherit (projectWithCoverage.$pkg.components) library tests;
5291
};
5392
93+
# Override the coverage report for a package, and also choose which
94+
# packages you want included in the coverage report.
5495
customProjectCoverageReport = haskellLib.projectCoverageReport {
55-
packages = haskellLib.selectProjectPackages project;
56-
coverageReportOverrides = { "${project.$pkg.identifier.name}" = custom$pkgCoverageReport; };
96+
packages = haskellLib.selectProjectPackages projectWithCoverage;
97+
coverageReportOverrides = { "${projectWithCoverage.$pkg.identifier.name}" = custom$pkgCoverageReport; };
5798
};
58-
in project // {
59-
inherit custom$pkgCoverageReport customProjectCoverageReport;
99+
in {
100+
inherit project projectWithCoverage custom$pkgCoverageReport customProjectCoverageReport;
60101
}
61102
62103
```

0 commit comments

Comments
 (0)