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 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
50parseDependencies :: String -> Either [Error] (PublicModule.Raw, [PublicModule.Raw])
51parseDependencies sourceCode =
53 (Result.Result _ _ answer) =
54 Parse.parse sourceCode Parse.header
56 getDeps (Module.Header _ name _ _ _ imports) =
57 ( name, map (fst . A.drop) imports )
59 Result.answerToEither (Error . A.map Error.Syntax) getDeps answer
66{-| Compiles Elm source code to JavaScript. -}
70 -> PublicModule.Interfaces
71 -> (Localizer, [Warning], Either [Error] Result)
73compile context source interfaces =
75 (Context packageName isExposed dependencies) =
78 (Result.Result oneLocalizer warnings answer) =
79 do modul <- Compile.compile packageName dependencies interfaces source
80 docs <- Result.format Error.Docs (docsGen isExposed modul)
82 let interface = Module.toInterface packageName modul
83 let javascript = JS.generate modul
85 return (Result docs interface javascript)
87 ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
88 , Bag.toList Warning warnings
89 , Result.answerToEither Error id answer
94 { _packageName :: Package.Name
96 , _dependencies :: [PublicModule.Canonical]
101 { _docs :: Maybe Docs.Documentation
102 , _interface :: PublicModule.Interface
103 , _js :: LazyText.Text
107docsGen :: Bool -> Module.Optimized -> Docs.Result w (Maybe Docs.Documentation)
108docsGen isExposed (Module.Module name _ info) =
109 if not isExposed then
115 Just (Docs.fromCheckedDocs (ModuleName._module name) checked)
117 toDocs <$> Docs.check (Module.exports info) (Module.docs info)
125 Localizer RenderType.Localizer
128dummyLocalizer :: Localizer
138 Error (A.Located Error.Error)
141errorToString :: Localizer -> String -> String -> Error -> String
142errorToString (Localizer localizer) location source (Error (A.A region err)) =
143 Report.toString location region (Error.toReport localizer err) source
146printError :: Handle -> Localizer -> String -> String -> Error -> IO ()
147printError handle (Localizer localizer) location source (Error (A.A region err)) =
148 Report.toHandle handle location region (Error.toReport localizer err) source
151errorToJson :: Localizer -> String -> Error -> Json.Value
152errorToJson (Localizer localizer) location (Error err) =
153 Error.toJson localizer location err
161 Warning (A.Located Warning.Warning)
164warningToString :: Localizer -> String -> String -> Warning -> String
165warningToString (Localizer localizer) location source (Warning (A.A region wrn)) =
166 Report.toString location region (Warning.toReport localizer wrn) source
169printWarning :: Handle -> Localizer -> String -> String -> Warning -> IO ()
170printWarning handle (Localizer localizer) location source (Warning (A.A region wrn)) =
171 Report.toHandle handle location region (Warning.toReport localizer wrn) source
174warningToJson :: Localizer -> String -> Warning -> Json.Value
175warningToJson (Localizer localizer) location (Warning wrn) =
176 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