1{-# OPTIONS_GHC -Wall #-}
5 , compile, Context(..), Result(..)
6 , Dealiaser, dummyDealiaser
7 , Error, errorToString, errorToJson, printError
8 , Warning, warningToString, warningToJson, printWarning
11import qualified Data.Aeson as Json
12import qualified Data.Map as Map
14import qualified AST.Module as Module
15import qualified Compile
16import qualified Docs.Check as Docs
17import qualified Elm.Compiler.Version
18import qualified Elm.Compiler.Module as PublicModule
19import qualified Elm.Docs as Docs
20import qualified Elm.Package as Package
21import qualified Generate.JavaScript as JS
22import qualified Optimize
23import qualified Parse.Module as Parse
24import qualified Parse.Parse as Parse
25import qualified Reporting.Annotation as A
26import qualified Reporting.Error as Error
27import qualified Reporting.PrettyPrint as P
28import qualified Reporting.Result as Result
29import qualified Reporting.Warning as Warning
34version :: Package.Version
36 Elm.Compiler.Version.version
43 -> Either [Error] (PublicModule.Name, [PublicModule.Name])
44parseDependencies sourceCode =
46 (Result.Result _warnings rawResult) =
47 Parse.parse sourceCode Parse.header
51 Left $ map (Error . A.map Error.Syntax) msgs
53 Result.Ok (Module.Header names _docs _exports imports) ->
55 ( PublicModule.Name names
56 , map (PublicModule.Name . fst . A.drop) imports
62{-| Compiles Elm source code to JavaScript. -}
66 -> Map.Map PublicModule.CanonicalName PublicModule.Interface
67 -> (Dealiaser, [Warning], Either [Error] Result)
69compile context source interfaces =
71 (Context packageName isRoot isExposed modulePackages) =
75 Map.mapKeysMonotonic PublicModule.fromCanonicalName interfaces
78 Map.mapKeysMonotonic (\(PublicModule.Name strs) -> strs ) modulePackages
80 (Result.Result (dealiaser, warnings) rawResult) =
81 do modul <- Compile.compile unwrappedPackages packageName isRoot unwrappedInterfaces source
82 docs <- docsGen isExposed modul
84 let interface = Module.toInterface packageName modul
85 let optModule = Optimize.optimize modul
86 let javascript = JS.generate optModule
88 return (Result docs interface javascript)
90 ( maybe dummyDealiaser Dealiaser dealiaser
91 , map Warning warnings
92 , Result.destruct (Left . map Error) Right rawResult
97 { _packageName :: Package.Name
100 , _modulePackages :: Map.Map PublicModule.Name Package.Name
105 { _docs :: Maybe Docs.Documentation
106 , _interface :: PublicModule.Interface
113 -> Module.CanonicalModule
114 -> Result.Result w Error.Error (Maybe Docs.Documentation)
115docsGen isExposed modul =
116 if not isExposed then
121 Docs.check (Module.exports modul) (Module.docs modul)
124 Docs.fromCheckedDocs (PublicModule.Name (Module.names modul)) checked
126 (Just . toDocs) `fmap` Result.mapError Error.Docs getChecked
132 Dealiaser P.Dealiaser
135dummyDealiaser :: Dealiaser
143 Error (A.Located Error.Error)
146errorToString :: Dealiaser -> String -> String -> Error -> String
147errorToString (Dealiaser dealiaser) location source (Error err) =
148 Error.toString dealiaser location source err
151printError :: Dealiaser -> String -> String -> Error -> IO ()
152printError (Dealiaser dealiaser) location source (Error err) =
153 Error.print dealiaser location source err
156errorToJson :: Dealiaser -> String -> Error -> Json.Value
157errorToJson (Dealiaser dealiaser) location (Error err) =
158 Error.toJson dealiaser location err
164 Warning (A.Located Warning.Warning)
167warningToString :: Dealiaser -> String -> String -> Warning -> String
168warningToString (Dealiaser dealiaser) location source (Warning err) =
169 Warning.toString dealiaser location source err
172printWarning :: Dealiaser -> String -> String -> Warning -> IO ()
173printWarning (Dealiaser dealiaser) location source (Warning err) =
174 Warning.print dealiaser location source err
177warningToJson :: Dealiaser -> String -> Warning -> Json.Value
178warningToJson (Dealiaser dealiaser) location (Warning err) =
179 Warning.toJson dealiaser location 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