on master help sign in
ormolu/default.nix
169 lines 4.8 kB history raw
1{ pkgs ? (import ./nix/nixpkgs { inherit system; })
2, system ? builtins.currentSystem
3, ormoluCompiler ? "ghc884" # the shell doesn't work with ghc8101 yet
4}:
6let
7 source = pkgs.lib.sourceByRegex ./. [
8 "^.*\.md$"
9 "^app.*$"
10 "^data.*$"
11 "^ormolu\.cabal$"
12 "^src.*$"
13 "^tests.*$"
14 ];
15 haskellPackages = pkgs.haskell.packages.${ormoluCompiler}.override {
16 overrides = ormoluOverlay;
17 };
18 ormoluOverlay = self: super: {
19 "ormolu" = super.callCabal2nixWithOptions "ormolu" source "-fdev" { };
20 };
21 ormolize = import ./nix/ormolize {
22 inherit pkgs;
23 inherit haskellPackages;
24 };
25 expectedFailures = [
26 "Agda"
27 "aws"
28 "distributed-process"
29 "esqueleto"
30 "fay"
31 "hlint"
32 "idris"
33 "intero"
34 "leksah"
35 "pandoc"
36 "pipes"
37 "postgrest"
38 "purescript"
39 "tensorflow"
40 ] ++ (if ormoluCompiler == "ghc8101" then [] else ["lens"]);
41 ormolizedPackages = doCheck:
42 pkgs.lib.mapAttrs (name: p: ormolize {
43 package = p;
44 inherit doCheck;
45 expectedFailures =
46 if pkgs.lib.lists.any (x: x == name) expectedFailures
47 then ./expected-failures + "/${name}.txt"
48 else null;
49 }) haskellPackages;
50in {
51 ormolu = haskellPackages.ormolu;
52 # We put the derivations in another attribute set to avoid building them
53 # when nix-build is run.
54 dev = {
55 ormoluShell =
56 haskellPackages.shellFor {
57 packages = ps: [
58 ps.ormolu
59 ];
60 buildInputs = [
61 haskellPackages.cabal-install
62 haskellPackages.ghcid
63 ];
64 };
65 withOrmolu = haskellPackages.shellFor {
66 packages = ps: [];
67 buildInputs = [
68 haskellPackages.cabal-install
69 haskellPackages.ormolu
70 ];
71 };
72 };
73 inherit ormoluOverlay ormoluCompiler;
74 hackage = ormolizedPackages false;
75 hackageTests = with pkgs.lib; pkgs.recurseIntoAttrs (
76 let ps = [
77 "Agda"
78 "QuickCheck"
79 "ShellCheck"
80 "aeson"
81 "attoparsec"
82 "aws"
83 "brick"
84 "capability"
85 "cassava"
86 "conduit"
87 "cryptonite"
88 "diagrams-core"
89 "distributed-process"
90 "esqueleto"
91 "fay"
92 "hakyll"
93 "haxl"
94 "hedgehog"
95 "hledger"
96 "hlint"
97 "http-client"
98 "idris"
99 "intero"
100 "leksah"
101 "lens"
102 "megaparsec"
103 "optics"
104 "ormolu"
105 "pandoc"
106 "parsec3"
107 "pipes"
108 "postgrest"
109 "purescript"
110 "servant"
111 "servant-server"
112 "stack"
113 "tensorflow"
114 "text_1_2_4_0"
115 "tls"
116 "yesod-core"
117 ];
118 in listToAttrs (map (p: nameValuePair p (ormolizedPackages true).${p}) ps)
119 );
120 regionTests = pkgs.stdenv.mkDerivation {
121 name = "ormolu-region-tests";
122 src = ./region-tests;
123 buildInputs = [
124 haskellPackages.ormolu
125 pkgs.diffutils
126 ];
127 doCheck = true;
128 buildPhase = ''
129 cp src.hs result-all-implicit.hs
130 ormolu --check-idempotence --mode inplace result-all-implicit.hs
131 cp src.hs result-all-explicit.hs
132 ormolu --check-idempotence --mode inplace --start-line 1 --end-line 18 result-all-explicit.hs
133 cp src.hs result-only-start.hs
134 ormolu --check-idempotence --mode inplace --start-line 1 result-only-start.hs
135 cp src.hs result-only-end.hs
136 ormolu --check-idempotence --mode inplace --end-line 18 result-only-end.hs
137 cp src.hs result-6-7.hs
138 ormolu --check-idempotence --mode inplace --start-line 6 --end-line 7 result-6-7.hs
139 cp src.hs result-6-8.hs
140 ormolu --check-idempotence --mode inplace --start-line 6 --end-line 8 result-6-8.hs
141 cp src.hs result-9-12.hs
142 ormolu --check-idempotence --mode inplace --start-line 9 --end-line 12 result-9-12.hs
143 cp src.hs result-17-18.hs
144 ormolu --check-idempotence --mode inplace --start-line 17 --end-line 18 result-17-18.hs
145 '';
146 checkPhase = ''
147 echo result-all-implicit.hs
148 diff --color=always expected-result-all.hs result-all-implicit.hs
149 echo result-all-explicit.hs
150 diff --color=always expected-result-all.hs result-all-explicit.hs
151 echo result-only-start.hs
152 diff --color=always expected-result-all.hs result-only-start.hs
153 echo result-only-end.hs
154 diff --color=always expected-result-all.hs result-only-end.hs
155 echo result-6-7.hs
156 diff --color=always expected-result-6-7.hs result-6-7.hs
157 echo result-6-8.hs
158 diff --color=always expected-result-6-8.hs result-6-8.hs
159 echo result-9-12.hs
160 diff --color=always expected-result-9-12.hs result-9-12.hs
161 echo result-17-18.hs
162 diff --color=always expected-result-17-18.hs result-17-18.hs
163 '';
164 installPhase = ''
165 mkdir "$out"
166 find . -name '*.hs' -exec cp --parents {} $out \;
167 '';
168 };