diff options
Diffstat (limited to 'third_party/pep8/docs/developer.rst')
-rw-r--r-- | third_party/pep8/docs/developer.rst | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/third_party/pep8/docs/developer.rst b/third_party/pep8/docs/developer.rst new file mode 100644 index 00000000000..4725acd9e7c --- /dev/null +++ b/third_party/pep8/docs/developer.rst @@ -0,0 +1,96 @@ +.. currentmodule:: pep8 + +================= +Developer's notes +================= + + +Source code +~~~~~~~~~~~ + +The source code is currently `available on GitHub`_ under the terms and +conditions of the :ref:`Expat license <license>`. Fork away! + +* `Source code <https://github.com/jcrocholl/pep8>`_ and + `issue tracker <https://github.com/jcrocholl/pep8/issues>`_ on GitHub. +* `Continuous tests <http://travis-ci.org/jcrocholl/pep8>`_ against Python + 2.6 through 3.4 and PyPy, on `Travis-CI platform + <http://about.travis-ci.org/>`_. + +.. _available on GitHub: https://github.com/jcrocholl/pep8 + + +Contribute +~~~~~~~~~~ + +You can add checks to this program by writing plugins. Each plugin is +a simple function that is called for each line of source code, either +physical or logical. + +Physical line: + +* Raw line of text from the input file. + +Logical line: + +* Multi-line statements converted to a single line. +* Stripped left and right. +* Contents of strings replaced with ``"xxx"`` of same length. +* Comments removed. + +The check function requests physical or logical lines by the name of +the first argument:: + + def maximum_line_length(physical_line) + def extraneous_whitespace(logical_line) + def blank_lines(logical_line, blank_lines, indent_level, line_number) + +The last example above demonstrates how check plugins can request +additional information with extra arguments. All attributes of the +:class:`Checker` object are available. Some examples: + +* ``lines``: a list of the raw lines from the input file +* ``tokens``: the tokens that contribute to this logical line +* ``line_number``: line number in the input file +* ``total_lines``: number of lines in the input file +* ``blank_lines``: blank lines before this one +* ``indent_char``: indentation character in this file (``" "`` or ``"\t"``) +* ``indent_level``: indentation (with tabs expanded to multiples of 8) +* ``previous_indent_level``: indentation on previous line +* ``previous_logical``: previous logical line + +Check plugins can also maintain per-file state. If you need this, declare +a parameter named ``checker_state``. You will be passed a dict, which will be +the same one for all lines in the same file but a different one for different +files. Each check plugin gets its own dict, so you don't need to worry about +clobbering the state of other plugins. + +The docstring of each check function shall be the relevant part of +text from `PEP 8`_. It is printed if the user enables ``--show-pep8``. +Several docstrings contain examples directly from the `PEP 8`_ document. + +:: + + Okay: spam(ham[1], {eggs: 2}) + E201: spam( ham[1], {eggs: 2}) + +These examples are verified automatically when pep8.py is run with the +``--doctest`` option. You can add examples for your own check functions. +The format is simple: ``"Okay"`` or error/warning code followed by colon +and space, the rest of the line is example source code. If you put ``'r'`` +before the docstring, you can use ``\n`` for newline and ``\t`` for tab. + +Then be sure to pass the tests:: + + $ python pep8.py --testsuite testsuite + $ python pep8.py --doctest + $ python pep8.py --verbose pep8.py + +.. _PEP 8: http://www.python.org/dev/peps/pep-0008/ + + +Changes +~~~~~~~ + +.. include:: ../CHANGES.txt + :start-line: 3 |