@@ -1,7 +1,8 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2module Elm.Compiler
2module Elm.Compiler
3 ( version, rawVersion
3 ( version, rawVersion
4− , parseDependencies, compile
4+ , parseDependencies
5+ , compile, Context(..), Result(..)
5 , Dealiaser, dummyDealiaser
6 , Dealiaser, dummyDealiaser
6 , Error, errorToString, errorToJson, printError
7 , Error, errorToString, errorToJson, printError
7 , Warning, warningToString, warningToJson, printWarning
8 , Warning, warningToString, warningToJson, printWarning
@@ -12,8 +13,10 @@ import qualified Data.Map as Map
13import qualified AST.Module as Module
14import qualified AST.Module as Module
14import qualified Compile
15import qualified Compile
16+import qualified Docs.Check as Docs
15import qualified Elm.Compiler.Module as PublicModule
17import qualified Elm.Compiler.Module as PublicModule
16import qualified Elm.Compiler.Version as Version
18import qualified Elm.Compiler.Version as Version
19+import qualified Elm.Docs as Docs
17import qualified Generate.JavaScript as JS
20import qualified Generate.JavaScript as JS
18import qualified Parse.Module as Parse
21import qualified Parse.Module as Parse
19import qualified Parse.Parse as Parse
22import qualified Parse.Parse as Parse
@@ -50,7 +53,7 @@ parseDependencies sourceCode =
50 Result.Err msgs ->
53 Result.Err msgs ->
51 Left $ map (Error . A.map Error.Syntax) msgs
54 Left $ map (Error . A.map Error.Syntax) msgs
53− Result.Ok (Module.Header names _exports imports) ->
56+ Result.Ok (Module.Header names _docs _exports imports) ->
55 ( PublicModule.Name names
58 ( PublicModule.Name names
56 , map (PublicModule.Name . fst . A.drop) imports
59 , map (PublicModule.Name . fst . A.drop) imports
@@ -61,26 +64,61 @@ parseDependencies sourceCode =
62{-| Compiles Elm source code to JavaScript. -}
65{-| Compiles Elm source code to JavaScript. -}
64− :: String
67+ :: Context
68 -> Map.Map PublicModule.Name PublicModule.Interface
69 -> Map.Map PublicModule.Name PublicModule.Interface
69− -> (Dealiaser, [Warning], Either [Error] (PublicModule.Interface, String))
70+ -> (Dealiaser, [Warning], Either [Error] Result)
70−compile user packageName isRoot source interfaces =
71− let unwrappedInterfaces =
72− Map.mapKeysMonotonic (\(PublicModule.Name name) -> name) interfaces
74− (Result.Result (dealiaser, warnings) rawResult) =
72+compile context source interfaces =
74+ (Context user packageName isRoot isExposed) =
75− Compile.compile user packageName isRoot unwrappedInterfaces source
77+ unwrappedInterfaces =
76− in
78+ Map.mapKeysMonotonic (\(PublicModule.Name name) -> name) interfaces
77− (,,) (maybe dummyDealiaser Dealiaser dealiaser) (map Warning warnings) $
80− Right (Module.toInterface modul, JS.generate modul)
82− Result.Err errors ->
80+ (Result.Result (dealiaser, warnings) rawResult) =
81+ do modul <- Compile.compile user packageName isRoot unwrappedInterfaces source
82+ docs <- docsGen isExposed modul
83+ return (Result docs (Module.toInterface modul) (JS.generate modul))
85+ ( maybe dummyDealiaser Dealiaser dealiaser
86+ , map Warning warnings
83− Left (map Error errors)
87+ , Result.destruct (Left . map Error) Right rawResult
91+data Context = Context
93+ , _packageName :: String
100+ { _docs :: Maybe Docs.Documentation
101+ , _interface :: PublicModule.Interface
108+ -> Module.CanonicalModule
109+ -> Result.Result w Error.Error (Maybe Docs.Documentation)
110+docsGen isExposed modul =
111+ if not isExposed then
116+ Docs.check (Module.exports modul) (Module.docs modul)
119+ Docs.fromCheckedDocs (PublicModule.Name (Module.names modul)) checked
121+ (Just . toDocs) `fmap` Result.mapError Error.Docs getChecked
86-- DEALIASER
124-- DEALIASER