on master help sign in
actually generate docs in `diff` again
3306a50Evan Czaplicki
terminal/src/Diff.hs+56−18
@@ -11,6 +11,7 @@ import qualified Data.List as List
11import qualified Data.Map as Map
11import qualified Data.Map as Map
12import qualified Data.Maybe as Maybe
12import qualified Data.Maybe as Maybe
13import qualified Data.Name as Name
13import qualified Data.Name as Name
14+import qualified Data.NonEmptyList as NE
14
15
15import qualified Build
16import qualified Build
16import Deps.Diff (PackageChanges(..), ModuleChanges(..), Changes(..))
17import Deps.Diff (PackageChanges(..), ModuleChanges(..), Changes(..))
@@ -20,6 +21,7 @@ import qualified Elm.Compiler.Type as Type
20import qualified Elm.Details as Details
21import qualified Elm.Details as Details
21import qualified Elm.Docs as Docs
22import qualified Elm.Docs as Docs
22import qualified Elm.Magnitude as M
23import qualified Elm.Magnitude as M
24+import qualified Elm.Outline as Outline
23import qualified Elm.Package as Pkg
25import qualified Elm.Package as Pkg
24import qualified Elm.Version as V
26import qualified Elm.Version as V
25import qualified Http
27import qualified Http
@@ -58,7 +60,7 @@ run args () =
58
60
59data Env =
61data Env =
60 Env
62 Env
61− { _root :: Maybe FilePath
63+ { _maybeRoot :: Maybe FilePath
62 , _cache :: Stuff.PackageCache
64 , _cache :: Stuff.PackageCache
63 , _manager :: Http.Manager
65 , _manager :: Http.Manager
64 , _registry :: Registry.Registry
66 , _registry :: Registry.Registry
@@ -67,11 +69,11 @@ data Env =
67
69
68getEnv :: Task Env
70getEnv :: Task Env
69getEnv =
71getEnv =
70− do root <- Task.io $ Stuff.findRoot
72+ do maybeRoot <- Task.io $ Stuff.findRoot
71− cache <- Task.io $ Stuff.getPackageCache
73+ cache <- Task.io $ Stuff.getPackageCache
72− manager <- Task.io $ Http.getManager
74+ manager <- Task.io $ Http.getManager
73− registry <- Task.eio Exit.DiffBadRegistry $ Registry.latest manager cache
75+ registry <- Task.eio Exit.DiffBadRegistry $ Registry.latest manager cache
74− return (Env root cache manager registry)
76+ return (Env maybeRoot cache manager registry)
75
77
76
78
77
79
@@ -96,21 +98,19 @@ diff env@(Env _ _ _ registry) args =
96 Task.throw $ Exit.DiffUnknownPackage name suggestions
98 Task.throw $ Exit.DiffUnknownPackage name suggestions
97
99
98 LocalInquiry v1 v2 ->
100 LocalInquiry v1 v2 ->
99− do (_, name, vsns) <- getDetails env
101+ do (name, vsns) <- readOutline env
100 oldDocs <- getDocs env name vsns (min v1 v2)
102 oldDocs <- getDocs env name vsns (min v1 v2)
101 newDocs <- getDocs env name vsns (max v1 v2)
103 newDocs <- getDocs env name vsns (max v1 v2)
102 writeDiff oldDocs newDocs
104 writeDiff oldDocs newDocs
103
105
104 CodeVsLatest ->
106 CodeVsLatest ->
105− do (details, name, vsns) <- getDetails env
107+ do (newDocs, name, vsns) <- generateDocs env
106 oldDocs <- getLatestDocs env name vsns
108 oldDocs <- getLatestDocs env name vsns
107− newDocs <- Build.generateDocs details
108 writeDiff oldDocs newDocs
109 writeDiff oldDocs newDocs
109
110
110 CodeVsExactly version ->
111 CodeVsExactly version ->
111− do (details, name, vsns) <- getDetails env
112+ do (newDocs, name, vsns) <- generateDocs env
112 oldDocs <- getDocs env name vsns version
113 oldDocs <- getDocs env name vsns version
113− newDocs <- Build.generateDocs details
114 writeDiff oldDocs newDocs
114 writeDiff oldDocs newDocs
115
115
116
116
@@ -131,32 +131,70 @@ getLatestDocs (Env _ cache manager _) name (Registry.KnownVersions latest _) =
131
131
132
132
133
133
134−-- GET DETAILS
134+-- READ OUTLINE
135
135
136
136
137−getDetails :: Env -> Task (Details.Details, Pkg.Name, Registry.KnownVersions)
137+readOutline :: Env -> Task (Pkg.Name, Registry.KnownVersions)
138−getDetails (Env maybeRoot _ _ registry) =
138+readOutline (Env maybeRoot _ _ registry) =
139 case maybeRoot of
139 case maybeRoot of
140 Nothing ->
140 Nothing ->
141 Task.throw $ Exit.DiffNoOutline
141 Task.throw $ Exit.DiffNoOutline
142
142
143 Just root ->
143 Just root ->
144+ do result <- Task.io $ Outline.read root
145+ case result of
146+ Left err ->
147+ Task.throw $ Exit.DiffBadOutline err
148+
149+ Right outline ->
150+ case outline of
151+ Outline.App _ ->
152+ Task.throw $ Exit.DiffApplication
153+
154+ Outline.Pkg (Outline.PkgOutline pkg _ _ _ _ _ _ _) ->
155+ case Registry.getVersions pkg registry of
156+ Just vsns -> return (pkg, vsns)
157+ Nothing -> Task.throw Exit.DiffUnpublished
158+
159+
160+
161+-- GENERATE DOCS
162+
163+
164+generateDocs :: Env -> Task (Docs.Documentation, Pkg.Name, Registry.KnownVersions)
165+generateDocs (Env maybeRoot _ _ registry) =
166+ case maybeRoot of
167+ Nothing ->
168+ Task.throw $ Exit.DiffNoOutline
169+
170+ Just root ->
171+ do details <-
172+ Task.eio Exit.DiffBadDetails $
144− do details <- Task.eio Exit.DiffBadDetails $ Details.load Reporting.silent root
173+ Details.load Reporting.silent root
174+
145 case Details._outline details of
175 case Details._outline details of
146 Details.ValidApp _ ->
176 Details.ValidApp _ ->
147 Task.throw $ Exit.DiffApplication
177 Task.throw $ Exit.DiffApplication
148
178
149− Details.ValidPkg pkg _ ->
179+ Details.ValidPkg pkg exposed ->
150 case Registry.getVersions pkg registry of
180 case Registry.getVersions pkg registry of
151 Just vsns ->
181 Just vsns ->
182+ case exposed of
183+ [] ->
184+ Task.throw Exit.DiffNoExposed
185+
186+ e:es ->
187+ do docs <-
188+ Task.eio Exit.DiffBadBuild $
189+ Build.fromExposed Reporting.silent root details Build.KeepDocs (NE.List e es)
152− return (details, pkg, vsns)
190+ return ( docs, pkg, vsns )
153
191
154 Nothing ->
192 Nothing ->
155 Task.throw Exit.DiffUnpublished
193 Task.throw Exit.DiffUnpublished
156
194
157
195
158
196
159−-- WRITE DOC
197+-- WRITE DIFF
160
198
161
199
162writeDiff :: Docs.Documentation -> Docs.Documentation -> Task ()
200writeDiff :: Docs.Documentation -> Docs.Documentation -> Task ()