Skip to content

Commit 184d97f

Browse files
committed
Include a module identifier in psc-bundle errors
1 parent 5caf09a commit 184d97f

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

src/Language/PureScript/Bundle.hs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
125128
node :: JSNode -> Node
@@ -201,8 +204,10 @@ withDeps (Module modulePath es) = Module modulePath (map expandDeps es)
201204
toModule :: forall m. (Applicative m, MonadError ErrorMessage m) => S.Set String -> ModuleIdentifier -> JSNode -> m Module
202205
toModule 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
526531
bundle 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

Comments
 (0)