on master help sign in
Begin adding back --report=json
a24e86aEvan Czaplicki
builder/src/Reporting/Progress/Json.hsnew file+44
@@ -0,0 +1,44 @@
1+module Reporting.Progress.Json
2+ ( create
3+ )
4+ where
5+
6+
7+import Control.Concurrent (forkIO)
8+import Control.Concurrent.Chan (Chan, newChan, readChan)
9+import Control.Concurrent.MVar (newEmptyMVar, putMVar)
10+
11+import qualified Reporting.Exit as Exit
12+import qualified Reporting.Progress as Progress
13+
14+
15+
16+-- CREATE
17+
18+
19+create :: IO Progress.Reporter
20+create =
21+ do chan <- newChan
22+ mvar <- newEmptyMVar
23+ _ <- forkIO (loop chan >>= putMVar mvar)
24+ return (Progress.makeReporter chan mvar)
25+
26+
27+
28+-- LOOP
29+
30+
31+loop :: Chan Progress.Msg -> IO ()
32+loop chan =
33+ do msg <- readChan chan
34+ case msg of
35+ Progress.Progress _ ->
36+ loop chan
37+
38+ Progress.End maybeExit ->
39+ case maybeExit of
40+ Just exit ->
41+ Exit.toJson exit
42+
43+ Nothing ->
44+ return ()
ui/terminal/src/Make.hs+25−14
@@ -1,5 +1,6 @@
1module Make
1module Make
2 ( Flags(..)
2 ( Flags(..)
3+ , ReportType(..)
3 , run
4 , run
4 )
5 )
5 where
6 where
@@ -11,6 +12,7 @@ import qualified Elm.Compiler.Objects as Obj
11import qualified Elm.Project as Project
12import qualified Elm.Project as Project
12import qualified Generate.Output as Output
13import qualified Generate.Output as Output
13import qualified Reporting.Task as Task
14import qualified Reporting.Task as Task
15+import qualified Reporting.Progress.Json as Json
14import qualified Reporting.Progress.Terminal as Terminal
16import qualified Reporting.Progress.Terminal as Terminal
15
17
16
18
@@ -20,25 +22,34 @@ import qualified Reporting.Progress.Terminal as Terminal
20
22
21data Flags =
23data Flags =
22 Flags
24 Flags
23− { _warn :: Bool
24− , _debug :: Bool
25+ { _debug :: Bool
25 , _output :: Maybe Output.Output
26 , _output :: Maybe Output.Output
27+ , _report :: Maybe ReportType
26 }
28 }
27
29
28
30
29−run :: [FilePath] -> Flags -> IO ()
31+data ReportType
30−run paths flags =
32+ = Json
31− do reporter <- Terminal.create
32− void $ Task.run reporter $
33− do summary <- Project.getRoot
34− Project.compile (toOptions flags) summary paths
35
33
36
34
37−-- TODO figure out --warn flag
35+run :: [FilePath] -> Flags -> IO ()
38−toOptions :: Flags -> Output.Options
39−toOptions (Flags warn debug output) =
36+run paths (Flags debug output report) =
40 let
37 let
38+ mode =
41− mode = if debug then Obj.Debug else Obj.Prod
39+ if debug then Obj.Debug else Obj.Prod
42− target = if False then Obj.Server else Obj.Client
40+
41+ outputOptions =
42+ Output.Options mode Obj.Client output
43+
44+ makeReporter =
45+ case report of
46+ Nothing ->
47+ Terminal.create
48+
49+ Just Json ->
50+ Json.create
43 in
51 in
44− Output.Options warn mode target output
52+ do reporter <- makeReporter
53+ void $ Task.run reporter $
54+ do summary <- Project.getRoot
55+ Project.compile outputOptions summary paths