@@ -44,22 +44,23 @@ import qualified Reporting.Render.Type.Localizer as L
44data Flags =
44data Flags =
46 { _interpreter :: Maybe FilePath
46 { _interpreter :: Maybe FilePath
50run :: () -> Flags -> IO ()
51run :: () -> Flags -> IO ()
51−run () (Flags maybeAlternateInterpreter) =
52+run () (Flags maybeAlternateInterpreter noColors) =
52 do interpreter <- getInterpreter maybeAlternateInterpreter
53 do interpreter <- getInterpreter maybeAlternateInterpreter
53 _ <- Project.getRootWithReplFallback
54 _ <- Project.getRootWithReplFallback
54 printWelcomeMessage
55 printWelcomeMessage
55 settings <- initSettings
56 settings <- initSettings
56 let manager = Repl.runInputT settings (Repl.withInterrupt loop)
57 let manager = Repl.runInputT settings (Repl.withInterrupt loop)
57− (exitCode,_,_) <- RWS.runRWST manager interpreter initialState
58+ (exitCode,_,_) <- RWS.runRWST manager (interpreter, noColors) initialState
58 Exit.exitWith exitCode
59 Exit.exitWith exitCode
61type Runner =
62type Runner =
62− RWS.RWST FilePath () State IO
63+ RWS.RWST (FilePath, Bool) () State IO
@@ -155,7 +156,8 @@ data Output = None | Def N.Name | Expr Text.Text
156interpret :: Output -> State -> Runner (Maybe a)
157interpret :: Output -> State -> Runner (Maybe a)
157interpret def state =
158interpret def state =
159+ do noColors <- RWS.asks snd
158− do result <- liftIO $ Task.try Repl.reporter $ compile def state
160+ result <- liftIO $ Task.try Repl.reporter $ compile noColors def state
160 case result of
162 case result of
161 Nothing ->
163 Nothing ->
@@ -170,7 +172,7 @@ interpret def state =
171interpretHelp :: FilePath -> Runner ()
173interpretHelp :: FilePath -> Runner ()
172interpretHelp path =
174interpretHelp path =
173− do interpreter <- RWS.ask
175+ do interpreter <- RWS.asks fst
174 let proc = (Proc.proc interpreter [path]) { Proc.std_in = Proc.CreatePipe }
176 let proc = (Proc.proc interpreter [path]) { Proc.std_in = Proc.CreatePipe }
175 liftIO $ Proc.withCreateProcess proc $ \_ _ _ handle ->
177 liftIO $ Proc.withCreateProcess proc $ \_ _ _ handle ->
176 do _ <- Proc.waitForProcess handle
178 do _ <- Proc.waitForProcess handle
@@ -231,8 +233,8 @@ initialState =
231 State 0 Map.empty Map.empty Map.empty [] L.replEmpty
233 State 0 Map.empty Map.empty Map.empty [] L.replEmpty
234−compile :: Output -> State -> Task.Task (Maybe FilePath)
236+compile :: Bool -> Output -> State -> Task.Task (Maybe FilePath)
235−compile output (State count imports types defs tricks localizer) =
237+compile noColors output (State count imports types defs tricks localizer) =
238 "module " <> N.toBuilder N.replModule <> " exposing (..)\n\n"
240 "module " <> N.toBuilder N.replModule <> " exposing (..)\n\n"
@@ -241,24 +243,27 @@ compile output (State count imports types defs tricks localizer) =
241 (<>) header $
243 (<>) header $
242 addLines imports $ addLines types $ addLines defs $
244 addLines imports $ addLines types $ addLines defs $
243 List.foldr (<>) mempty (map Text.encodeUtf8Builder tricks)
245 List.foldr (<>) mempty (map Text.encodeUtf8Builder tricks)
247+ compileForRepl builder maybeName =
248+ Project.compileForRepl noColors localizer (LBS.toStrict (B.toLazyByteString builder)) maybeName
245− case output of
250+ case output of
247− if Map.null types && Map.null defs && null tricks then
252+ if Map.null types && Map.null defs && null tricks then
248− evaluate localizer (elmSourceCode <> "unit = ()") Nothing
253+ compileForRepl (elmSourceCode <> "unit = ()") Nothing
250− evaluate localizer elmSourceCode Nothing
255+ compileForRepl elmSourceCode Nothing
252− Def name ->
257+ Def name ->
253− evaluate localizer elmSourceCode (Just name)
258+ compileForRepl elmSourceCode (Just name)
255− Expr expr ->
260+ Expr expr ->
257− name = N.addIndex "repl_value_" count
262+ name = N.addIndex "repl_value_" count
258− text = Text.replace "\n" "\n " expr
263+ text = Text.replace "\n" "\n " expr
259− def = N.toBuilder name <> " =\n " <> Text.encodeUtf8Builder text <> "\n"
264+ def = N.toBuilder name <> " =\n " <> Text.encodeUtf8Builder text <> "\n"
261− evaluate localizer (elmSourceCode <> def) (Just name)
266+ compileForRepl (elmSourceCode <> def) (Just name)
264addLines :: Map.Map N.Name Text.Text -> B.Builder -> B.Builder
269addLines :: Map.Map N.Name Text.Text -> B.Builder -> B.Builder
@@ -266,11 +271,6 @@ addLines dict builder =
266 Map.foldr (\text b -> Text.encodeUtf8Builder text <> "\n" <> b) builder dict
271 Map.foldr (\text b -> Text.encodeUtf8Builder text <> "\n" <> b) builder dict
269−evaluate :: L.Localizer -> B.Builder -> Maybe N.Name -> Task.Task (Maybe FilePath)
270−evaluate localizer builder maybeName =
271− Project.compileForRepl localizer (LBS.toStrict (B.toLazyByteString builder)) maybeName
275-- SETTINGS
275-- SETTINGS