1{-# OPTIONS_GHC -Wall #-}
4 , parseDependencies, Tag(..)
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 qualified Data.Text.Lazy as LazyText
15import System.IO (Handle)
17import qualified AST.Module as Module
18import qualified AST.Module.Name as ModuleName
19import qualified Compile
20import qualified Docs.Check as Docs
21import qualified Elm.Compiler.Imports as Imports
22import qualified Elm.Compiler.Module as PublicModule
23import qualified Elm.Compiler.Version
24import qualified Elm.Docs as Docs
25import qualified Elm.Package as Package
26import qualified Generate.JavaScript as JS
27import qualified Parse.Module as Parse
28import qualified Parse.Parse as Parse
29import qualified Reporting.Annotation as A
30import qualified Reporting.Bag as Bag
31import qualified Reporting.Error as Error
32import qualified Reporting.Render.Type as RenderType
33import qualified Reporting.Report as Report
34import qualified Reporting.Result as Result
35import qualified Reporting.Warning as Warning
42version :: Package.Version
44 Elm.Compiler.Version.version
60 -> Either [Error] (Tag, PublicModule.Raw, [PublicModule.Raw])
61parseDependencies pkgName sourceCode =
63 (Result.Result _ _ answer) =
64 Parse.parse sourceCode Parse.header
66 Result.answerToEither (Error . A.map Error.Syntax) (getDeps pkgName) answer
71 -> Module.Header [Module.UserImport]
72 -> (Tag, PublicModule.Raw, [PublicModule.Raw])
73getDeps pkgName (Module.Header sourceTag name _ _ _ imports) =
77 Module.Normal -> Normal
79 Module.Effect _ -> Effect
82 if pkgName == Package.core then
83 map (fst . A.drop) imports
85 map (fst . A.drop) imports ++ map fst Imports.defaults
94{-| Compiles Elm source code to JavaScript. -}
98 -> PublicModule.Interfaces
99 -> (Localizer, [Warning], Either [Error] Result)
101compile context source interfaces =
103 (Context packageName isExposed dependencies) =
106 (Result.Result oneLocalizer warnings answer) =
107 do modul <- Compile.compile packageName dependencies interfaces source
108 docs <- Result.format Error.Docs (docsGen isExposed modul)
110 let interface = Module.toInterface packageName modul
111 let javascript = JS.generate modul
113 return (Result docs interface javascript)
115 ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
116 , Bag.toList Warning warnings
117 , Result.answerToEither Error id answer
121data Context = Context
122 { _packageName :: Package.Name
124 , _dependencies :: [PublicModule.Canonical]
129 { _docs :: Maybe Docs.Documentation
130 , _interface :: PublicModule.Interface
131 , _js :: LazyText.Text
135docsGen :: Bool -> Module.Optimized -> Docs.Result w (Maybe Docs.Documentation)
136docsGen isExposed (Module.Module name _ info) =
137 if not isExposed then
143 Just (Docs.fromCheckedDocs (ModuleName._module name) checked)
145 toDocs <$> Docs.check (Module.exports info) (Module.docs info)
153 Localizer RenderType.Localizer
156dummyLocalizer :: Localizer
166 Error (A.Located Error.Error)
169errorToString :: Localizer -> String -> String -> Error -> String
170errorToString (Localizer localizer) location source (Error (A.A region err)) =
171 Report.toString location region (Error.toReport localizer err) source
174printError :: Handle -> Localizer -> String -> String -> Error -> IO ()
175printError handle (Localizer localizer) location source (Error (A.A region err)) =
176 Report.toHandle handle location region (Error.toReport localizer err) source
179errorToJson :: Localizer -> String -> Error -> Json.Value
180errorToJson (Localizer localizer) location (Error err) =
181 Error.toJson localizer location err
189 Warning (A.Located Warning.Warning)
192warningToString :: Localizer -> String -> String -> Warning -> String
193warningToString (Localizer localizer) location source (Warning (A.A region wrn)) =
194 Report.toString location region (Warning.toReport localizer wrn) source
197printWarning :: Handle -> Localizer -> String -> String -> Warning -> IO ()
198printWarning handle (Localizer localizer) location source (Warning (A.A region wrn)) =
199 Report.toHandle handle location region (Warning.toReport localizer wrn) source
202warningToJson :: Localizer -> String -> Warning -> Json.Value
203warningToJson (Localizer localizer) location (Warning wrn) =
204 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