1{-# OPTIONS_GHC -Wall #-}
5 , compile, Context(..), Result(..)
6 , Localizer, dummyLocalizer
7 , Error, errorToString, errorToJson, printError
8 , Warning, warningToString, warningToJson, printWarning
12import qualified Data.Aeson as Json
13import qualified Data.Map as Map
14import System.IO (Handle)
16import qualified AST.Module as Module
17import qualified AST.Module.Name as ModuleName
18import qualified Compile
19import qualified Docs.Check as Docs
20import qualified Elm.Compiler.Version
21import qualified Elm.Compiler.Module as PublicModule
22import qualified Elm.Docs as Docs
23import qualified Elm.Package as Package
24import qualified Generate.JavaScript as JS
25import qualified Parse.Module as Parse
26import qualified Parse.Parse as Parse
27import qualified Reporting.Annotation as A
28import qualified Reporting.Error as Error
29import qualified Reporting.Render.Type as RenderType
30import qualified Reporting.Report as Report
31import qualified Reporting.Result as Result
32import qualified Reporting.Warning as Warning
37version :: Package.Version
39 Elm.Compiler.Version.version
46 -> Either [Error] (PublicModule.Name, [PublicModule.Name])
47parseDependencies sourceCode =
49 (Result.Result _warnings rawResult) =
50 Parse.parse sourceCode Parse.header
54 Left $ map (Error . A.map Error.Syntax) msgs
56 Result.Ok (Module.Header _kind name _docs _exports imports) ->
58 ( PublicModule.Name name
59 , map (PublicModule.Name . fst . A.drop) imports
65{-| Compiles Elm source code to JavaScript. -}
69 -> PublicModule.Interfaces
70 -> (Localizer, [Warning], Either [Error] Result)
72compile context source interfaces =
74 (Context packageName isExposed dependencies) =
77 (Result.Result (localizer, warnings) rawResult) =
78 do modul <- Compile.compile packageName dependencies interfaces source
79 docs <- docsGen isExposed modul
81 let interface = Module.toInterface packageName modul
82 let javascript = JS.generate modul
84 return (Result docs interface javascript)
86 ( maybe dummyLocalizer Localizer localizer
87 , map Warning warnings
88 , Result.destruct (Left . map Error) Right rawResult
93 { _packageName :: Package.Name
95 , _dependencies :: [PublicModule.CanonicalName]
100 { _docs :: Maybe Docs.Documentation
101 , _interface :: PublicModule.Interface
109 -> Result.Result w Error.Error (Maybe Docs.Documentation)
110docsGen isExposed modul =
111 if not isExposed then
116 Docs.check (Module.exports modul) (Module.docs modul)
119 PublicModule.Name (ModuleName._module (Module.name modul))
122 Docs.fromCheckedDocs name checked
124 (Just . toDocs) `fmap` Result.mapError Error.Docs getChecked
130 Localizer RenderType.Localizer
133dummyLocalizer :: Localizer
141 Error (A.Located Error.Error)
144errorToString :: Localizer -> String -> String -> Error -> String
145errorToString (Localizer localizer) location source (Error (A.A region err)) =
146 Report.toString location region (Error.toReport localizer err) source
149printError :: Handle -> Localizer -> String -> String -> Error -> IO ()
150printError handle (Localizer localizer) location source (Error (A.A region err)) =
151 Report.toHandle handle location region (Error.toReport localizer err) source
154errorToJson :: Localizer -> String -> Error -> Json.Value
155errorToJson (Localizer localizer) location (Error err) =
156 Error.toJson localizer location err
162 Warning (A.Located Warning.Warning)
165warningToString :: Localizer -> String -> String -> Warning -> String
166warningToString (Localizer localizer) location source (Warning (A.A region wrn)) =
167 Report.toString location region (Warning.toReport localizer wrn) source
170printWarning :: Handle -> Localizer -> String -> String -> Warning -> IO ()
171printWarning handle (Localizer localizer) location source (Warning (A.A region wrn)) =
172 Report.toHandle handle location region (Warning.toReport localizer wrn) source
175warningToJson :: Localizer -> String -> Warning -> Json.Value
176warningToJson (Localizer localizer) location (Warning wrn) =
177 Warning.toJson localizer location wrn
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