1{-# OPTIONS_GHC -Wall #-}
4 , compile, Context(..), Result(..)
6 , Localizer, dummyLocalizer
7 , Error, errorToDoc, errorToJson
8 , Warning, warningToDoc, warningToJson
10 , KernelInfo(..), parseKernel
14import qualified Data.Aeson as Json
15import qualified Data.Map as Map
16import Data.Text (Text)
17import qualified Data.ByteString.Builder as BS
18import Text.PrettyPrint.ANSI.Leijen (Doc)
20import qualified AST.Kernel as Kernel (Info)
21import qualified AST.Module as Module
22import qualified AST.Module.Name as ModuleName
23import qualified Compile
24import qualified Docs.Check as Docs
25import qualified Elm.Compiler.Imports as Imports
26import qualified Elm.Compiler.Module as M
27import qualified Elm.Compiler.Objects.Internal as Obj
28import qualified Elm.Compiler.Version
29import qualified Elm.Docs as Docs
30import qualified Elm.Package as Package
31import qualified Generate.JavaScript as JS
32import qualified Parse.Helpers as Parse (run)
33import qualified Parse.Kernel as Kernel (parser)
34import qualified Parse.Module as Parse (header)
35import qualified Reporting.Annotation as A
36import qualified Reporting.Bag as Bag
37import qualified Reporting.Error as Error
38import qualified Reporting.Render.Type as RenderType
39import qualified Reporting.Report as Report
40import qualified Reporting.Result as Result
41import qualified Reporting.Warning as Warning
48version :: Package.Version
50 Elm.Compiler.Version.version
57{-| Compiles Elm source code to JavaScript. -}
58compile :: Context -> Text -> (Localizer, [Warning], Either [Error] Result)
59compile (Context packageName exposed importDict interfaces) source =
61 (Result.Result oneLocalizer warnings answer) =
62 do modul <- Compile.compile packageName importDict interfaces source
63 docs <- Result.format id (docsGen exposed modul)
65 let iface = Module.toInterface modul
66 let objs = Obj.fromModule modul
68 return (Result docs iface objs)
70 ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
71 , Bag.toList Warning warnings
72 , Result.answerToEither Error id answer
78 { _package :: Package.Name
80 , _imports :: Map.Map M.Raw M.Canonical
81 , _interfaces :: M.Interfaces
87 { _docs :: Maybe Docs.Module
88 , _iface :: M.Interface
97docsGen :: Bool -> Module.Optimized -> Result.Result () w Error.Error (Maybe Docs.Module)
98docsGen isExposed (Module.Module name info) =
105 Just (Docs.Module (ModuleName._module name) checked)
107 toDocs <$> Docs.check (Module.exports info) (Module.docs info)
114generate :: Obj.Graph -> Obj.Roots -> BS.Builder
124 Localizer RenderType.Localizer
127dummyLocalizer :: Localizer
137 Error (A.Located Error.Error)
140errorToDoc :: Localizer -> String -> Text -> Error -> Doc
141errorToDoc (Localizer localizer) location source (Error (A.A region err)) =
142 Report.toDoc location region (Error.toReport localizer err) source
145errorToJson :: Localizer -> String -> Error -> Json.Value
146errorToJson (Localizer localizer) location (Error err) =
147 Error.toJson localizer location err
155 Warning (A.Located Warning.Warning)
158warningToDoc :: Localizer -> String -> Text -> Warning -> Doc
159warningToDoc (Localizer localizer) location source (Warning (A.A region wrn)) =
160 Report.toDoc location region (Warning.toReport localizer wrn) source
163warningToJson :: Localizer -> String -> Warning -> Json.Value
164warningToJson (Localizer localizer) location (Warning wrn) =
165 Warning.toJson localizer location wrn
172data Tag = Normal | Effect | Port
175parseHeader :: Package.Name -> Text -> Either Error (Tag, Maybe M.Raw, [M.Raw])
176parseHeader pkgName sourceCode =
177 case Parse.run Parse.header sourceCode of
179 Right $ toHeaderSummary pkgName header
182 Left (Error (A.map Error.Syntax err))
185toHeaderSummary :: Package.Name -> Module.Header [Module.UserImport] -> (Tag, Maybe M.Raw, [M.Raw])
186toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
189 if pkgName == Package.core
190 then map (A.drop . fst . A.drop) imports
191 else map (A.drop . fst . A.drop) imports ++ map fst Imports.defaults
193 case maybeHeaderDecl of
195 ( Normal, Nothing, dependencies )
197 Just (Module.HeaderDecl sourceTag name _ _ _) ->
201 Module.Normal -> Normal
202 Module.Port _ -> Port
203 Module.Effect _ -> Effect
205 ( tag, Just name, dependencies )
213 KernelInfo Kernel.Info
216parseKernel :: Text -> Either Error KernelInfo
217parseKernel sourceCode =
218 case Parse.run Kernel.parser sourceCode of
220 Right (KernelInfo info)
223 Left (Error (A.map Error.Syntax err))
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