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
39version :: Package.Version
41 Elm.Compiler.Version.version
48parseDependencies :: String -> Either [Error] (PublicModule.Raw, [PublicModule.Raw])
49parseDependencies sourceCode =
51 (Result.Result _warnings rawResult) =
52 Parse.parse sourceCode Parse.header
56 Left $ map (Error . A.map Error.Syntax) msgs
58 Result.Ok (Module.Header _ name _ _ _ imports) ->
61 , map (fst . A.drop) imports
69{-| Compiles Elm source code to JavaScript. -}
73 -> PublicModule.Interfaces
74 -> (Localizer, [Warning], Either [Error] Result)
76compile context source interfaces =
78 (Context packageName isExposed dependencies) =
81 (Result.Result (localizer, warnings) rawResult) =
82 do modul <- Compile.compile packageName dependencies interfaces source
83 docs <- docsGen isExposed modul
85 let interface = Module.toInterface packageName modul
86 let javascript = JS.generate modul
88 return (Result docs interface javascript)
90 ( maybe dummyLocalizer Localizer localizer
91 , map Warning warnings
92 , Result.destruct (Left . map Error) Right rawResult
97 { _packageName :: Package.Name
99 , _dependencies :: [PublicModule.Canonical]
104 { _docs :: Maybe Docs.Documentation
105 , _interface :: PublicModule.Interface
113 -> Result.Result w Error.Error (Maybe Docs.Documentation)
114docsGen isExposed (Module.Module name _ info) =
115 if not isExposed then
121 Docs.check (Module.exports info) (Module.docs info)
124 Docs.fromCheckedDocs (ModuleName._module name) checked
126 (Just . toDocs) `fmap` Result.mapError Error.Docs getChecked
134 Localizer RenderType.Localizer
137dummyLocalizer :: Localizer
147 Error (A.Located Error.Error)
150errorToString :: Localizer -> String -> String -> Error -> String
151errorToString (Localizer localizer) location source (Error (A.A region err)) =
152 Report.toString location region (Error.toReport localizer err) source
155printError :: Handle -> Localizer -> String -> String -> Error -> IO ()
156printError handle (Localizer localizer) location source (Error (A.A region err)) =
157 Report.toHandle handle location region (Error.toReport localizer err) source
160errorToJson :: Localizer -> String -> Error -> Json.Value
161errorToJson (Localizer localizer) location (Error err) =
162 Error.toJson localizer location err
170 Warning (A.Located Warning.Warning)
173warningToString :: Localizer -> String -> String -> Warning -> String
174warningToString (Localizer localizer) location source (Warning (A.A region wrn)) =
175 Report.toString location region (Warning.toReport localizer wrn) source
178printWarning :: Handle -> Localizer -> String -> String -> Warning -> IO ()
179printWarning handle (Localizer localizer) location source (Warning (A.A region wrn)) =
180 Report.toHandle handle location region (Warning.toReport localizer wrn) source
183warningToJson :: Localizer -> String -> Warning -> Json.Value
184warningToJson (Localizer localizer) location (Warning wrn) =
185 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