@@ -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
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 () =
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 =
68getEnv :: Task Env
70getEnv :: Task Env
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)
@@ -96,21 +98,19 @@ diff env@(Env _ _ _ registry) args =
96 Task.throw $ Exit.DiffUnknownPackage name suggestions
98 Task.throw $ Exit.DiffUnknownPackage name suggestions
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
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
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
@@ -131,32 +131,70 @@ getLatestDocs (Env _ cache manager _) name (Registry.KnownVersions latest _) =
134−-- GET DETAILS
134+-- READ OUTLINE
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
143 Just root ->
143 Just root ->
144+ do result <- Task.io $ Outline.read root
147+ Task.throw $ Exit.DiffBadOutline err
152+ Task.throw $ Exit.DiffApplication
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
164+generateDocs :: Env -> Task (Docs.Documentation, Pkg.Name, Registry.KnownVersions)
165+generateDocs (Env maybeRoot _ _ registry) =
168+ Task.throw $ Exit.DiffNoOutline
172+ Task.eio Exit.DiffBadDetails $
144− do details <- Task.eio Exit.DiffBadDetails $ Details.load Reporting.silent root
173+ Details.load Reporting.silent root
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
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 ->
184+ Task.throw Exit.DiffNoExposed
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 )
154 Nothing ->
192 Nothing ->
155 Task.throw Exit.DiffUnpublished
193 Task.throw Exit.DiffUnpublished
159−-- WRITE DOC
197+-- WRITE DIFF
162writeDiff :: Docs.Documentation -> Docs.Documentation -> Task ()
200writeDiff :: Docs.Documentation -> Docs.Documentation -> Task ()