@@ -28,6 +28,7 @@ import qualified Reporting.Doc as D
28import qualified Reporting.Exit as Exit
28import qualified Reporting.Exit as Exit
29import qualified Reporting.Exit.Diff as E
29import qualified Reporting.Exit.Diff as E
30import qualified Reporting.Exit.Help as Help
30import qualified Reporting.Exit.Help as Help
31+import qualified Reporting.Render.Type.Localizer as L
31import qualified Reporting.Task as Task
32import qualified Reporting.Task as Task
@@ -54,25 +55,25 @@ diff args =
54 Right vsns ->
55 Right vsns ->
55 do oldDocs <- getDocs name vsns (min v1 v2)
56 do oldDocs <- getDocs name vsns (min v1 v2)
56 newDocs <- getDocs name vsns (max v1 v2)
57 newDocs <- getDocs name vsns (max v1 v2)
57− writeDoc (toDoc (Diff.diff oldDocs newDocs))
58+ writeDiff oldDocs newDocs
59 LocalInquiry v1 v2 ->
60 LocalInquiry v1 v2 ->
60 do (_, name, vsns) <- getPackageInfo
61 do (_, name, vsns) <- getPackageInfo
61 oldDocs <- getDocs name vsns (min v1 v2)
62 oldDocs <- getDocs name vsns (min v1 v2)
62 newDocs <- getDocs name vsns (max v1 v2)
63 newDocs <- getDocs name vsns (max v1 v2)
63− writeDoc (toDoc (Diff.diff oldDocs newDocs))
64+ writeDiff oldDocs newDocs
65 CodeVsLatest ->
66 CodeVsLatest ->
66 do (summary, name, vsns) <- getPackageInfo
67 do (summary, name, vsns) <- getPackageInfo
67 oldDocs <- getDocs name vsns (maximum vsns)
68 oldDocs <- getDocs name vsns (maximum vsns)
68 newDocs <- Task.silently (Project.generateDocs summary)
69 newDocs <- Task.silently (Project.generateDocs summary)
69− writeDoc (toDoc (Diff.diff oldDocs newDocs))
70+ writeDiff oldDocs newDocs
71 CodeVsExactly version ->
72 CodeVsExactly version ->
72 do (summary, name, vsns) <- getPackageInfo
73 do (summary, name, vsns) <- getPackageInfo
73 oldDocs <- getDocs name vsns version
74 oldDocs <- getDocs name vsns version
74 newDocs <- Task.silently (Project.generateDocs summary)
75 newDocs <- Task.silently (Project.generateDocs summary)
75− writeDoc (toDoc (Diff.diff oldDocs newDocs))
76+ writeDiff oldDocs newDocs
78throw :: E.Exit -> Task.Task a
79throw :: E.Exit -> Task.Task a
@@ -109,17 +110,21 @@ getPackageInfo =
109-- WRITE DOC
110-- WRITE DOC
112−writeDoc :: D.Doc -> Task.Task ()
113+writeDiff :: Docs.Documentation -> Docs.Documentation -> Task.Task ()
113−writeDoc doc =
114+writeDiff oldDocs newDocs =
116+ changes = Diff.diff oldDocs newDocs
117+ localizer = L.fromNames (Map.union oldDocs newDocs)
114− liftIO $ Help.toStdout (doc <> "\n")
119+ liftIO $ Help.toStdout (toDoc localizer changes <> "\n")
121−toDoc :: PackageChanges -> D.Doc
126+toDoc :: L.Localizer -> PackageChanges -> D.Doc
122−toDoc changes@(PackageChanges added changed removed) =
127+toDoc localizer changes@(PackageChanges added changed removed) =
123 if null added && Map.null changed && null removed then
128 if null added && Map.null changed && null removed then
124 "No API changes detected, so this is a" <+> D.green "PATCH" <+> "change."
129 "No API changes detected, so this is a" <+> D.green "PATCH" <+> "change."
@@ -143,7 +148,7 @@ toDoc changes@(PackageChanges added changed removed) =
146− addedChunk ++ removedChunk ++ map changesToChunk (Map.toList changed)
151+ addedChunk ++ removedChunk ++ map (changesToChunk localizer) (Map.toList changed)
148 D.vcat (header : "" : map chunkToDoc chunks)
153 D.vcat (header : "" : map chunkToDoc chunks)
@@ -174,23 +179,23 @@ chunkToDoc (Chunk title magnitude details) =
177−changesToChunk :: (N.Name, ModuleChanges) -> Chunk
182+changesToChunk :: L.Localizer -> (N.Name, ModuleChanges) -> Chunk
178−changesToChunk (name, changes@(ModuleChanges unions aliases values binops)) =
183+changesToChunk localizer (name, changes@(ModuleChanges unions aliases values binops)) =
180 magnitude =
185 magnitude =
181 Diff.moduleChangeMagnitude changes
186 Diff.moduleChangeMagnitude changes
183 (unionAdd, unionChange, unionRemove) =
188 (unionAdd, unionChange, unionRemove) =
184− changesToDocTriple unionToDoc unions
189+ changesToDocTriple (unionToDoc localizer) unions
186 (aliasAdd, aliasChange, aliasRemove) =
191 (aliasAdd, aliasChange, aliasRemove) =
187− changesToDocTriple aliasToDoc aliases
192+ changesToDocTriple (aliasToDoc localizer) aliases
189 (valueAdd, valueChange, valueRemove) =
194 (valueAdd, valueChange, valueRemove) =
190− changesToDocTriple valueToDoc values
195+ changesToDocTriple (valueToDoc localizer) values
192 (binopAdd, binopChange, binopRemove) =
197 (binopAdd, binopChange, binopRemove) =
193− changesToDocTriple binopToDoc binops
198+ changesToDocTriple (binopToDoc localizer) binops
195 Chunk (N.toString name) magnitude $
200 Chunk (N.toString name) magnitude $
196 D.vcat $ List.intersperse "" $ Maybe.catMaybes $
201 D.vcat $ List.intersperse "" $ Maybe.catMaybes $
@@ -229,35 +234,35 @@ changesToDoc categoryName unions aliases values binops =
229 D.fromString categoryName <> ":" : unions ++ aliases ++ binops ++ values
234 D.fromString categoryName <> ":" : unions ++ aliases ++ binops ++ values
232−unionToDoc :: N.Name -> Docs.Union -> D.Doc
237+unionToDoc :: L.Localizer -> N.Name -> Docs.Union -> D.Doc
233−unionToDoc name (Docs.Union _ tvars ctors) =
238+unionToDoc localizer name (Docs.Union _ tvars ctors) =
236 "type" <+> D.fromName name <+> D.hsep (map D.fromName tvars)
241 "type" <+> D.fromName name <+> D.hsep (map D.fromName tvars)
238 ctorDoc (ctor, tipes) =
243 ctorDoc (ctor, tipes) =
239− typeDoc (Type.Type ctor tipes)
244+ typeDoc localizer (Type.Type ctor tipes)
241 D.hang 4 (D.sep (setup : zipWith (<+>) ("=" : repeat "|") (map ctorDoc ctors)))
246 D.hang 4 (D.sep (setup : zipWith (<+>) ("=" : repeat "|") (map ctorDoc ctors)))
244−aliasToDoc :: N.Name -> Docs.Alias -> D.Doc
249+aliasToDoc :: L.Localizer -> N.Name -> Docs.Alias -> D.Doc
245−aliasToDoc name (Docs.Alias _ tvars tipe) =
250+aliasToDoc localizer name (Docs.Alias _ tvars tipe) =
247 declaration =
252 declaration =
248 "type" <+> "alias" <+> D.hsep (map D.fromName (name:tvars)) <+> "="
253 "type" <+> "alias" <+> D.hsep (map D.fromName (name:tvars)) <+> "="
250− D.hang 4 (D.sep [ declaration, typeDoc tipe ])
255+ D.hang 4 (D.sep [ declaration, typeDoc localizer tipe ])
253−valueToDoc :: N.Name -> Docs.Value -> D.Doc
258+valueToDoc :: L.Localizer -> N.Name -> Docs.Value -> D.Doc
254−valueToDoc name (Docs.Value _ tipe) =
259+valueToDoc localizer name (Docs.Value _ tipe) =
255− D.hang 4 $ D.sep [ D.fromName name <+> ":", typeDoc tipe ]
260+ D.hang 4 $ D.sep [ D.fromName name <+> ":", typeDoc localizer tipe ]
258−binopToDoc :: N.Name -> Docs.Binop -> D.Doc
263+binopToDoc :: L.Localizer -> N.Name -> Docs.Binop -> D.Doc
259−binopToDoc name (Docs.Binop _ tipe associativity (Docs.Precedence n)) =
264+binopToDoc localizer name (Docs.Binop _ tipe associativity (Docs.Precedence n)) =
260− "(" <> D.fromName name <> ")" <+> ":" <+> typeDoc tipe <> D.black details
265+ "(" <> D.fromName name <> ")" <+> ":" <+> typeDoc localizer tipe <> D.black details
262 details =
267 details =
263 " (" <> D.fromName assoc <> "/" <> D.fromInt n <> ")"
268 " (" <> D.fromName assoc <> "/" <> D.fromInt n <> ")"
@@ -269,6 +274,6 @@ binopToDoc name (Docs.Binop _ tipe associativity (Docs.Precedence n)) =
269 Docs.Right -> "right"
274 Docs.Right -> "right"
272−typeDoc :: Type.Type -> D.Doc
277+typeDoc :: L.Localizer -> Type.Type -> D.Doc
273−typeDoc tipe =
278+typeDoc localizer tipe =
274− Type.toDoc Type.None tipe
279+ Type.toDoc localizer Type.None tipe