kernel-documentation.rst 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. ==========================
  2. Linux Kernel Documentation
  3. ==========================
  4. Introduction
  5. ============
  6. The Linux kernel uses `Sphinx`_ to generate pretty documentation from
  7. `reStructuredText`_ files under ``Documentation``. To build the documentation in
  8. HTML or PDF formats, use ``make htmldocs`` or ``make pdfdocs``. The generated
  9. documentation is placed in ``Documentation/output``.
  10. .. _Sphinx: http://www.sphinx-doc.org/
  11. .. _reStructuredText: http://docutils.sourceforge.net/rst.html
  12. The reStructuredText files may contain directives to include structured
  13. documentation comments, or kernel-doc comments, from source files. Usually these
  14. are used to describe the functions and types and design of the code. The
  15. kernel-doc comments have some special structure and formatting, but beyond that
  16. they are also treated as reStructuredText.
  17. There is also the deprecated DocBook toolchain to generate documentation from
  18. DocBook XML template files under ``Documentation/DocBook``. The DocBook files
  19. are to be converted to reStructuredText, and the toolchain is slated to be
  20. removed.
  21. Finally, there are thousands of plain text documentation files scattered around
  22. ``Documentation``. Some of these will likely be converted to reStructuredText
  23. over time, but the bulk of them will remain in plain text.
  24. Sphinx Build
  25. ============
  26. The usual way to generate the documentation is to run ``make htmldocs`` or
  27. ``make pdfdocs``. There are also other formats available, see the documentation
  28. section of ``make help``. The generated documentation is placed in
  29. format-specific subdirectories under ``Documentation/output``.
  30. To generate documentation, Sphinx (``sphinx-build``) must obviously be
  31. installed. For prettier HTML output, the Read the Docs Sphinx theme
  32. (``sphinx_rtd_theme``) is used if available. For PDF output, ``rst2pdf`` is also
  33. needed. All of these are widely available and packaged in distributions.
  34. To pass extra options to Sphinx, you can use the ``SPHINXOPTS`` make
  35. variable. For example, use ``make SPHINXOPTS=-v htmldocs`` to get more verbose
  36. output.
  37. To remove the generated documentation, run ``make cleandocs``.
  38. Writing Documentation
  39. =====================
  40. Adding new documentation can be as simple as:
  41. 1. Add a new ``.rst`` file somewhere under ``Documentation``.
  42. 2. Refer to it from the Sphinx main `TOC tree`_ in ``Documentation/index.rst``.
  43. .. _TOC tree: http://www.sphinx-doc.org/en/stable/markup/toctree.html
  44. This is usually good enough for simple documentation (like the one you're
  45. reading right now), but for larger documents it may be advisable to create a
  46. subdirectory (or use an existing one). For example, the graphics subsystem
  47. documentation is under ``Documentation/gpu``, split to several ``.rst`` files,
  48. and has a separate ``index.rst`` (with a ``toctree`` of its own) referenced from
  49. the main index.
  50. See the documentation for `Sphinx`_ and `reStructuredText`_ on what you can do
  51. with them. In particular, the Sphinx `reStructuredText Primer`_ is a good place
  52. to get started with reStructuredText. There are also some `Sphinx specific
  53. markup constructs`_.
  54. .. _reStructuredText Primer: http://www.sphinx-doc.org/en/stable/rest.html
  55. .. _Sphinx specific markup constructs: http://www.sphinx-doc.org/en/stable/markup/index.html
  56. Specific guidelines for the kernel documentation
  57. ------------------------------------------------
  58. Here are some specific guidelines for the kernel documentation:
  59. * Please don't go overboard with reStructuredText markup. Keep it simple.
  60. * Please stick to this order of heading adornments:
  61. 1. ``=`` with overline for document title::
  62. ==============
  63. Document title
  64. ==============
  65. 2. ``=`` for chapters::
  66. Chapters
  67. ========
  68. 3. ``-`` for sections::
  69. Section
  70. -------
  71. 4. ``~`` for subsections::
  72. Subsection
  73. ~~~~~~~~~~
  74. Although RST doesn't mandate a specific order ("Rather than imposing a fixed
  75. number and order of section title adornment styles, the order enforced will be
  76. the order as encountered."), having the higher levels the same overall makes
  77. it easier to follow the documents.
  78. the C domain
  79. ------------
  80. The `Sphinx C Domain`_ (name c) is suited for documentation of C API. E.g. a
  81. function prototype:
  82. .. code-block:: rst
  83. .. c:function:: int ioctl( int fd, int request )
  84. The C domain of the kernel-doc has some additional features. E.g. you can
  85. *rename* the reference name of a function with a common name like ``open`` or
  86. ``ioctl``:
  87. .. code-block:: rst
  88. .. c:function:: int ioctl( int fd, int request )
  89. :name: VIDIOC_LOG_STATUS
  90. The func-name (e.g. ioctl) remains in the output but the ref-name changed from
  91. ``ioctl`` to ``VIDIOC_LOG_STATUS``. The index entry for this function is also
  92. changed to ``VIDIOC_LOG_STATUS`` and the function can now referenced by:
  93. .. code-block:: rst
  94. :c:func:`VIDIOC_LOG_STATUS`
  95. list tables
  96. -----------
  97. We recommend the use of *list table* formats. The *list table* formats are
  98. double-stage lists. Compared to the ASCII-art they might not be as
  99. comfortable for
  100. readers of the text files. Their advantage is that they are easy to
  101. create or modify and that the diff of a modification is much more meaningful,
  102. because it is limited to the modified content.
  103. The ``flat-table`` is a double-stage list similar to the ``list-table`` with
  104. some additional features:
  105. * column-span: with the role ``cspan`` a cell can be extended through
  106. additional columns
  107. * row-span: with the role ``rspan`` a cell can be extended through
  108. additional rows
  109. * auto span rightmost cell of a table row over the missing cells on the right
  110. side of that table-row. With Option ``:fill-cells:`` this behavior can
  111. changed from *auto span* to *auto fill*, which automatically inserts (empty)
  112. cells instead of spanning the last cell.
  113. options:
  114. * ``:header-rows:`` [int] count of header rows
  115. * ``:stub-columns:`` [int] count of stub columns
  116. * ``:widths:`` [[int] [int] ... ] widths of columns
  117. * ``:fill-cells:`` instead of auto-spanning missing cells, insert missing cells
  118. roles:
  119. * ``:cspan:`` [int] additional columns (*morecols*)
  120. * ``:rspan:`` [int] additional rows (*morerows*)
  121. The example below shows how to use this markup. The first level of the staged
  122. list is the *table-row*. In the *table-row* there is only one markup allowed,
  123. the list of the cells in this *table-row*. Exceptions are *comments* ( ``..`` )
  124. and *targets* (e.g. a ref to ``:ref:`last row <last row>``` / :ref:`last row
  125. <last row>`).
  126. .. code-block:: rst
  127. .. flat-table:: table title
  128. :widths: 2 1 1 3
  129. * - head col 1
  130. - head col 2
  131. - head col 3
  132. - head col 4
  133. * - column 1
  134. - field 1.1
  135. - field 1.2 with autospan
  136. * - column 2
  137. - field 2.1
  138. - :rspan:`1` :cspan:`1` field 2.2 - 3.3
  139. * .. _`last row`:
  140. - column 3
  141. Rendered as:
  142. .. flat-table:: table title
  143. :widths: 2 1 1 3
  144. * - head col 1
  145. - head col 2
  146. - head col 3
  147. - head col 4
  148. * - column 1
  149. - field 1.1
  150. - field 1.2 with autospan
  151. * - column 2
  152. - field 2.1
  153. - :rspan:`1` :cspan:`1` field 2.2 - 3.3
  154. * .. _`last row`:
  155. - column 3
  156. Including kernel-doc comments
  157. =============================
  158. The Linux kernel source files may contain structured documentation comments, or
  159. kernel-doc comments to describe the functions and types and design of the
  160. code. The documentation comments may be included to any of the reStructuredText
  161. documents using a dedicated kernel-doc Sphinx directive extension.
  162. The kernel-doc directive is of the format::
  163. .. kernel-doc:: source
  164. :option:
  165. The *source* is the path to a source file, relative to the kernel source
  166. tree. The following directive options are supported:
  167. export: *[source-pattern ...]*
  168. Include documentation for all functions in *source* that have been exported
  169. using ``EXPORT_SYMBOL`` or ``EXPORT_SYMBOL_GPL`` either in *source* or in any
  170. of the files specified by *source-pattern*.
  171. The *source-pattern* is useful when the kernel-doc comments have been placed
  172. in header files, while ``EXPORT_SYMBOL`` and ``EXPORT_SYMBOL_GPL`` are next to
  173. the function definitions.
  174. Examples::
  175. .. kernel-doc:: lib/bitmap.c
  176. :export:
  177. .. kernel-doc:: include/net/mac80211.h
  178. :export: net/mac80211/*.c
  179. internal: *[source-pattern ...]*
  180. Include documentation for all functions and types in *source* that have
  181. **not** been exported using ``EXPORT_SYMBOL`` or ``EXPORT_SYMBOL_GPL`` either
  182. in *source* or in any of the files specified by *source-pattern*.
  183. Example::
  184. .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
  185. :internal:
  186. doc: *title*
  187. Include documentation for the ``DOC:`` paragraph identified by *title* in
  188. *source*. Spaces are allowed in *title*; do not quote the *title*. The *title*
  189. is only used as an identifier for the paragraph, and is not included in the
  190. output. Please make sure to have an appropriate heading in the enclosing
  191. reStructuredText document.
  192. Example::
  193. .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
  194. :doc: High Definition Audio over HDMI and Display Port
  195. functions: *function* *[...]*
  196. Include documentation for each *function* in *source*.
  197. Example::
  198. .. kernel-doc:: lib/bitmap.c
  199. :functions: bitmap_parselist bitmap_parselist_user
  200. Without options, the kernel-doc directive includes all documentation comments
  201. from the source file.
  202. The kernel-doc extension is included in the kernel source tree, at
  203. ``Documentation/sphinx/kernel-doc.py``. Internally, it uses the
  204. ``scripts/kernel-doc`` script to extract the documentation comments from the
  205. source.
  206. .. _kernel_doc:
  207. Writing kernel-doc comments
  208. ===========================
  209. In order to provide embedded, "C" friendly, easy to maintain, but consistent and
  210. extractable overview, function and type documentation, the Linux kernel has
  211. adopted a consistent style for documentation comments. The format for this
  212. documentation is called the kernel-doc format, described below. This style
  213. embeds the documentation within the source files, using a few simple conventions
  214. for adding documentation paragraphs and documenting functions and their
  215. parameters, structures and unions and their members, enumerations, and typedefs.
  216. .. note:: The kernel-doc format is deceptively similar to gtk-doc or Doxygen,
  217. yet distinctively different, for historical reasons. The kernel source
  218. contains tens of thousands of kernel-doc comments. Please stick to the style
  219. described here.
  220. The ``scripts/kernel-doc`` script is used by the Sphinx kernel-doc extension in
  221. the documentation build to extract this embedded documentation into the various
  222. HTML, PDF, and other format documents.
  223. In order to provide good documentation of kernel functions and data structures,
  224. please use the following conventions to format your kernel-doc comments in the
  225. Linux kernel source.
  226. How to format kernel-doc comments
  227. ---------------------------------
  228. The opening comment mark ``/**`` is reserved for kernel-doc comments. Only
  229. comments so marked will be considered by the ``kernel-doc`` tool. Use it only
  230. for comment blocks that contain kernel-doc formatted comments. The usual ``*/``
  231. should be used as the closing comment marker. The lines in between should be
  232. prefixed by `` * `` (space star space).
  233. The function and type kernel-doc comments should be placed just before the
  234. function or type being described. The overview kernel-doc comments may be freely
  235. placed at the top indentation level.
  236. Example kernel-doc function comment::
  237. /**
  238. * foobar() - Brief description of foobar.
  239. * @arg: Description of argument of foobar.
  240. *
  241. * Longer description of foobar.
  242. *
  243. * Return: Description of return value of foobar.
  244. */
  245. int foobar(int arg)
  246. The format is similar for documentation for structures, enums, paragraphs,
  247. etc. See the sections below for details.
  248. The kernel-doc structure is extracted from the comments, and proper `Sphinx C
  249. Domain`_ function and type descriptions with anchors are generated for them. The
  250. descriptions are filtered for special kernel-doc highlights and
  251. cross-references. See below for details.
  252. .. _Sphinx C Domain: http://www.sphinx-doc.org/en/stable/domains.html
  253. Highlights and cross-references
  254. -------------------------------
  255. The following special patterns are recognized in the kernel-doc comment
  256. descriptive text and converted to proper reStructuredText markup and `Sphinx C
  257. Domain`_ references.
  258. .. attention:: The below are **only** recognized within kernel-doc comments,
  259. **not** within normal reStructuredText documents.
  260. ``funcname()``
  261. Function reference.
  262. ``@parameter``
  263. Name of a function parameter. (No cross-referencing, just formatting.)
  264. ``%CONST``
  265. Name of a constant. (No cross-referencing, just formatting.)
  266. ``$ENVVAR``
  267. Name of an environment variable. (No cross-referencing, just formatting.)
  268. ``&struct name``
  269. Structure reference.
  270. ``&enum name``
  271. Enum reference.
  272. ``&typedef name``
  273. Typedef reference.
  274. ``&struct_name->member`` or ``&struct_name.member``
  275. Structure or union member reference. The cross-reference will be to the struct
  276. or union definition, not the member directly.
  277. ``&name``
  278. A generic type reference. Prefer using the full reference described above
  279. instead. This is mostly for legacy comments.
  280. Cross-referencing from reStructuredText
  281. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  282. To cross-reference the functions and types defined in the kernel-doc comments
  283. from reStructuredText documents, please use the `Sphinx C Domain`_
  284. references. For example::
  285. See function :c:func:`foo` and struct/union/enum/typedef :c:type:`bar`.
  286. While the type reference works with just the type name, without the
  287. struct/union/enum/typedef part in front, you may want to use::
  288. See :c:type:`struct foo <foo>`.
  289. See :c:type:`union bar <bar>`.
  290. See :c:type:`enum baz <baz>`.
  291. See :c:type:`typedef meh <meh>`.
  292. This will produce prettier links, and is in line with how kernel-doc does the
  293. cross-references.
  294. For further details, please refer to the `Sphinx C Domain`_ documentation.
  295. Function documentation
  296. ----------------------
  297. The general format of a function and function-like macro kernel-doc comment is::
  298. /**
  299. * function_name() - Brief description of function.
  300. * @arg1: Describe the first argument.
  301. * @arg2: Describe the second argument.
  302. * One can provide multiple line descriptions
  303. * for arguments.
  304. *
  305. * A longer description, with more discussion of the function function_name()
  306. * that might be useful to those using or modifying it. Begins with an
  307. * empty comment line, and may include additional embedded empty
  308. * comment lines.
  309. *
  310. * The longer description may have multiple paragraphs.
  311. *
  312. * Return: Describe the return value of foobar.
  313. *
  314. * The return value description can also have multiple paragraphs, and should
  315. * be placed at the end of the comment block.
  316. */
  317. The brief description following the function name may span multiple lines, and
  318. ends with an ``@argument:`` description, a blank comment line, or the end of the
  319. comment block.
  320. The kernel-doc function comments describe each parameter to the function, in
  321. order, with the ``@argument:`` descriptions. The ``@argument:`` descriptions
  322. must begin on the very next line following the opening brief function
  323. description line, with no intervening blank comment lines. The ``@argument:``
  324. descriptions may span multiple lines. The continuation lines may contain
  325. indentation. If a function parameter is ``...`` (varargs), it should be listed
  326. in kernel-doc notation as: ``@...:``.
  327. The return value, if any, should be described in a dedicated section at the end
  328. of the comment starting with "Return:".
  329. Structure, union, and enumeration documentation
  330. -----------------------------------------------
  331. The general format of a struct, union, and enum kernel-doc comment is::
  332. /**
  333. * struct struct_name - Brief description.
  334. * @member_name: Description of member member_name.
  335. *
  336. * Description of the structure.
  337. */
  338. Below, "struct" is used to mean structs, unions and enums, and "member" is used
  339. to mean struct and union members as well as enumerations in an enum.
  340. The brief description following the structure name may span multiple lines, and
  341. ends with a ``@member:`` description, a blank comment line, or the end of the
  342. comment block.
  343. The kernel-doc data structure comments describe each member of the structure, in
  344. order, with the ``@member:`` descriptions. The ``@member:`` descriptions must
  345. begin on the very next line following the opening brief function description
  346. line, with no intervening blank comment lines. The ``@member:`` descriptions may
  347. span multiple lines. The continuation lines may contain indentation.
  348. In-line member documentation comments
  349. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  350. The structure members may also be documented in-line within the definition::
  351. /**
  352. * struct foo - Brief description.
  353. * @foo: The Foo member.
  354. */
  355. struct foo {
  356. int foo;
  357. /**
  358. * @bar: The Bar member.
  359. */
  360. int bar;
  361. /**
  362. * @baz: The Baz member.
  363. *
  364. * Here, the member description may contain several paragraphs.
  365. */
  366. int baz;
  367. }
  368. Private members
  369. ~~~~~~~~~~~~~~~
  370. Inside a struct description, you can use the "private:" and "public:" comment
  371. tags. Structure fields that are inside a "private:" area are not listed in the
  372. generated output documentation. The "private:" and "public:" tags must begin
  373. immediately following a ``/*`` comment marker. They may optionally include
  374. comments between the ``:`` and the ending ``*/`` marker.
  375. Example::
  376. /**
  377. * struct my_struct - short description
  378. * @a: first member
  379. * @b: second member
  380. *
  381. * Longer description
  382. */
  383. struct my_struct {
  384. int a;
  385. int b;
  386. /* private: internal use only */
  387. int c;
  388. };
  389. Typedef documentation
  390. ---------------------
  391. The general format of a typedef kernel-doc comment is::
  392. /**
  393. * typedef type_name - Brief description.
  394. *
  395. * Description of the type.
  396. */
  397. Overview documentation comments
  398. -------------------------------
  399. To facilitate having source code and comments close together, you can include
  400. kernel-doc documentation blocks that are free-form comments instead of being
  401. kernel-doc for functions, structures, unions, enums, or typedefs. This could be
  402. used for something like a theory of operation for a driver or library code, for
  403. example.
  404. This is done by using a ``DOC:`` section keyword with a section title.
  405. The general format of an overview or high-level documentation comment is::
  406. /**
  407. * DOC: Theory of Operation
  408. *
  409. * The whizbang foobar is a dilly of a gizmo. It can do whatever you
  410. * want it to do, at any time. It reads your mind. Here's how it works.
  411. *
  412. * foo bar splat
  413. *
  414. * The only drawback to this gizmo is that is can sometimes damage
  415. * hardware, software, or its subject(s).
  416. */
  417. The title following ``DOC:`` acts as a heading within the source file, but also
  418. as an identifier for extracting the documentation comment. Thus, the title must
  419. be unique within the file.
  420. Recommendations
  421. ---------------
  422. We definitely need kernel-doc formatted documentation for functions that are
  423. exported to loadable modules using ``EXPORT_SYMBOL`` or ``EXPORT_SYMBOL_GPL``.
  424. We also look to provide kernel-doc formatted documentation for functions
  425. externally visible to other kernel files (not marked "static").
  426. We also recommend providing kernel-doc formatted documentation for private (file
  427. "static") routines, for consistency of kernel source code layout. But this is
  428. lower priority and at the discretion of the MAINTAINER of that kernel source
  429. file.
  430. Data structures visible in kernel include files should also be documented using
  431. kernel-doc formatted comments.
  432. DocBook XML [DEPRECATED]
  433. ========================
  434. .. attention::
  435. This section describes the deprecated DocBook XML toolchain. Please do not
  436. create new DocBook XML template files. Please consider converting existing
  437. DocBook XML templates files to Sphinx/reStructuredText.
  438. Converting DocBook to Sphinx
  439. ----------------------------
  440. Over time, we expect all of the documents under ``Documentation/DocBook`` to be
  441. converted to Sphinx and reStructuredText. For most DocBook XML documents, a good
  442. enough solution is to use the simple ``Documentation/sphinx/tmplcvt`` script,
  443. which uses ``pandoc`` under the hood. For example::
  444. $ cd Documentation/sphinx
  445. $ ./tmplcvt ../DocBook/in.tmpl ../out.rst
  446. Then edit the resulting rst files to fix any remaining issues, and add the
  447. document in the ``toctree`` in ``Documentation/index.rst``.
  448. Components of the kernel-doc system
  449. -----------------------------------
  450. Many places in the source tree have extractable documentation in the form of
  451. block comments above functions. The components of this system are:
  452. - ``scripts/kernel-doc``
  453. This is a perl script that hunts for the block comments and can mark them up
  454. directly into reStructuredText, DocBook, man, text, and HTML. (No, not
  455. texinfo.)
  456. - ``Documentation/DocBook/*.tmpl``
  457. These are XML template files, which are normal XML files with special
  458. place-holders for where the extracted documentation should go.
  459. - ``scripts/docproc.c``
  460. This is a program for converting XML template files into XML files. When a
  461. file is referenced it is searched for symbols exported (EXPORT_SYMBOL), to be
  462. able to distinguish between internal and external functions.
  463. It invokes kernel-doc, giving it the list of functions that are to be
  464. documented.
  465. Additionally it is used to scan the XML template files to locate all the files
  466. referenced herein. This is used to generate dependency information as used by
  467. make.
  468. - ``Makefile``
  469. The targets 'xmldocs', 'psdocs', 'pdfdocs', and 'htmldocs' are used to build
  470. DocBook XML files, PostScript files, PDF files, and html files in
  471. Documentation/DocBook. The older target 'sgmldocs' is equivalent to 'xmldocs'.
  472. - ``Documentation/DocBook/Makefile``
  473. This is where C files are associated with SGML templates.
  474. How to use kernel-doc comments in DocBook XML template files
  475. ------------------------------------------------------------
  476. DocBook XML template files (\*.tmpl) are like normal XML files, except that they
  477. can contain escape sequences where extracted documentation should be inserted.
  478. ``!E<filename>`` is replaced by the documentation, in ``<filename>``, for
  479. functions that are exported using ``EXPORT_SYMBOL``: the function list is
  480. collected from files listed in ``Documentation/DocBook/Makefile``.
  481. ``!I<filename>`` is replaced by the documentation for functions that are **not**
  482. exported using ``EXPORT_SYMBOL``.
  483. ``!D<filename>`` is used to name additional files to search for functions
  484. exported using ``EXPORT_SYMBOL``.
  485. ``!F<filename> <function [functions...]>`` is replaced by the documentation, in
  486. ``<filename>``, for the functions listed.
  487. ``!P<filename> <section title>`` is replaced by the contents of the ``DOC:``
  488. section titled ``<section title>`` from ``<filename>``. Spaces are allowed in
  489. ``<section title>``; do not quote the ``<section title>``.
  490. ``!C<filename>`` is replaced by nothing, but makes the tools check that all DOC:
  491. sections and documented functions, symbols, etc. are used. This makes sense to
  492. use when you use ``!F`` or ``!P`` only and want to verify that all documentation
  493. is included.