|
|
===================== |
|
|
Docstring Semantics |
|
|
===================== |
|
|
:Author: David Goodger |
|
|
:Contact: docutils-develop@lists.sourceforge.net |
|
|
:Revision: $Revision: 7302 $ |
|
|
:Date: $Date: 2012-01-03 20:23:53 +0100 (Di, 03 Jan 2012) $ |
|
|
:Copyright: This document has been placed in the public domain. |
|
|
|
|
|
These are notes for a possible future PEP providing the final piece of |
|
|
the Python docstring puzzle: docstring semantics or documentation |
|
|
methodology. `PEP 257`_, Docstring Conventions, sketches out some |
|
|
guidelines, but does not get into methodology details. |
|
|
|
|
|
I haven't explored documentation methodology more because, in my |
|
|
opinion, it is a completely separate issue from syntax, and it's even |
|
|
more controversial than syntax. Nobody wants to be told how to lay |
|
|
out their documentation, a la JavaDoc_. I think the JavaDoc way is |
|
|
butt-ugly, but it *is* an established standard for the Java world. |
|
|
Any standard documentation methodology has to be formal enough to be |
|
|
useful but remain light enough to be usable. If the methodology is |
|
|
too strict, too heavy, or too ugly, many/most will not want to use it. |
|
|
|
|
|
I think a standard methodology could benefit the Python community, but |
|
|
it would be a hard sell. A PEP would be the place to start. For most |
|
|
human-readable documentation needs, the free-form text approach is |
|
|
adequate. We'd only need a formal methodology if we want to extract |
|
|
the parameters into a data dictionary, index, or summary of some kind. |
|
|
|
|
|
|
|
|
PythonDoc |
|
|
========= |
|
|
|
|
|
(Not to be confused with Daniel Larsson's pythondoc_ project.) |
|
|
|
|
|
A Python version of the JavaDoc_ semantics (not syntax). A set of |
|
|
conventions which are understood by the Docutils. What JavaDoc has |
|
|
done is to establish a syntax that enables a certain documentation |
|
|
methodology, or standard *semantics*. JavaDoc is not just syntax; it |
|
|
prescribes a methodology. |
|
|
|
|
|
- Use field lists or definition lists for "tagged blocks". By this I |
|
|
mean that field lists can be used similarly to JavaDoc's ``@tag`` |
|
|
syntax. That's actually one of the motivators behind field lists. |
|
|
For example, we could have:: |
|
|
|
|
|
""" |
|
|
:Parameters: |
|
|
- `lines`: a list of one-line strings without newlines. |
|
|
- `until_blank`: Stop collecting at the first blank line if |
|
|
true (1). |
|
|
- `strip_indent`: Strip common leading indent if true (1, |
|
|
default). |
|
|
|
|
|
:Return: |
|
|
- a list of indented lines with mininum indent removed; |
|
|
- the amount of the indent; |
|
|
- whether or not the block finished with a blank line or at |
|
|
the end of `lines`. |
|
|
""" |
|
|
|
|
|
This is taken straight out of docutils/statemachine.py, in which I |
|
|
experimented with a simple documentation methodology. Another |
|
|
variation I've thought of exploits the Grouch_-compatible |
|
|
"classifier" element of definition lists. For example:: |
|
|
|
|
|
:Parameters: |
|
|
`lines` : [string] |
|
|
List of one-line strings without newlines. |
|
|
`until_blank` : boolean |
|
|
Stop collecting at the first blank line if true (1). |
|
|
`strip_indent` : boolean |
|
|
Strip common leading indent if true (1, default). |
|
|
|
|
|
- Field lists could even be used in a one-to-one correspondence with |
|
|
JavaDoc ``@tags``, although I doubt if I'd recommend it. Several |
|
|
ports of JavaDoc's ``@tag`` methodology exist in Python, most |
|
|
recently Ed Loper's "epydoc_". |
|
|
|
|
|
|
|
|
Other Ideas |
|
|
=========== |
|
|
|
|
|
- Can we extract comments from parsed modules? Could be handy for |
|
|
documenting function/method parameters:: |
|
|
|
|
|
def method(self, |
|
|
source, # path of input file |
|
|
dest # path of output file |
|
|
): |
|
|
|
|
|
This would save having to repeat parameter names in the docstring. |
|
|
|
|
|
Idea from Mark Hammond's 1998-06-23 Doc-SIG post, "Re: [Doc-SIG] |
|
|
Documentation tool": |
|
|
|
|
|
it would be quite hard to add a new param to this method without |
|
|
realising you should document it |
|
|
|
|
|
- Frederic Giacometti's `iPhrase Python documentation conventions`_ is |
|
|
an attachment to his Doc-SIG post of 2001-05-30. |
|
|
|
|
|
|
|
|
.. _PEP 257: http://www.python.org/peps/pep-0257.html |
|
|
.. _JavaDoc: http://java.sun.com/j2se/javadoc/ |
|
|
.. _pythondoc: http://starship.python.net/crew/danilo/pythondoc/ |
|
|
.. _Grouch: http://www.mems-exchange.org/software/grouch/ |
|
|
.. _epydoc: http://epydoc.sf.net/ |
|
|
.. _iPhrase Python documentation conventions: |
|
|
http://mail.python.org/pipermail/doc-sig/2001-May/001840.html |
|
|
|
|
|
|
|
|
.. |
|
|
Local Variables: |
|
|
mode: indented-text |
|
|
indent-tabs-mode: nil |
|
|
sentence-end-double-space: t |
|
|
fill-column: 70 |
|
|
End:
|
|
|
|