Skip to content
This repository was archived by the owner on Aug 3, 2024. It is now read-only.

Commit fdcd190

Browse files
bgamariFuuzetsu
authored andcommitted
Make the error encountered when a package can't be found more
user-friendly Closes #369
1 parent 0fc494f commit fdcd190

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

haddock-api/src/Haddock.hs

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import Haddock.Options
3939
import Haddock.Utils
4040

4141
import Control.Monad hiding (forM_)
42+
import Control.Applicative
4243
import Data.Foldable (forM_)
4344
import Data.List (isPrefixOf)
4445
import Control.Exception
@@ -250,9 +251,9 @@ render dflags flags qual ifaces installedIfaces srcMap = do
250251
allVisibleIfaces = [ i | i <- allIfaces, OptHide `notElem` instOptions i ]
251252

252253
pkgMod = ifaceMod (head ifaces)
253-
pkgKey = modulePackageKey pkgMod
254+
pkgKey = modulePackageKey pkgMod
254255
pkgStr = Just (packageKeyString pkgKey)
255-
(pkgName,pkgVer) = modulePackageInfo dflags flags pkgMod
256+
pkgNameVer = modulePackageInfo dflags flags pkgMod
256257

257258
(srcBase, srcModule, srcEntity, srcLEntity) = sourceUrls flags
258259
srcMap' = maybe srcMap (\path -> Map.insert pkgKey path srcMap) srcEntity
@@ -288,12 +289,20 @@ render dflags flags qual ifaces installedIfaces srcMap = do
288289
-- TODO: we throw away Meta for both Hoogle and LaTeX right now,
289290
-- might want to fix that if/when these two get some work on them
290291
when (Flag_Hoogle `elem` flags) $ do
291-
let pkgNameStr | unpackFS pkgNameFS == "main" && title /= []
292-
= title
293-
| otherwise = unpackFS pkgNameFS
294-
where PackageName pkgNameFS = pkgName
295-
ppHoogle dflags pkgNameStr pkgVer title (fmap _doc prologue) visibleIfaces
296-
odir
292+
case pkgNameVer of
293+
Nothing -> putStrLn . unlines $
294+
[ "haddock: Unable to find a package providing module "
295+
++ moduleNameString (moduleName pkgMod) ++ ", skipping Hoogle."
296+
, ""
297+
, " Perhaps try specifying the desired package explicitly"
298+
++ " using the --package-name"
299+
, " and --package-version arguments."
300+
]
301+
Just (PackageName pkgNameFS, pkgVer) ->
302+
let pkgNameStr | unpackFS pkgNameFS == "main" && title /= [] = title
303+
| otherwise = unpackFS pkgNameFS
304+
in ppHoogle dflags pkgNameStr pkgVer title (fmap _doc prologue)
305+
visibleIfaces odir
297306

298307
when (Flag_LaTeX `elem` flags) $ do
299308
ppLaTeX title pkgStr visibleIfaces odir (fmap _doc prologue) opt_latex_style
@@ -312,12 +321,12 @@ modulePackageInfo :: DynFlags
312321
-- contain the package name or version
313322
-- provided by the user which we
314323
-- prioritise
315-
-> Module -> (PackageName, Data.Version.Version)
324+
-> Module -> Maybe (PackageName, Data.Version.Version)
316325
modulePackageInfo dflags flags modu =
317-
(fromMaybe (packageName pkg) (optPackageName flags),
318-
fromMaybe (packageVersion pkg) (optPackageVersion flags))
326+
cmdline <|> pkgDb
319327
where
320-
pkg = getPackageDetails dflags (modulePackageKey modu)
328+
cmdline = (,) <$> optPackageName flags <*> optPackageVersion flags
329+
pkgDb = (\pkg -> (packageName pkg, packageVersion pkg)) <$> lookupPackage dflags (modulePackageKey modu)
321330

322331

323332
-------------------------------------------------------------------------------

0 commit comments

Comments
 (0)