@@ -52,7 +52,7 @@ data ErrorMessage
5252 | InvalidTopLevel
5353 | UnableToParseModule
5454 | UnsupportedExport
55- | ErrorInFile FilePath ErrorMessage
55+ | ErrorInModule ModuleIdentifier ErrorMessage
5656 deriving Show
5757
5858-- | Modules are either "regular modules" (i.e. those generated by psc) or foreign modules.
@@ -116,10 +116,13 @@ printErrorMessage UnsupportedExport =
116116 , " 1) exports.name = ..."
117117 , " 2) exports = { ... }"
118118 ]
119- printErrorMessage (ErrorInFile filename e) =
120- (" Error in file " ++ show filename ++ " :" )
119+ printErrorMessage (ErrorInModule mid e) =
120+ (" Error in module " ++ displayIdentifier mid ++ " :" )
121121 : " "
122122 : map (" " ++ ) (printErrorMessage e)
123+ where
124+ displayIdentifier (ModuleIdentifier name ty) =
125+ name ++ " (" ++ show ty ++ " )"
123126
124127-- | Unpack the node inside a JSNode. This is useful when pattern matching.
125128node :: JSNode -> Node
@@ -201,8 +204,10 @@ withDeps (Module modulePath es) = Module modulePath (map expandDeps es)
201204toModule :: forall m . (Applicative m , MonadError ErrorMessage m ) => S. Set String -> ModuleIdentifier -> JSNode -> m Module
202205toModule mids mid top
203206 | JSSourceElementsTop ns <- node top = Module mid <$> mapM toModuleElement ns
204- | otherwise = throwError InvalidTopLevel
207+ | otherwise = err InvalidTopLevel
205208 where
209+ err = throwError . ErrorInModule mid
210+
206211 toModuleElement :: JSNode -> m ModuleElement
207212 toModuleElement n
208213 | JSVariables var [ varIntro ] _ <- node n
@@ -254,7 +259,7 @@ toModule mids mid top
254259 toExport (JSPropertyNameandValue name _ [val] ) =
255260 (,,val,[] ) <$> exportType (node val)
256261 <*> extractLabel (node name)
257- toExport _ = throwError UnsupportedExport
262+ toExport _ = err UnsupportedExport
258263
259264 exportType :: Node -> m ExportType
260265 exportType (JSMemberDot [f] _ _)
@@ -264,12 +269,12 @@ toModule mids mid top
264269 | JSIdentifier " $foreign" <- node f
265270 = pure ForeignReexport
266271 exportType (JSIdentifier s) = pure (RegularExport s)
267- exportType _ = throwError UnsupportedExport
272+ exportType _ = err UnsupportedExport
268273
269274 extractLabel :: Node -> m String
270275 extractLabel (JSStringLiteral _ nm) = pure nm
271276 extractLabel (JSIdentifier nm) = pure nm
272- extractLabel _ = throwError UnsupportedExport
277+ extractLabel _ = err UnsupportedExport
273278
274279 isSeparator :: Node -> Bool
275280 isSeparator (JSLiteral " ," ) = True
@@ -525,7 +530,7 @@ bundle :: forall m. (Applicative m, MonadError ErrorMessage m)
525530 -> m String
526531bundle inputStrs entryPoints mainModule namespace = do
527532 input <- forM inputStrs $ \ (ident, js) -> do
528- ast <- either (const $ throwError UnableToParseModule ) pure $ parse js (moduleName ident)
533+ ast <- either (const $ throwError $ ErrorInModule ident UnableToParseModule ) pure $ parse js (moduleName ident)
529534 return (ident, ast)
530535
531536 let mids = S. fromList (map (moduleName . fst ) input)
0 commit comments