@@ -28,6 +28,7 @@ import qualified Reporting.Doc as D
2828import qualified Reporting.Exit as Exit
2929import qualified Reporting.Exit.Diff as E
3030import qualified Reporting.Exit.Help as Help
31+import qualified Reporting.Render.Type.Localizer as L
3132import qualified Reporting.Task as Task
3233
3334
@@ -54,25 +55,25 @@ diff args =
5455 Right vsns ->
5556 do oldDocs <- getDocs name vsns (min v1 v2)
5657 newDocs <- getDocs name vsns (max v1 v2)
57− writeDoc (toDoc (Diff.diff oldDocs newDocs))
58+ writeDiff oldDocs newDocs
5859
5960 LocalInquiry v1 v2 ->
6061 do (_, name, vsns) <- getPackageInfo
6162 oldDocs <- getDocs name vsns (min v1 v2)
6263 newDocs <- getDocs name vsns (max v1 v2)
63− writeDoc (toDoc (Diff.diff oldDocs newDocs))
64+ writeDiff oldDocs newDocs
6465
6566 CodeVsLatest ->
6667 do (summary, name, vsns) <- getPackageInfo
6768 oldDocs <- getDocs name vsns (maximum vsns)
6869 newDocs <- Task.silently (Project.generateDocs summary)
69− writeDoc (toDoc (Diff.diff oldDocs newDocs))
70+ writeDiff oldDocs newDocs
7071
7172 CodeVsExactly version ->
7273 do (summary, name, vsns) <- getPackageInfo
7374 oldDocs <- getDocs name vsns version
7475 newDocs <- Task.silently (Project.generateDocs summary)
75− writeDoc (toDoc (Diff.diff oldDocs newDocs))
76+ writeDiff oldDocs newDocs
7677
7778
7879throw :: E.Exit -> Task.Task a
@@ -109,17 +110,21 @@ getPackageInfo =
109110-- WRITE DOC
110111
111112
112−writeDoc :: D.Doc -> Task.Task ()
113−writeDoc doc =
114− liftIO $ Help.toStdout (doc <> "\n")
113+writeDiff :: Docs.Documentation -> Docs.Documentation -> Task.Task ()
114+writeDiff oldDocs newDocs =
115+ let
116+ changes = Diff.diff oldDocs newDocs
117+ localizer = L.fromNames (Map.union oldDocs newDocs)
118+ in
119+ liftIO $ Help.toStdout (toDoc localizer changes <> "\n")
115120
116121
117122
118123-- TO DOC
119124
120125
121−toDoc :: PackageChanges -> D.Doc
122−toDoc changes@(PackageChanges added changed removed) =
126+toDoc :: L.Localizer -> PackageChanges -> D.Doc
127+toDoc localizer changes@(PackageChanges added changed removed) =
123128 if null added && Map.null changed && null removed then
124129 "No API changes detected, so this is a" <+> D.green "PATCH" <+> "change."
125130 else
@@ -143,7 +148,7 @@ toDoc changes@(PackageChanges added changed removed) =
143148 ]
144149
145150 chunks =
146− addedChunk ++ removedChunk ++ map changesToChunk (Map.toList changed)
151+ addedChunk ++ removedChunk ++ map (changesToChunk localizer) (Map.toList changed)
147152 in
148153 D.vcat (header : "" : map chunkToDoc chunks)
149154
@@ -174,23 +179,23 @@ chunkToDoc (Chunk title magnitude details) =
174179 ]
175180
176181
177−changesToChunk :: (N.Name, ModuleChanges) -> Chunk
178−changesToChunk (name, changes@(ModuleChanges unions aliases values binops)) =
182+changesToChunk :: L.Localizer -> (N.Name, ModuleChanges) -> Chunk
183+changesToChunk localizer (name, changes@(ModuleChanges unions aliases values binops)) =
179184 let
180185 magnitude =
181186 Diff.moduleChangeMagnitude changes
182187
183188 (unionAdd, unionChange, unionRemove) =
184− changesToDocTriple unionToDoc unions
189+ changesToDocTriple (unionToDoc localizer) unions
185190
186191 (aliasAdd, aliasChange, aliasRemove) =
187− changesToDocTriple aliasToDoc aliases
192+ changesToDocTriple (aliasToDoc localizer) aliases
188193
189194 (valueAdd, valueChange, valueRemove) =
190− changesToDocTriple valueToDoc values
195+ changesToDocTriple (valueToDoc localizer) values
191196
192197 (binopAdd, binopChange, binopRemove) =
193− changesToDocTriple binopToDoc binops
198+ changesToDocTriple (binopToDoc localizer) binops
194199 in
195200 Chunk (N.toString name) magnitude $
196201 D.vcat $ List.intersperse "" $ Maybe.catMaybes $
@@ -229,35 +234,35 @@ changesToDoc categoryName unions aliases values binops =
229234 D.fromString categoryName <> ":" : unions ++ aliases ++ binops ++ values
230235
231236
232−unionToDoc :: N.Name -> Docs.Union -> D.Doc
233−unionToDoc name (Docs.Union _ tvars ctors) =
237+unionToDoc :: L.Localizer -> N.Name -> Docs.Union -> D.Doc
238+unionToDoc localizer name (Docs.Union _ tvars ctors) =
234239 let
235240 setup =
236241 "type" <+> D.fromName name <+> D.hsep (map D.fromName tvars)
237242
238243 ctorDoc (ctor, tipes) =
239− typeDoc (Type.Type ctor tipes)
244+ typeDoc localizer (Type.Type ctor tipes)
240245 in
241246 D.hang 4 (D.sep (setup : zipWith (<+>) ("=" : repeat "|") (map ctorDoc ctors)))
242247
243248
244−aliasToDoc :: N.Name -> Docs.Alias -> D.Doc
245−aliasToDoc name (Docs.Alias _ tvars tipe) =
249+aliasToDoc :: L.Localizer -> N.Name -> Docs.Alias -> D.Doc
250+aliasToDoc localizer name (Docs.Alias _ tvars tipe) =
246251 let
247252 declaration =
248253 "type" <+> "alias" <+> D.hsep (map D.fromName (name:tvars)) <+> "="
249254 in
250− D.hang 4 (D.sep [ declaration, typeDoc tipe ])
255+ D.hang 4 (D.sep [ declaration, typeDoc localizer tipe ])
251256
252257
253−valueToDoc :: N.Name -> Docs.Value -> D.Doc
254−valueToDoc name (Docs.Value _ tipe) =
255− D.hang 4 $ D.sep [ D.fromName name <+> ":", typeDoc tipe ]
258+valueToDoc :: L.Localizer -> N.Name -> Docs.Value -> D.Doc
259+valueToDoc localizer name (Docs.Value _ tipe) =
260+ D.hang 4 $ D.sep [ D.fromName name <+> ":", typeDoc localizer tipe ]
256261
257262
258−binopToDoc :: N.Name -> Docs.Binop -> D.Doc
259−binopToDoc name (Docs.Binop _ tipe associativity (Docs.Precedence n)) =
260− "(" <> D.fromName name <> ")" <+> ":" <+> typeDoc tipe <> D.black details
263+binopToDoc :: L.Localizer -> N.Name -> Docs.Binop -> D.Doc
264+binopToDoc localizer name (Docs.Binop _ tipe associativity (Docs.Precedence n)) =
265+ "(" <> D.fromName name <> ")" <+> ":" <+> typeDoc localizer tipe <> D.black details
261266 where
262267 details =
263268 " (" <> D.fromName assoc <> "/" <> D.fromInt n <> ")"
@@ -269,6 +274,6 @@ binopToDoc name (Docs.Binop _ tipe associativity (Docs.Precedence n)) =
269274 Docs.Right -> "right"
270275
271276
272−typeDoc :: Type.Type -> D.Doc
273−typeDoc tipe =
274− Type.toDoc Type.None tipe
277+typeDoc :: L.Localizer -> Type.Type -> D.Doc
278+typeDoc localizer tipe =
279+ Type.toDoc localizer Type.None tipe