on master help sign in
Simplify implementations of Reporting.Progress.{Json,Repl}
commit4d8ad5c13829c774bb392ebd2e83aee850ad7dba authorEvan Czaplicki <evancz@users.noreply.github.com> dateFri 6 Apr 2018, 17:47 (9 years ago) parent9faeae1
4 files changed+30−64
builder/src/Reporting/Progress/Json.hs+15−28 builder/src/Reporting/Progress/Repl.hs+12−29 ui/terminal/src/Make.hs+2−5 ui/terminal/src/Repl.hs+1−2
builder/src/Reporting/Progress/Json.hs+15−28
@@ -1,44 +1,31 @@
11module Reporting.Progress.Json
2− ( create
2+ ( reporter
33 )
44 where
55
66
7−import Control.Concurrent (forkIO)
8−import Control.Concurrent.Chan (Chan, newChan, readChan)
9−import Control.Concurrent.MVar (newEmptyMVar, putMVar)
7+import qualified Data.ByteString.Builder as B
8+import System.IO (stderr)
109
1110import qualified Reporting.Exit as Exit
1211import qualified Reporting.Progress as Progress
12+import qualified Json.Encode as Encode
1313
1414
1515
16−-- CREATE
16+-- REPORTER
1717
1818
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)
19+reporter :: Progress.Reporter
20+reporter =
21+ Progress.Reporter (\_ -> return ()) end
2522
2623
24+end :: Maybe Exit.Exit -> IO ()
25+end maybeExit =
26+ case maybeExit of
27+ Just exit ->
28+ B.hPutBuilder stderr (Encode.encodeUgly (Exit.toJson exit))
2729
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 ()
30+ Nothing ->
31+ return ()
builder/src/Reporting/Progress/Repl.hs+12−29
@@ -1,44 +1,27 @@
11module Reporting.Progress.Repl
2− ( create
2+ ( reporter
33 )
44 where
55
66
7−import Control.Concurrent (forkIO)
8−import Control.Concurrent.Chan (Chan, newChan, readChan)
9−import Control.Concurrent.MVar (newEmptyMVar, putMVar)
10−
117import qualified Reporting.Exit as Exit
128import qualified Reporting.Progress as Progress
139
1410
1511
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−
12+-- REPORTER
2713
28−-- LOOP
2914
15+reporter :: Progress.Reporter
16+reporter =
17+ Progress.Reporter (\_ -> return ()) end
3018
31−loop :: Chan Progress.Msg -> IO ()
32−loop chan =
33− do msg <- readChan chan
34− case msg of
35− Progress.Progress _ ->
36− loop chan
3719
38− Progress.End maybeExit ->
39− case maybeExit of
40− Just exit ->
41− Exit.toStderr exit
20+end :: Maybe Exit.Exit -> IO ()
21+end maybeExit =
22+ case maybeExit of
23+ Just exit ->
24+ Exit.toStderr exit
4225
43− Nothing ->
44− return ()
26+ Nothing ->
27+ return ()
ui/terminal/src/Make.hs+2−5
@@ -44,11 +44,8 @@ run paths (Flags optimize output report docs) =
4444
4545 makeReporter =
4646 case report of
47− Nothing ->
48− Terminal.create
49−
50− Just Json ->
51− Json.create
47+ Nothing -> Terminal.create
48+ Just Json -> return Json.reporter
5249 in
5350 do reporter <- makeReporter
5451 void $ Task.run reporter $
ui/terminal/src/Repl.hs+1−2
@@ -148,8 +148,7 @@ data Output = None | Def N.Name | Expr Text.Text
148148
149149interpret :: Output -> State -> Runner (Maybe a)
150150interpret def state =
151− do reporter <- liftIO $ Repl.create
152− result <- liftIO $ Task.run reporter $ compile def state
151+ do result <- liftIO $ Task.run Repl.reporter $ compile def state
153152
154153 case result of
155154 Nothing ->