# Documenting plugins

You should do it. Nobody will use your plugins if you don’t. Or if they do use them, they will curse you whenever things go wrong.

One easy way to document your plugins is to use nose2’s Sphinx extension, which provides an `autoplugin` directive that will produce decent reference documentation from your plugin classes.

To use it, add `nose2.sphinxext` to the `extensions` list in the `conf.py` file in your docs directory.

Then add an `autoplugin` directive to a `*.rst` file, like this:

    .. autoplugin :: mypackage.plugins.PluginClass

This will produce output that includes the config vars your plugin loads in `__init__`, as well as any command line options your plugin registers. This is why you really should extract config vars and register command-line options in `__init__`.

The output will also include an `autoclass` section for your plugin class, so you can put more narrative documentation in the plugin’s docstring for users to read.

Of course you can, and should, write some words before the reference docs explaining what your plugin does and how to use it. You can put those words in the `*.rst` file itself, or in the docstring of the module where your plugin lives.