Skip to content

Commit fc4ec43

Browse files
committed
feat: Specify component types in detailed deps page
With the advent of multiple sublibraries per package, it has become less clear what each component is, on the 'detailed dependencies' page. This changeset replaces the tabulated view of | component name | list of dependencies | | -------------- | -------------------- | | - lib 1 | - dep 1 | | | - dep 2 | | | | | - exe 1 | - dep 3 | With the more heirarchical: Libraries - lib 1 - dep 1 - dep 2 ... Executables - exe 1 - dep 3 This change is related to #1218
1 parent 9b8be6f commit fc4ec43

File tree

3 files changed

+27
-15
lines changed

3 files changed

+27
-15
lines changed

src/Distribution/Server/Features/Html.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1461,7 +1461,7 @@ mkHtmlCandidates ServerEnv{..} utilities@HtmlUtilities{..}
14611461
dependenciesPage :: Bool -> PackageRender -> URL -> Resource.XHtml
14621462
dependenciesPage isCandidate render docURL =
14631463
Resource.XHtml $ hackagePage (pkg ++ ": dependencies") $
1464-
[h2 << heading, Pages.renderDetailedDependencies render]
1464+
[h1 << heading, Pages.renderDetailedDependencies render]
14651465
++ Pages.renderPackageFlags render docURL
14661466
where
14671467
pkg = display $ rendPkgId render

src/Distribution/Server/Packages/Render.hs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,11 @@ data ModSigIndex = ModSigIndex {
6767
data PackageRender = PackageRender {
6868
rendPkgId :: PackageIdentifier,
6969
rendLibName :: LibraryName -> String,
70+
rendComponentName :: ComponentName -> String,
7071
rendDepends :: [Dependency],
7172
rendExecNames :: [String],
7273
rendLibraryDeps :: [(LibraryName, DependencyTree)],
73-
rendExecutableDeps :: [(String, DependencyTree)],
74+
rendExecutableDeps :: [(ComponentName, DependencyTree)],
7475
rendLicenseName :: String,
7576
rendLicenseFiles :: [FilePath],
7677
rendMaintainer :: Maybe String,
@@ -100,8 +101,9 @@ doPackageRender users info = PackageRender
100101
{ rendPkgId = packageId'
101102
, rendDepends = flatDependencies genDesc
102103
, rendLibName = renderLibName
104+
, rendComponentName = renderComponentName
103105
, rendExecNames = map (unUnqualComponentName . exeName) (executables flatDesc)
104-
, rendExecutableDeps = (unUnqualComponentName *** depTree buildInfo)
106+
, rendExecutableDeps = (CExeName *** depTree buildInfo)
105107
`map` condExecutables genDesc
106108
, rendLibraryDeps = second (depTree libBuildInfo) <$> allCondLibs genDesc
107109
, rendLicenseName = prettyShow (license desc) -- maybe make this a bit more human-readable
@@ -182,6 +184,10 @@ doPackageRender users info = PackageRender
182184
renderLibName (LSubLibName name) =
183185
packageName' ++ ":" ++ unUnqualComponentName name
184186

187+
renderComponentName :: ComponentName -> String
188+
renderComponentName (CLibName name) = renderLibName name
189+
renderComponentName name@(CNotLibName _) = componentNameRaw name
190+
185191
allCondLibs :: GenericPackageDescription -> [(LibraryName, CondTree ConfVar [Dependency] Library)]
186192
allCondLibs desc = maybeToList ((LMainLibName,) <$> condLibrary desc)
187193
++ (first LSubLibName <$> condSubLibraries desc)

src/Distribution/Server/Pages/Package.hs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import qualified Text.XHtml.Strict
3737
import Data.Bool (bool)
3838
import Data.Maybe (fromMaybe, isJust, mapMaybe, catMaybes)
3939
import Data.List (intersperse, intercalate, partition)
40-
import Control.Arrow (second, Arrow (..))
40+
import Control.Arrow (Arrow (..))
4141
import System.FilePath.Posix ((</>), (<.>))
4242

4343
import qualified Documentation.Haddock.Markup as Haddock
@@ -201,11 +201,6 @@ moduleSection render mdocIndex docURL mPkgId quickNav = case renderedModules of
201201
renderedModules :: [(LibraryName, ModSigIndex)]
202202
renderedModules = rendModules render mdocIndex
203203

204-
tabulate :: [(String, Html)] -> Html
205-
tabulate items = table ! [theclass "properties"] <<
206-
[tr << [th << t, td << d] | (t, d) <- items]
207-
208-
209204
renderDependencies :: PackageRender -> (String, Html)
210205
renderDependencies render =
211206
("Dependencies", summary +++ detailsLink)
@@ -236,12 +231,23 @@ nonbreakingSpan :: Html -> Html
236231
nonbreakingSpan str = thespan ! [thestyle "white-space: nowrap"] << str
237232

238233
renderDetailedDependencies :: PackageRender -> Html
239-
renderDetailedDependencies pkgRender =
240-
tabulate $ map (second (fromMaybe noDeps . render)) targets
234+
renderDetailedDependencies pkgRender
235+
= mconcat (mapMaybe renderComponentType componentsByType)
236+
241237
where
242-
targets :: [(String, DependencyTree)]
243-
targets = (first (rendLibName pkgRender) <$> rendLibraryDeps pkgRender)
244-
++ rendExecutableDeps pkgRender
238+
componentsByType :: [(String, [(ComponentName, DependencyTree)])]
239+
componentsByType =
240+
[ ("Libraries", first CLibName <$> rendLibraryDeps pkgRender)
241+
, ("Executables", rendExecutableDeps pkgRender)
242+
]
243+
244+
renderComponentType :: (String, [(ComponentName, DependencyTree)]) -> Maybe Html
245+
renderComponentType (_, []) = Nothing
246+
renderComponentType (componentType, items) = Just $ mconcat
247+
[ h2 << componentType
248+
, flip foldMap items $ \(componentName, deptree) ->
249+
h3 << rendComponentName pkgRender componentName +++ fromMaybe noDeps (render deptree)
250+
]
245251

246252
noDeps = list [toHtml "No dependencies"]
247253

@@ -257,7 +263,7 @@ renderDetailedDependencies pkgRender =
257263
NotBuildable -> [strong << "buildable:" +++ " False"]
258264

259265
list :: [Html] -> Html
260-
list items = thediv ! [identifier "detailed-dependencies"] << unordList items
266+
list items = unordList items ! [identifier "detailed-dependencies"]
261267

262268
renderComponent :: CondBranch ConfVar [Dependency] IsBuildable
263269
-> Maybe Html

0 commit comments

Comments
 (0)