on master help sign in
Keep flowing Generate.JavaScript.Mode through codebase
bf83edcEvan Czaplicki
builder/src/Elm/Project.hs+10−3
@@ -48,15 +48,22 @@ getRootWithReplFallback =
48-- COMPILE
48-- COMPILE
49
49
50
50
51−compile :: Output.Options -> Maybe FilePath -> Summary -> [FilePath] -> Task.Task ()
51+compile
52+ :: Output.Mode
53+ -> Output.Target
54+ -> Maybe Output.Output
55+ -> Maybe FilePath
56+ -> Summary
57+ -> [FilePath]
58+ -> Task.Task ()
52−compile options docs summary@(Summary.Summary root project _ _ _) paths =
59+compile mode target maybeOutput docs summary@(Summary.Summary root project _ _ _) paths =
53 do args <- Args.fromPaths summary paths
60 do args <- Args.fromPaths summary paths
54 graph <- Crawl.crawl summary args
61 graph <- Crawl.crawl summary args
55 (dirty, ifaces) <- Plan.plan docs summary graph
62 (dirty, ifaces) <- Plan.plan docs summary graph
56 answers <- Compile.compile project docs ifaces dirty
63 answers <- Compile.compile project docs ifaces dirty
57 results <- Artifacts.write root answers
64 results <- Artifacts.write root answers
58 _ <- traverse (Artifacts.writeDocs results) docs
65 _ <- traverse (Artifacts.writeDocs results) docs
59− Output.generate options summary graph
66+ Output.generate mode target maybeOutput summary graph
60
67
61
68
62
69
builder/src/Generate/Output.hs+18−18
@@ -1,10 +1,11 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Generate.Output
3module Generate.Output
4+ ( Mode(..)
5+ , Mode.Target(..)
4− ( generate
6+ , generate
5 , generateReplFile
7 , generateReplFile
6 , noDebugUsesInPackage
8 , noDebugUsesInPackage
7− , Options(..)
8 , Output(..)
9 , Output(..)
9 , output
10 , output
10 )
11 )
@@ -34,6 +35,7 @@ import qualified File.IO as IO
34import qualified Generate.Functions as Functions
35import qualified Generate.Functions as Functions
35import qualified Generate.Html as Html
36import qualified Generate.Html as Html
36import qualified Generate.Nitpick as Nitpick
37import qualified Generate.Nitpick as Nitpick
38+import qualified Generate.JavaScript.Mode as Mode
37import qualified Reporting.Exit as Exit
39import qualified Reporting.Exit as Exit
38import qualified Reporting.Exit.Make as E
40import qualified Reporting.Exit.Make as E
39import qualified Reporting.Task as Task
41import qualified Reporting.Task as Task
@@ -45,16 +47,11 @@ import Terminal.Args (Parser(..))
45-- GENERATE
47-- GENERATE
46
48
47
49
48−data Options =
50+data Mode = Debug | Dev | Prod
49− Options
50− { _mode :: Obj.Mode
51− , _target :: Obj.Target
52− , _output :: Maybe Output
53− }
54
51
55
52
56−generate :: Options -> Summary.Summary -> Crawl.Result -> Task.Task ()
53+generate :: Mode -> Mode.Target -> Maybe Output -> Summary.Summary -> Crawl.Result -> Task.Task ()
57−generate options summary graph@(Crawl.Graph args _ _ _ _) =
54+generate mode target maybeOutput summary graph@(Crawl.Graph args _ _ _ _) =
58 case args of
55 case args of
59 Args.Pkg _ ->
56 Args.Pkg _ ->
60 return ()
57 return ()
@@ -62,23 +59,26 @@ generate options summary graph@(Crawl.Graph args _ _ _ _) =
62 Args.Roots name names ->
59 Args.Roots name names ->
63 do objectGraph <- organize summary graph
60 do objectGraph <- organize summary graph
64
61
62+ realMode <-
65− case _mode options of
63+ case mode of
66− Obj.Debug -> return ()
64+ Debug -> return (Mode.debug target (error "TODO"))
67− Obj.Dev -> return ()
65+ Dev -> return (Mode.dev target)
66+ Prod ->
68− Obj.Prod -> noDebugUses summary objectGraph
67+ do noDebugUses summary objectGraph
68+ return (Mode.prod target objectGraph)
69
69
70− generateMonolith options summary objectGraph (name:names)
70+ generateMonolith realMode maybeOutput summary objectGraph (name:names)
71
71
72
72
73
73
74-- GENERATE MONOLITH
74-- GENERATE MONOLITH
75
75
76
76
77−generateMonolith :: Options -> Summary.Summary -> Obj.Graph -> [Module.Raw] -> Task.Task ()
77+generateMonolith :: Mode.Mode -> Maybe Output -> Summary.Summary -> Obj.Graph -> [Module.Raw] -> Task.Task ()
78−generateMonolith (Options mode target maybeOutput) (Summary.Summary _ project _ ifaces _) graph rootNames =
78+generateMonolith mode maybeOutput (Summary.Summary _ project _ _ _) graph rootNames =
79 do let pkg = Project.getName project
79 do let pkg = Project.getName project
80 let roots = map (Module.Canonical pkg) rootNames
80 let roots = map (Module.Canonical pkg) rootNames
81− case Obj.generate mode target ifaces graph roots of
81+ case Obj.generate mode graph roots of
82 Obj.None ->
82 Obj.None ->
83 return ()
83 return ()
84
84
compiler/src/Elm/Compiler/Objects.hs+1−4
@@ -1,8 +1,6 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2module Elm.Compiler.Objects
2module Elm.Compiler.Objects
3− ( Name.Target(..)
4− , JS.Mode(..)
5− , JS.Output(..)
3+ ( JS.Output(..)
6 , JS.generate
4 , JS.generate
7 , JS.generateForRepl
5 , JS.generateForRepl
8 , Opt.Graph
6 , Opt.Graph
@@ -23,7 +21,6 @@ import qualified AST.Module.Name as ModuleName
23import qualified Elm.Name as N
21import qualified Elm.Name as N
24import qualified Elm.Package as Pkg
22import qualified Elm.Package as Pkg
25import qualified Generate.JavaScript as JS
23import qualified Generate.JavaScript as JS
26−import qualified Generate.JavaScript.Name as Name
27
24
28
25
29
26
ui/terminal/src/Develop.hs+2−4
@@ -20,7 +20,6 @@ import Snap.Core
20import Snap.Http.Server
20import Snap.Http.Server
21import Snap.Util.FileServe
21import Snap.Util.FileServe
22
22
23−import qualified Elm.Compiler.Objects as Obj
24import qualified Elm.Project as Project
23import qualified Elm.Project as Project
25import qualified Develop.Generate.Help as Generate
24import qualified Develop.Generate.Help as Generate
26import qualified Develop.Generate.Index as Index
25import qualified Develop.Generate.Index as Index
@@ -30,7 +29,6 @@ import qualified Json.Encode as Encode
30import qualified Reporting.Exit as Exit
29import qualified Reporting.Exit as Exit
31import qualified Reporting.Progress as Progress
30import qualified Reporting.Progress as Progress
32import qualified Reporting.Task as Task
31import qualified Reporting.Task as Task
33−import qualified Stuff.Paths as Path
34
32
35
33
36
34
@@ -166,11 +164,11 @@ compileToHtmlBuilder file =
166 mvar2 <- newEmptyMVar
164 mvar2 <- newEmptyMVar
167
165
168 let reporter = Progress.Reporter (\_ -> return ()) (putMVar mvar1)
166 let reporter = Progress.Reporter (\_ -> return ()) (putMVar mvar1)
169− let options = Output.Options Obj.Dev Obj.Client (Just (Output.HtmlBuilder mvar2))
167+ let output = Just (Output.HtmlBuilder mvar2)
170
168
171 void $ Task.run reporter $
169 void $ Task.run reporter $
172 do summary <- Project.getRoot
170 do summary <- Project.getRoot
173− Project.compile options Nothing summary [file]
171+ Project.compile Output.Dev Output.Client output Nothing summary [file]
174
172
175 result <- takeMVar mvar1
173 result <- takeMVar mvar1
176 case result of
174 case result of
ui/terminal/src/Develop/StaticFiles/Build.hs+2−8
@@ -11,7 +11,6 @@ import qualified Data.ByteString as BS
11import qualified System.Directory as Dir
11import qualified System.Directory as Dir
12import System.FilePath ((</>))
12import System.FilePath ((</>))
13
13
14−import qualified Elm.Compiler.Objects as Obj
15import qualified Elm.Project as Project
14import qualified Elm.Project as Project
16import qualified Generate.Output as Output
15import qualified Generate.Output as Output
17import qualified Reporting.Task as Task
16import qualified Reporting.Task as Task
@@ -37,19 +36,14 @@ compile =
37 do reporter <- Terminal.create
36 do reporter <- Terminal.create
38 void $ Task.run reporter $
37 void $ Task.run reporter $
39 do summary <- Project.getRoot
38 do summary <- Project.getRoot
39+ let jsOutput = Just (Output.JavaScript Nothing tempFileName)
40− Project.compile options Nothing summary rootPaths
40+ Project.compile Output.Prod Output.Client jsOutput Nothing summary rootPaths
41
41
42 result <- BS.readFile tempFileName
42 result <- BS.readFile tempFileName
43 seq (BS.length result) (Dir.removeFile tempFileName)
43 seq (BS.length result) (Dir.removeFile tempFileName)
44 return result
44 return result
45
45
46
46
47−options :: Output.Options
48−options =
49− Output.Options Obj.Prod Obj.Client $
50− Just (Output.JavaScript Nothing tempFileName)
51−
52−
53tempFileName :: FilePath
47tempFileName :: FilePath
54tempFileName =
48tempFileName =
55 "elm.js"
49 "elm.js"
ui/terminal/src/Make.hs+5−7
@@ -11,7 +11,6 @@ module Make
11import Control.Monad (void)
11import Control.Monad (void)
12import qualified System.FilePath as FP
12import qualified System.FilePath as FP
13
13
14−import qualified Elm.Compiler.Objects as Obj
15import qualified Elm.Project as Project
14import qualified Elm.Project as Project
16import qualified Generate.Output as Output
15import qualified Generate.Output as Output
17import qualified Reporting.Exit as Exit
16import qualified Reporting.Exit as Exit
@@ -43,17 +42,16 @@ run paths (Flags debug optimize output report docs) =
43 void $ Task.run reporter $
42 void $ Task.run reporter $
44 do mode <- toMode debug optimize
43 do mode <- toMode debug optimize
45 summary <- Project.getRoot
44 summary <- Project.getRoot
46− let options = Output.Options mode Obj.Client output
45+ Project.compile mode Output.Client output docs summary paths
47− Project.compile options docs summary paths
48
46
49
47
50−toMode :: Bool -> Bool -> Task.Task Obj.Mode
48+toMode :: Bool -> Bool -> Task.Task Output.Mode
51toMode debug optimize =
49toMode debug optimize =
52 case (debug, optimize) of
50 case (debug, optimize) of
53 (True , True ) -> Task.throw $ Exit.Make E.CannotOptimizeAndDebug
51 (True , True ) -> Task.throw $ Exit.Make E.CannotOptimizeAndDebug
54− (False, True ) -> return Obj.Prod
52+ (False, True ) -> return Output.Prod
55− (False, False) -> return Obj.Dev
53+ (False, False) -> return Output.Dev
56− (True , False) -> return Obj.Debug
54+ (True , False) -> return Output.Debug
57
55
58
56
59toReporter :: Maybe ReportType -> IO Progress.Reporter
57toReporter :: Maybe ReportType -> IO Progress.Reporter