1{-# OPTIONS_GHC -Wall #-}
4 , compile, Context(..), Result(..)
6 , Localizer, dummyLocalizer
7 , Error, errorToDoc, errorToJson
8 , Warning, warningToDoc, warningToJson
13import qualified Data.Aeson as Json
14import qualified Data.Map as Map
15import qualified Data.Set as Set
16import Data.Text (Text)
17import qualified Data.ByteString.Builder as BS
18import Text.PrettyPrint.ANSI.Leijen (Doc)
20import qualified AST.Module as Module
21import qualified AST.Module.Name as ModuleName
22import qualified Compile
23import qualified Docs.Check as Docs
24import qualified Elm.Compiler.Imports as Imports
25import qualified Elm.Compiler.Module as M
26import qualified Elm.Compiler.Objects.Internal as Obj
27import qualified Elm.Compiler.Version
28import qualified Elm.Docs as Docs
29import qualified Elm.Package as Package
30import qualified Generate.JavaScript as JS
31import qualified Parse.Helpers as Parse (run)
32import qualified Parse.Module as Parse (header)
33import qualified Reporting.Annotation as A
34import qualified Reporting.Bag as Bag
35import qualified Reporting.Error as Error
36import qualified Reporting.Render.Type as RenderType
37import qualified Reporting.Report as Report
38import qualified Reporting.Result as Result
39import qualified Reporting.Warning as Warning
46version :: Package.Version
48 Elm.Compiler.Version.version
55{-| Compiles Elm source code to JavaScript. -}
56compile :: Context -> Text -> (Localizer, [Warning], Either [Error] Result)
57compile context source =
59 (Context packageName exposed importDict interfaces) =
62 (Result.Result oneLocalizer warnings answer) =
63 do modul <- Compile.compile packageName importDict interfaces source
64 docs <- Result.format id (docsGen exposed modul)
66 let iface = Module.toInterface modul
67 let objs = Obj.fromModule modul
69 return (Result docs iface objs)
71 ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
72 , Bag.toList Warning warnings
73 , Result.answerToEither Error id answer
79 { _package :: Package.Name
81 , _imports :: Map.Map M.Raw M.Canonical
82 , _interfaces :: M.Interfaces
88 { _docs :: Maybe Docs.Module
89 , _iface :: M.Interface
98docsGen :: Bool -> Module.Optimized -> Result.Result () w Error.Error (Maybe Docs.Module)
99docsGen isExposed (Module.Module name info) =
100 if not isExposed then
106 Just (Docs.Module (ModuleName._module name) checked)
108 toDocs <$> Docs.check (Module.exports info) (Module.docs info)
115generate :: Obj.SymbolTable -> Obj.Graph -> Obj.Roots -> (Set.Set M.Canonical, BS.Builder)
125 Localizer RenderType.Localizer
128dummyLocalizer :: Localizer
138 Error (A.Located Error.Error)
141errorToDoc :: Localizer -> String -> Text -> Error -> Doc
142errorToDoc (Localizer localizer) location source (Error (A.A region err)) =
143 Report.toDoc location region (Error.toReport localizer err) source
146errorToJson :: Localizer -> String -> Error -> Json.Value
147errorToJson (Localizer localizer) location (Error err) =
148 Error.toJson localizer location err
156 Warning (A.Located Warning.Warning)
159warningToDoc :: Localizer -> String -> Text -> Warning -> Doc
160warningToDoc (Localizer localizer) location source (Warning (A.A region wrn)) =
161 Report.toDoc location region (Warning.toReport localizer wrn) source
164warningToJson :: Localizer -> String -> Warning -> Json.Value
165warningToJson (Localizer localizer) location (Warning wrn) =
166 Warning.toJson localizer location wrn
173data Tag = Normal | Effect | Port
176parseHeader :: Package.Name -> Text -> Either Error (Tag, Maybe M.Raw, [M.Raw])
177parseHeader pkgName sourceCode =
178 case Parse.run Parse.header sourceCode of
180 Right $ toHeaderSummary pkgName header
183 Left (Error (A.map Error.Syntax err))
186toHeaderSummary :: Package.Name -> Module.Header [Module.UserImport] -> (Tag, Maybe M.Raw, [M.Raw])
187toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
190 if pkgName == Package.core
191 then map (fst . A.drop) imports
192 else map (fst . A.drop) imports ++ map fst Imports.defaults
194 case maybeHeaderDecl of
196 ( Normal, Nothing, dependencies )
198 Just (Module.HeaderDecl sourceTag name _ _ _) ->
202 Module.Normal -> Normal
203 Module.Port _ -> Port
204 Module.Effect _ -> Effect
206 ( tag, Just name, dependencies )
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