1
1
{-# LANGUAGE CPP #-}
2
2
{-# LANGUAGE LambdaCase #-}
3
+ {-# LANGUAGE NamedFieldPuns #-}
3
4
{-# LANGUAGE OverloadedStrings #-}
4
5
{-# LANGUAGE Rank2Types #-}
5
6
{-# LANGUAGE ScopedTypeVariables #-}
@@ -199,11 +200,17 @@ haddockWithGhc ghc args = handleTopExceptions $ do
199
200
200
201
if not (null files) then do
201
202
(packages, ifaces, homeLinks) <- readPackagesAndProcessModules flags files
203
+ let packageInfo = PackageInfo { piPackageName =
204
+ fromMaybe (PackageName mempty ) (optPackageName flags)
205
+ , piPackageVersion =
206
+ fromMaybe (makeVersion [] ) (optPackageVersion flags)
207
+ }
202
208
203
209
-- Dump an "interface file" (.haddock file), if requested.
204
210
forM_ (optDumpInterfaceFile flags) $ \ path -> liftIO $ do
205
211
writeInterfaceFile path InterfaceFile {
206
212
ifInstalledIfaces = map toInstalledIface ifaces
213
+ , ifPackageInfo = packageInfo
207
214
, ifLinkEnv = homeLinks
208
215
}
209
216
@@ -277,9 +284,9 @@ renderStep logger dflags unit_state flags sinceQual nameQual pkgs interfaces = d
277
284
, ifaceFile)) pkgs)
278
285
let
279
286
installedIfaces =
280
- concatMap
287
+ map
281
288
(\ (_, showModules, ifaceFilePath, ifaceFile)
282
- -> (showModules, ifaceFilePath,) <$> ifInstalledIfaces ifaceFile)
289
+ -> (ifaceFilePath, mkPackageInterfaces showModules ifaceFile) )
283
290
pkgs
284
291
extSrcMap = Map. fromList $ do
285
292
((_, Just path), _, _, ifile) <- pkgs
@@ -296,10 +303,16 @@ renderStep logger dflags unit_state flags sinceQual nameQual pkgs interfaces = d
296
303
297
304
-- | Render the interfaces with whatever backend is specified in the flags.
298
305
render :: Logger -> DynFlags -> UnitState -> [Flag ] -> SinceQual -> QualOption -> [Interface ]
299
- -> [(Visibility , FilePath , InstalledInterface )] -> Map Module FilePath -> IO ()
300
- render logger dflags unit_state flags sinceQual qual ifaces installedIfaces extSrcMap = do
306
+ -> [(FilePath , PackageInterfaces )] -> Map Module FilePath -> IO ()
307
+ render logger dflags unit_state flags sinceQual qual ifaces packages extSrcMap = do
301
308
302
309
let
310
+ packageInfo = PackageInfo { piPackageName = fromMaybe (PackageName mempty )
311
+ $ optPackageName flags
312
+ , piPackageVersion = fromMaybe (makeVersion [] )
313
+ $ optPackageVersion flags
314
+ }
315
+
303
316
title = fromMaybe " " (optTitle flags)
304
317
unicode = Flag_UseUnicode `elem` flags
305
318
pretty = Flag_PrettyHtml `elem` flags
@@ -317,10 +330,32 @@ render logger dflags unit_state flags sinceQual qual ifaces installedIfaces extS
317
330
318
331
visibleIfaces = [ i | i <- ifaces, OptHide `notElem` ifaceOptions i ]
319
332
320
- -- /All/ visible interfaces including external package modules.
321
- allIfaces = map ((Visible ,) . toInstalledIface) ifaces
322
- ++ map (\ (showModules,_,iface) -> (showModules,iface)) installedIfaces
323
- allVisibleIfaces = [ i | (Visible , i) <- allIfaces, OptHide `notElem` instOptions i ]
333
+ -- /All/ interfaces including external package modules, grouped by
334
+ -- interface file (package).
335
+ allPackages :: [PackageInterfaces ]
336
+ allPackages = [PackageInterfaces
337
+ { piPackageInfo = packageInfo
338
+ , piVisibility = Visible
339
+ , piInstalledInterfaces = map toInstalledIface ifaces
340
+ }]
341
+ ++ map snd packages
342
+
343
+ -- /All/ visible interfaces including external package modules, grouped by
344
+ -- interface file (package).
345
+ allVisiblePackages :: [PackageInterfaces ]
346
+ allVisiblePackages = [ pinfo { piInstalledInterfaces =
347
+ filter (\ i -> OptHide `notElem` instOptions i)
348
+ piInstalledInterfaces
349
+ }
350
+ | pinfo@ PackageInterfaces
351
+ { piVisibility = Visible
352
+ , piInstalledInterfaces
353
+ } <- allPackages
354
+ ]
355
+
356
+ -- /All/ installed interfaces.
357
+ allInstalledIfaces :: [InstalledInterface ]
358
+ allInstalledIfaces = concatMap (piInstalledInterfaces . snd ) packages
324
359
325
360
pkgMod = fmap ifaceMod (listToMaybe ifaces)
326
361
pkgKey = fmap moduleUnit pkgMod
@@ -364,7 +399,7 @@ render logger dflags unit_state flags sinceQual qual ifaces installedIfaces extS
364
399
sourceUrls' = (srcBase, srcModule', pkgSrcMap', pkgSrcLMap')
365
400
366
401
installedMap :: Map Module InstalledInterface
367
- installedMap = Map. fromList [ (unwire (instMod iface), iface) | (_, _, iface) <- installedIfaces ]
402
+ installedMap = Map. fromList [ (unwire (instMod iface), iface) | iface <- allInstalledIfaces ]
368
403
369
404
-- The user gives use base-4.9.0.0, but the InstalledInterface
370
405
-- records the *wired in* identity base. So untranslate it
@@ -400,7 +435,7 @@ render logger dflags unit_state flags sinceQual qual ifaces installedIfaces extS
400
435
_ <- {-# SCC ppHtmlIndex #-}
401
436
ppHtmlIndex odir title pkgStr
402
437
themes opt_mathjax opt_contents_url sourceUrls' opt_wiki_urls
403
- allVisibleIfaces pretty
438
+ ( concatMap piInstalledInterfaces allVisiblePackages) pretty
404
439
return ()
405
440
406
441
unless withBaseURL $
@@ -411,7 +446,7 @@ render logger dflags unit_state flags sinceQual qual ifaces installedIfaces extS
411
446
_ <- {-# SCC ppHtmlContents #-}
412
447
ppHtmlContents unit_state odir title pkgStr
413
448
themes opt_mathjax opt_index_url sourceUrls' opt_wiki_urls
414
- allVisibleIfaces True prologue pretty
449
+ allVisiblePackages True prologue pretty
415
450
sincePkg (makeContentsQual qual)
416
451
return ()
417
452
copyHtmlBits odir libDir themes withQuickjump
@@ -421,18 +456,18 @@ render logger dflags unit_state flags sinceQual qual ifaces installedIfaces extS
421
456
unicode Nothing qual
422
457
ifaces
423
458
( nub
424
- . map ( \ (_,a,_) -> a)
425
- . filter (\ (v,_,_) -> v == Visible )
426
- $ installedIfaces )
459
+ . map fst
460
+ . filter (( == Visible ) . piVisibility . snd )
461
+ $ packages )
427
462
428
463
when (Flag_Html `elem` flags) $ do
429
464
withTiming logger dflags' " ppHtml" (const () ) $ do
430
465
_ <- {-# SCC ppHtml #-}
431
466
ppHtml unit_state title pkgStr visibleIfaces reexportedIfaces odir
432
467
prologue
433
468
themes opt_mathjax sourceUrls' opt_wiki_urls opt_base_url
434
- opt_contents_url opt_index_url unicode sincePkg qual
435
- pretty withQuickjump
469
+ opt_contents_url opt_index_url unicode sincePkg packageInfo
470
+ qual pretty withQuickjump
436
471
return ()
437
472
unless withBaseURL $ do
438
473
copyHtmlBits odir libDir themes withQuickjump
@@ -496,7 +531,8 @@ readInterfaceFiles name_cache_accessor pairs bypass_version_check = do
496
531
putStrLn (" " ++ err)
497
532
putStrLn " Skipping this interface."
498
533
return Nothing
499
- Right f -> return (Just (paths, showModules, file, f))
534
+ Right f ->
535
+ return (Just (paths, showModules, file, f ))
500
536
501
537
502
538
-------------------------------------------------------------------------------
0 commit comments