1{-# LANGUAGE OverloadedStrings #-}
9import Control.Monad.Trans (liftIO)
10import qualified Data.ByteString.Lazy as LBS
11import qualified Data.Map as Map
12import Data.Monoid ((<>))
13import qualified Network.HTTP.Client as Client
14import qualified System.Directory as Dir
15import System.FilePath ((</>))
17import qualified Elm.Compiler.Version as Elm
18import qualified Elm.Package as Pkg
19import qualified Elm.Project.Constraint as Con
20import qualified Elm.Project.Json as Project
21import qualified Elm.Project.Licenses as Licenses
22import Elm.Project.Json (Project(..), PkgInfo(..))
23import Elm.Project.Summary (Summary)
24import qualified Elm.PerUserCache as PerUserCache
25import qualified File.IO as IO
26import qualified Reporting.Doc as D
27import qualified Reporting.Exit as Exit
28import qualified Reporting.Progress as Progress
29import qualified Reporting.Task as Task
30import qualified Reporting.Task.Http as Http
31import qualified Stuff.Verify as Verify
32import qualified Json.Encode as Encode
39get :: Task.Task Summary
42 project <- Project.read "elm.json"
43 Verify.verify root project
46unsafeGet :: Task.Task (FilePath, Project)
48 (,) <$> moveToRoot <*> Project.read "elm.json"
55moveToRoot :: Task.Task FilePath
57 do maybeRoot <- liftIO $ IO.find "elm.json"
60 do liftIO $ Dir.setCurrentDirectory root
64 do approved <- Task.getApproval $ D.vcat $
65 [ "It looks like you are starting a new Elm project. Very exciting!"
67 , "I would like to create two files to help you get started:"
69 , " 1. elm.json" <> D.black " ------------ describes your dependencies"
70 , " 2. src/Main.elm" <> D.black " ------ a basic Elm program to expand"
72 , "This is common to all Elm projects. Would you like me to create them? [Y/n]: "
77 do liftIO $ Dir.createDirectoryIfMissing True "src"
80 Task.report Progress.ElmJsonApproved
81 liftIO $ Dir.getCurrentDirectory
83 do Task.report Progress.ElmJsonRejected
84 Task.throw Exit.NoElmJson
87fetch :: FilePath -> Task.Task ()
91 ("https://experiment.elm-lang.org/" ++ Pkg.versionToString Elm.version ++ "/starter/" ++ path)
93 do response <- Client.httpLbs request manager
94 Right <$> LBS.writeFile path (Client.responseBody response)
102getWithReplFallback :: IO FilePath
104 do maybeRoot <- IO.find "elm.json"
108 do Dir.setCurrentDirectory root
112 do cache <- PerUserCache.getReplRoot
113 let root = cache </> "tmp"
114 Dir.createDirectoryIfMissing True root
115 Dir.setCurrentDirectory root
116 IO.removeDir "elm-stuff"
117 Encode.write "elm.json" (Project.encode (Pkg replInfo))
124 { _pkg_name = Pkg.dummyName
125 , _pkg_summary = "dummy code for the REPL"
126 , _pkg_license = Licenses.bsd3
127 , _pkg_version = Pkg.dummyVersion
128 , _pkg_exposed = Project.ExposedList []
129 , _pkg_deps = Map.singleton Pkg.core Con.anything
130 , _pkg_test_deps = Map.empty
131 , _pkg_elm_version = Con.defaultElm
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list