3
3
haskell.nix can generate coverage information for your package or
4
4
project using Cabal's inbuilt hpc support.
5
5
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
+
6
36
## Per-package
7
37
8
38
``` bash
9
- nix-build default.nix -A " $pkg .coverageReport'"
39
+ nix-build default.nix -A " projectWithCoverage. $pkg .coverageReport'"
10
40
```
11
41
12
42
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
18
48
## Project-wide
19
49
20
50
``` bash
21
- nix-build default.nix -A " projectCoverageReport'"
51
+ nix-build default.nix -A " projectWithCoverage. projectCoverageReport'"
22
52
```
23
53
24
54
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
28
58
29
59
## Custom
30
60
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.
33
66
These are found in the haskell.nix library:
34
67
35
68
``` nix
36
69
let
37
70
inherit (pkgs.haskell-nix) haskellLib;
38
71
39
72
project = pkgs.haskell-nix.project {
40
- # 'cleanGit' cleans a source directory based on the files known by git
41
73
src = pkgs.haskell-nix.haskellLib.cleanGit {
42
74
name = "haskell-nix-project";
43
75
src = ./.;
46
78
compiler-nix-name = "ghc884"; # Not used for `stack.yaml` based projects.
47
79
};
48
80
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.
49
88
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;
52
91
};
53
92
93
+ # Override the coverage report for a package, and also choose which
94
+ # packages you want included in the coverage report.
54
95
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; };
57
98
};
58
- in project // {
59
- inherit custom$pkgCoverageReport customProjectCoverageReport;
99
+ in {
100
+ inherit project projectWithCoverage custom$pkgCoverageReport customProjectCoverageReport;
60
101
}
61
102
62
103
```
0 commit comments