Add internal documentation around default formatters

This commit is contained in:
Ian Cordasco 2016-02-10 22:44:23 -06:00
parent f824cbae93
commit c20793b49c
3 changed files with 77 additions and 20 deletions

View file

@ -27,6 +27,7 @@ Developer Guide
.. toctree::
:maxdepth: 2
internal/formatters
internal/option_handling
internal/plugin_handling
internal/utils

View file

@ -0,0 +1,47 @@
=====================
Built-in Formatters
=====================
By default Flake8 has two formatters built-in, ``default`` and ``pylint``.
These correspond to two classes |DefaultFormatter| and |PylintFormatter|.
In Flake8 2.0, pep8 handled formatting of errors and also allowed users to
specify an arbitrary format string as a parameter to ``--format``. In order
to allow for this backwards compatibility, Flake8 3.0 made two choices:
#. To not limit a user's choices for ``--format`` to the format class names
#. To make the default formatter attempt to use the string provided by the
user if it cannot find a formatter with that name.
Default Formatter
=================
The |DefaultFormatter| continues to use the same default format string as
pep8: ``'%(path)s:%(row)d:%(col)d: %(code)s %(text)s'``.
In order to provide the default functionality it overrides two methods:
#. ``after_init``
#. ``format``
The former allows us to inspect the value provided to ``--format`` by the
user and alter our own format based on that value. The second simply uses
that format string to format the error.
.. autoclass:: flake8.formatters.default.Default
:members:
Pylint Formatter
================
The |PylintFormatter| simply defines the default Pylint format string from
pep8: ``'%(path)s:%(row)d: [%(code)s] %(text)s'``.
.. autoclass:: flake8.formatters.default.Pylint
:members:
.. |DefaultFormatter| replace:: :class:`~flake8.formatters.default.Default`
.. |PylintFormatter| replace:: :class:`~flake8.formatters.default.Pylint`

View file

@ -2,20 +2,22 @@
from flake8.formatting import base
class Default(base.BaseFormatter):
"""Default formatter for Flake8.
class SimpleFormatter(base.BaseFormatter):
"""Simple abstraction for Default and Pylint formatter commonality.
Sub-classes of this need to define an ``error_format`` attribute in order
to succeed. The ``format`` method relies on that attribute and expects the
``error_format`` string to use the old-style formatting strings with named
parameters:
* code
* text
* path
* row
* col
This also handles backwards compatibility for people specifying a custom
format string.
"""
error_format = '%(path)s:%(row)d:%(col)d: %(code)s %(text)s'
def after_init(self):
"""Check for a custom format string."""
if self.options.format.lower() != 'default':
self.error_format = self.options.format
def format(self, error):
"""Format and write error out.
@ -31,15 +33,22 @@ class Default(base.BaseFormatter):
}
class Pylint(Default):
class Default(SimpleFormatter):
"""Default formatter for Flake8.
This also handles backwards compatibility for people specifying a custom
format string.
"""
error_format = '%(path)s:%(row)d:%(col)d: %(code)s %(text)s'
def after_init(self):
"""Check for a custom format string."""
if self.options.format.lower() != 'default':
self.error_format = self.options.format
class Pylint(SimpleFormatter):
"""Pylint formatter for Flake8."""
error_format = '%(path)s:%(row)d: [%(code)s] %(text)s'
def after_init(self):
"""Do not check the value of --format.
In the default formatter, this makes sense for backwards
compatibility, but it does not make sense here.
"""
pass