1{-# OPTIONS_GHC -Wall #-}
5 , compile, Context(..), Result(..)
6 , Dealiaser, dummyDealiaser
7 , Error, errorToString, errorToJson, printError
8 , Warning, warningToString, warningToJson, printWarning
11import qualified Data.Aeson as Json
12import qualified Data.Map as Map
14import qualified AST.Module as Module
15import qualified Compile
16import qualified Docs.Check as Docs
17import qualified Elm.Compiler.Module as PublicModule
18import qualified Elm.Compiler.Version as Version
19import qualified Elm.Docs as Docs
20import qualified Generate.JavaScript as JS
21import qualified Optimize
22import qualified Parse.Module as Parse
23import qualified Parse.Parse as Parse
24import qualified Reporting.Annotation as A
25import qualified Reporting.Error as Error
26import qualified Reporting.PrettyPrint as P
27import qualified Reporting.Result as Result
28import qualified Reporting.Warning as Warning
47 -> Either [Error] (PublicModule.Name, [PublicModule.Name])
48parseDependencies sourceCode =
50 (Result.Result _warnings rawResult) =
51 Parse.parse sourceCode Parse.header
55 Left $ map (Error . A.map Error.Syntax) msgs
57 Result.Ok (Module.Header names _docs _exports imports) ->
59 ( PublicModule.Name names
60 , map (PublicModule.Name . fst . A.drop) imports
66{-| Compiles Elm source code to JavaScript. -}
70 -> Map.Map PublicModule.Name PublicModule.Interface
71 -> (Dealiaser, [Warning], Either [Error] Result)
73compile context source interfaces =
75 (Context user packageName isRoot isExposed) =
79 Map.mapKeysMonotonic (\(PublicModule.Name name) -> name) interfaces
81 (Result.Result (dealiaser, warnings) rawResult) =
82 do modul <- Compile.compile user packageName isRoot unwrappedInterfaces source
83 docs <- docsGen isExposed modul
85 let interface = Module.toInterface modul
86 let optModule = Optimize.optimize modul
87 let javascript = JS.generate optModule
89 return (Result docs interface javascript)
91 ( maybe dummyDealiaser Dealiaser dealiaser
92 , map Warning warnings
93 , Result.destruct (Left . map Error) Right rawResult
99 , _packageName :: String
106 { _docs :: Maybe Docs.Documentation
107 , _interface :: PublicModule.Interface
114 -> Module.CanonicalModule
115 -> Result.Result w Error.Error (Maybe Docs.Documentation)
116docsGen isExposed modul =
117 if not isExposed then
122 Docs.check (Module.exports modul) (Module.docs modul)
125 Docs.fromCheckedDocs (PublicModule.Name (Module.names modul)) checked
127 (Just . toDocs) `fmap` Result.mapError Error.Docs getChecked
133 Dealiaser P.Dealiaser
136dummyDealiaser :: Dealiaser
144 Error (A.Located Error.Error)
147errorToString :: Dealiaser -> String -> String -> Error -> String
148errorToString (Dealiaser dealiaser) location source (Error err) =
149 Error.toString dealiaser location source err
152printError :: Dealiaser -> String -> String -> Error -> IO ()
153printError (Dealiaser dealiaser) location source (Error err) =
154 Error.print dealiaser location source err
157errorToJson :: Dealiaser -> String -> Error -> Json.Value
158errorToJson (Dealiaser dealiaser) location (Error err) =
159 Error.toJson dealiaser location err
165 Warning (A.Located Warning.Warning)
168warningToString :: Dealiaser -> String -> String -> Warning -> String
169warningToString (Dealiaser dealiaser) location source (Warning err) =
170 Warning.toString dealiaser location source err
173printWarning :: Dealiaser -> String -> String -> Warning -> IO ()
174printWarning (Dealiaser dealiaser) location source (Warning err) =
175 Warning.print dealiaser location source err
178warningToJson :: Dealiaser -> String -> Warning -> Json.Value
179warningToJson (Dealiaser dealiaser) location (Warning err) =
180 Warning.toJson dealiaser location err
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