Formatter

Custom formatter for flake8 violations.

Tries to be beatiful, compact, and informative. Improves the default formatter used by flake8.

Usage

To activate this formatter one will need to run:

flake8 --format=wemake your_module.py

Or set the configuration option inside setup.cfg file:

[flake8]
format = wemake

Option format = wemake is included into our default configuration.

https://raw.githubusercontent.com/wemake-services/wemake-python-styleguide/master/docs/_static/running.png

To switch back to the default flake8 formatter, you can use format = default option.

There are other formatters out there as well. They can be installed as plugins.

Showing source code

You can also (and we recommend to) enable --show-source option. It can be passed as a command line argument or set in setup.cfg:

[flake8]
show-shource = True

It will change how your reports are formatted, and will show the exact problem with your code:

» flake8 . --format=wemake --show-source

./wemake_python_styleguide/formatter.py

  E231  120:32   missing whitespace after ':'
  def show_source(self, error:Violation) -> str:
                            ^

It helps to visially identify the problems in your code and fix it faster. We include show-shource = True into our default configuration.

Showing statistic

You can also show the statitics about problems inside your code.

It will group all violations by type and tell how many of them do you have and where you have them:

» flake8 . --format=wemake --show-source --statistic

./wemake_python_styleguide/formatter.py

  E231  136:32   missing whitespace after ':'
  def show_source(self, error:Violation) -> str:
                            ^

./wemake_python_styleguide/types.py

  E231  52:47    missing whitespace after ','
  AnyFunctionDefAndLambda = Union[AnyFunctionDef,ast.Lambda]
                                               ^

E231: missing whitespace after ':'
  1     ./wemake_python_styleguide/formatter.py
  1     ./wemake_python_styleguide/types.py
Total: 2


All errors: 2

We do not include show-statistic in our default configuration. It should be only called when user needs to find how many violations there are and what files do contain them.

Formatter API

Our very own flake8 formatter for better error messages.

That’s how all flake8 formatters work:

graph LR F2[start] --> F3[after_init] F3 --> F4[start] F4 --> F5[beggining] F5 --> F6[handle] F6 --> F7[format] F6 --> F8[show_source] F6 --> F9[show_statistic] F7 --> F10[finished] F8 --> F10[finished] F9 --> F10[finished] F10 --> F11[stop]

flake8 formatting API calls order.

class WemakeFormatter(options)[source]

Bases: flake8.formatting.base.BaseFormatter

We need to format our style violations beatifully.

The default formatter does not allow us to do that. What things do we miss?

  1. Spacing, everything is just mixed up and glued together

  2. Colors and decoration, some information is easier to gather just with colors or underlined text

  3. Grouping, we need explicit grouping by filename

  4. Incomplete and non-informative statistics

after_init()[source]

Called after the original init is used to set extra fields.

handle(error)[source]

Processes each violation to print it and all related.

Return type

None

format(error)[source]

Called to format each individual violation.

Return type

str

show_source(error)[source]

Called when --show-source option is provided.

Return type

str

show_statistics(statistics)[source]

Called when --statistic option is passed.

Return type

None

stop()[source]

Runs once per app when the formatting ends.

Return type

None