users_guide: Convert mkUserGuidePart generation to a Sphinx extension
authorPatrick Dougherty <patrick.doc@ameritech.net>
Fri, 18 Aug 2017 13:20:07 +0000 (09:20 -0400)
committerBen Gamari <ben@smart-cactus.org>
Sat, 19 Aug 2017 03:28:16 +0000 (23:28 -0400)
commitcf8ab1ced6f15dad03dd7bcc454ef759cf4d3b3d
treeeeb48abdaa020f02a3787d6225f2138b5c82b0ed
parent6267d8c9e54663a23f0ac13556522a53580d0910
users_guide: Convert mkUserGuidePart generation to a Sphinx extension

This removes all dependencies the users guide had on `mkUserGuidePart`.
The generation of the flag reference table and the various pieces of the
man page is now entirely contained within the Spinx extension
`flags.py`. You can see the man page generation on the orphan page
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghc.html

The extension works by collecting all of the meta-data attached to the
`ghc-flag` directives and then formatting and displaying it at
`flag-print` directives. There is a single printing directive that can
be customized with two options, what format to display (table, list, or
block of flags) and an optional category to limit the output to
(verbosity, warnings, codegen, etc.).

New display formats can be added by creating a function
`generate_flag_xxx` (where `xxx` is a description of the format) which
takes a list of flags and a category and returns a new `xxx`. Then just
add a reference in the dispatch table `handlers`. That display can now
be run by passing `:type: xxx` to the `flag-print` directive.

`flags.py` contains two maps of settings that can be adjusted. The first
is a canonical list of flag categories, and the second sets default
categories for files.

The only functionality that Sphinx could not replace was the
`what_glasgow_exts_does.gen.rst` file. `mkUserGuidePart` actually just
reads the list of flags from `compiler/main/DynFlags.hs` which Sphinx
cannot do. As the flag is deprecated, I added the list as a static file
which can be updated manually.

Additionally, this patch updates every single documented flag with the
data from `mkUserGuidePart` to generate the reference table.

Fixes #11654 and, incidentally, #12155.

Reviewers: austin, bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #11654, #12155

Differential Revision: https://phabricator.haskell.org/D3839
24 files changed:
.gitignore
compiler/main/DynFlags.hs
docs/users_guide/conf.py
docs/users_guide/debug-info.rst
docs/users_guide/debugging.rst
docs/users_guide/editing-guide.rst
docs/users_guide/extending_ghc.rst
docs/users_guide/ffi-chap.rst
docs/users_guide/flags.py [new file with mode: 0644]
docs/users_guide/flags.rst
docs/users_guide/ghc.mk
docs/users_guide/ghc.rst
docs/users_guide/ghci.rst
docs/users_guide/glasgow_exts.rst
docs/users_guide/packages.rst
docs/users_guide/phases.rst
docs/users_guide/profiling.rst
docs/users_guide/safe_haskell.rst
docs/users_guide/separate_compilation.rst
docs/users_guide/using-concurrent.rst
docs/users_guide/using-optimisation.rst
docs/users_guide/using-warnings.rst
docs/users_guide/using.rst
docs/users_guide/what_glasgow_exts_does.rst [new file with mode: 0644]