on 6a96e21 help sign in
elk/builder/src/Elm/Project.hs
90 lines 2.6 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.Root as Root
21import qualified Elm.Project.Summary as Summary
22import Elm.Project.Summary (Summary)
23import qualified File.Args as Args
24import qualified File.Artifacts as Artifacts
25import qualified File.Compile as Compile
26import qualified File.Crawl as Crawl
27import qualified File.Plan as Plan
28import qualified Generate.Output as Output
29import qualified Reporting.Task as Task
30import qualified Stuff.Paths as Path
34-- GET ROOT
37getRoot :: Task.Task Summary
38getRoot =
39 Root.get
42getRootWithReplFallback :: IO FilePath
43getRootWithReplFallback =
44 Root.getWithReplFallback
48-- COMPILE
51compile :: Output.Options -> Maybe FilePath -> Summary -> [FilePath] -> Task.Task ()
52compile options docs summary@(Summary.Summary root project _ _ _) paths =
53 do args <- Args.fromPaths summary paths
54 graph <- Crawl.crawl summary args
55 (dirty, ifaces) <- Plan.plan docs summary graph
56 answers <- Compile.compile project docs ifaces dirty
57 results <- Artifacts.write root answers
58 _ <- traverse (Artifacts.writeDocs results) docs
59 Output.generate options summary graph
63-- COMPILE FOR REPL
66compileForRepl :: BS.ByteString -> Maybe N.Name -> Task.Task (Maybe FilePath)
67compileForRepl source maybeName =
68 do summary@(Summary.Summary root project _ _ _) <- getRoot
69 graph <- Crawl.crawlFromSource summary source
70 (dirty, ifaces) <- Plan.plan Nothing summary graph
71 answers <- Compile.compile project Nothing ifaces dirty
72 results <- Artifacts.write root answers
73 let (Compiler.Artifacts elmi _ _) = results ! "Elm_Repl"
74 traverse (Output.generateReplFile summary graph elmi) maybeName
78-- GENERATE DOCS
81generateDocs :: Summary.Summary -> Task.Task Docs.Documentation
82generateDocs summary@(Summary.Summary root project _ _ _) =
83 do let docsPath = root </> Path.docs
84 args <- Args.fromSummary summary
85 graph <- Crawl.crawl summary args
86 (dirty, ifaces) <- Plan.plan (Just docsPath) summary graph
87 answers <- Compile.compile project (Just docsPath) ifaces dirty
88 results <- Artifacts.ignore answers
89 Output.noDebugUsesInPackage summary graph
90 Artifacts.writeDocs results docsPath