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.Version
22import qualified Elm.Compiler.Module as PublicModule
23import qualified Elm.Docs as Docs
24import qualified Elm.Package as Package
25import qualified Generate.JavaScript as JS
26import qualified Parse.Module as Parse
27import qualified Parse.Parse as Parse
28import qualified Reporting.Annotation as A
29import qualified Reporting.Bag as Bag
30import qualified Reporting.Error as Error
31import qualified Reporting.Render.Type as RenderType
32import qualified Reporting.Report as Report
33import qualified Reporting.Result as Result
34import qualified Reporting.Warning as Warning
41version :: Package.Version
43 Elm.Compiler.Version.version
56parseDependencies :: String -> Either [Error] (Tag, PublicModule.Raw, [PublicModule.Raw])
57parseDependencies sourceCode =
59 (Result.Result _ _ answer) =
60 Parse.parse sourceCode Parse.header
62 getDeps (Module.Header sourceTag name _ _ _ imports) =
66 Module.Normal -> Normal
68 Module.Effect _ -> Effect
72 , map (fst . A.drop) imports
75 Result.answerToEither (Error . A.map Error.Syntax) getDeps answer
82{-| Compiles Elm source code to JavaScript. -}
86 -> PublicModule.Interfaces
87 -> (Localizer, [Warning], Either [Error] Result)
89compile context source interfaces =
91 (Context packageName isExposed dependencies) =
94 (Result.Result oneLocalizer warnings answer) =
95 do modul <- Compile.compile packageName dependencies interfaces source
96 docs <- Result.format Error.Docs (docsGen isExposed modul)
98 let interface = Module.toInterface packageName modul
99 let javascript = JS.generate modul
101 return (Result docs interface javascript)
103 ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
104 , Bag.toList Warning warnings
105 , Result.answerToEither Error id answer
109data Context = Context
110 { _packageName :: Package.Name
112 , _dependencies :: [PublicModule.Canonical]
117 { _docs :: Maybe Docs.Documentation
118 , _interface :: PublicModule.Interface
119 , _js :: LazyText.Text
123docsGen :: Bool -> Module.Optimized -> Docs.Result w (Maybe Docs.Documentation)
124docsGen isExposed (Module.Module name _ info) =
125 if not isExposed then
131 Just (Docs.fromCheckedDocs (ModuleName._module name) checked)
133 toDocs <$> Docs.check (Module.exports info) (Module.docs info)
141 Localizer RenderType.Localizer
144dummyLocalizer :: Localizer
154 Error (A.Located Error.Error)
157errorToString :: Localizer -> String -> String -> Error -> String
158errorToString (Localizer localizer) location source (Error (A.A region err)) =
159 Report.toString location region (Error.toReport localizer err) source
162printError :: Handle -> Localizer -> String -> String -> Error -> IO ()
163printError handle (Localizer localizer) location source (Error (A.A region err)) =
164 Report.toHandle handle location region (Error.toReport localizer err) source
167errorToJson :: Localizer -> String -> Error -> Json.Value
168errorToJson (Localizer localizer) location (Error err) =
169 Error.toJson localizer location err
177 Warning (A.Located Warning.Warning)
180warningToString :: Localizer -> String -> String -> Warning -> String
181warningToString (Localizer localizer) location source (Warning (A.A region wrn)) =
182 Report.toString location region (Warning.toReport localizer wrn) source
185printWarning :: Handle -> Localizer -> String -> String -> Warning -> IO ()
186printWarning handle (Localizer localizer) location source (Warning (A.A region wrn)) =
187 Report.toHandle handle location region (Warning.toReport localizer wrn) source
190warningToJson :: Localizer -> String -> Warning -> Json.Value
191warningToJson (Localizer localizer) location (Warning wrn) =
192 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