Build haddock documentation of a cabal project
cabal
command:
haddock-project
which allows to build cabal documentation of
a cabal project which possibly consists of multiple packages. This is often
useful when you are working on a larger project which contains multiple
packages and you either don't want to or you cannot publish them on hackage.
Currently the final pull
request is under review. The line of work which lead to this started with many
changes to the haddock
command:
- Better support for multiple packages
- Document multi component support
- multiple packages support
- Allow to hide interfaces when rendering multiple components
- Check if doc-index.json exists before reading it
- Version bump 2.26.1
- Use visibility to decide which interfaces are included in quickjump
- Render module tree per package in the content page
haddock
has two modes of operation. It is used to build
documentation and render it either as html
or
latex
, and secondly it can be used build content page together
with a html and quickjump indexes. The content page contains can
include a custom prologue followed by a tree of modules. That's not the same
page as the landing page on hackage, but it will look familiar for you, for
example here is base
package
content page.
haddock
can now build the content page with a consistent html and
quickjump index of all local packages, where all header links point to the top
level page / index and probably most important where all the links can be
resolved either locally or to hackage
.
If there are multiple packages, the content page will contain a module tree
per package, and haddock allows to control which packages are visible.
cabal haddock-project
uses this to only show trees of local
packages, without listing module trees of dependencies (e.g. base
package).
See here
for a sample.
The cabal haddock-project
requires haddock-2.26.1
,
which isn't yet published. However, the
pull request fixes the --with-haddock
option
which allows to configure which haddock
command to use. If you
want to try it, you will also need to pass --lib
option which
points to the
haddock-api/resources
directory (once haddock-2.26.1
is distributed with one of the
future versions of ghc
, neither --with-haddock
nor
--lib
will be necessary).
cabal haddock-project
can either build a self contained
directory or a directory which links to hackage
. In the first
case you will need to run:
cabal haddock-project \ --with-haddock=$HADDOCK \ # point to haddock-2.26.1 --lib=$HADDOCK_LIB \ # point to haddock-api/resources --localThis command will build
./haddocks
directory which you can serve
with a http server. It will contain documentation of all the local packages
and its dependencies. You can even control which dependencies should be
included via
documentation
option. A self contained directory can be useful when you need or want
to work offline. In the future, we could also add a flag which would allow
to build quickjump index which contains references to all the
dependencies not just local packages.
If you want to link to documentation published on hackage
then you can use:
cabal haddock-project \ --with-haddock=$HADDOCK \ # point to haddock-2.26.1 --lib=$HADDOCK_LIB \ # point to haddock-api/resources --hackageBoth
--local
and --hackage
are meta-options. They
imply --gen-content
, --gen-index
,
--quickjump
and --hyperlinked-source
, the
--hackage
flag also implies a correct value for
--html-location. If you have custom needs you could avoid
using either --local
or --hackage
and provide the
exact flags you need.
I hope this will be also useful to you as it is for the excellent Haskell
team I am working with at
IOG.
We have some Haskell
positions open to work on various parts of
the cardano
project: