on 42f3721 help sign in
elk/builder/src/Elm/Project.hs
101 lines 2.9 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Elm.Project
4 ( getRoot
5 , getRootWithReplFallback
6 , compile
7 , compileForRepl
8 , generateDocs
9 )
10 where
13import qualified Data.ByteString as BS
14import Data.Map ((!))
15import System.FilePath ((</>))
17import qualified Elm.Compiler as Compiler
18import qualified Elm.Docs as Docs
19import qualified Elm.Name as N
20import qualified Elm.Project.Json as Project
21import qualified Elm.Project.Root as Root
22import qualified Elm.Project.Summary as Summary
23import Elm.Project.Summary (Summary)
24import qualified File.Args as Args
25import qualified File.Artifacts as Artifacts
26import qualified File.Compile as Compile
27import qualified File.Crawl as Crawl
28import qualified File.Plan as Plan
29import qualified Generate.Output as Output
30import qualified Reporting.Render.Type.Localizer as L
31import qualified Reporting.Task as Task
32import qualified Stuff.Paths as Path
36-- GET ROOT
39getRoot :: Task.Task Summary
40getRoot =
41 Root.get
44getRootWithReplFallback :: IO FilePath
45getRootWithReplFallback =
46 Root.getWithReplFallback
50-- COMPILE
53compile
54 :: Output.Mode
55 -> Output.Target
56 -> Maybe Output.Output
57 -> Maybe FilePath
58 -> Summary
59 -> [FilePath]
60 -> Task.Task ()
61compile mode target maybeOutput docs summary@(Summary.Summary root project _ _ _) paths =
62 do Project.check project
63 args <- Args.fromPaths summary paths
64 graph <- Crawl.crawl summary args
65 (dirty, ifaces) <- Plan.plan docs summary graph
66 answers <- Compile.compile project docs ifaces dirty
67 results <- Artifacts.write root answers
68 _ <- traverse (Artifacts.writeDocs results) docs
69 Output.generate mode target maybeOutput summary graph results
73-- COMPILE FOR REPL
76compileForRepl :: Bool -> L.Localizer -> BS.ByteString -> Maybe N.Name -> Task.Task (Maybe FilePath)
77compileForRepl noColors localizer source maybeName =
78 do summary@(Summary.Summary root project _ _ _) <- getRoot
79 Project.check project
80 graph <- Crawl.crawlFromSource summary source
81 (dirty, ifaces) <- Plan.plan Nothing summary graph
82 answers <- Compile.compile project Nothing ifaces dirty
83 results <- Artifacts.write root answers
84 let (Compiler.Artifacts elmi _ _) = results ! N.replModule
85 traverse (Output.generateReplFile noColors localizer summary graph elmi) maybeName
89-- GENERATE DOCS
92generateDocs :: Summary.Summary -> Task.Task Docs.Documentation
93generateDocs summary@(Summary.Summary root project _ _ _) =
94 do let docsPath = root </> Path.docs
95 args <- Args.fromSummary summary
96 graph <- Crawl.crawl summary args
97 (dirty, ifaces) <- Plan.plan (Just docsPath) summary graph
98 answers <- Compile.compile project (Just docsPath) ifaces dirty
99 results <- Artifacts.write root answers
100 Output.noDebugUsesInPackage summary graph
101 Artifacts.writeDocs results docsPath