Contains detailed technical information about violation internals.

Violations API

classDiagram BaseViolation <|-- SimpleViolation BaseViolation <|-- TokenizeViolation BaseViolation <|-- _BaseASTViolation Enum <|-- ViolationPostfixes _BaseASTViolation <|-- ASTViolation _BaseASTViolation <|-- MaybeASTViolation


Violation for ast based style visitors.


Violation for ast and modules visitors.


Violation for tokenize based visitors.


Violation for cases where there's no associated nodes.

Violation cannot have more than one base class. See Tutorial for more information about choosing a correct base class.


  • Each violation class name should end with “Violation”

  • Each violation must have a long docstring with full description

  • Each violation must have “Reasoning” and “Solution” sections

  • Each violation must have “versionadded” policy

  • Each violation should have an example with correct and wrong usages

  • If violation error template should have a parameter it should be the last part of the text: : {0}

Deprecating a violation

When you want to mark some violation as deprecated, then assign deprecated boolean flag to it:

class SomeViolation(ASTViolation):
    deprecated = True



General type for all possible nodes where error happens.

alias of AST | TokenInfo | None


We use this type to define helper classes with callbacks to add violations.

alias of Callable[[BaseViolation], None]

class ViolationPostfixes(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: Enum

String values of postfixes used for violation baselines.

bigger_than = ' > {0}'
less_than = ' < {0}'
class BaseViolation(node, text=None, baseline=None)[source]

Bases: object

Abstract base class for all style violations.

It basically just defines how to create any error and how to format this error later on.

Each subclass must define error_template and code fields.


message that will be shown to user after formatting.


unique violation number. Used to identify the violation.


just a documentation thing to track changes in time.


indicates that this violation will be removed soon.


indicates message that we show at the very end.

error_template: ClassVar[str]
code: ClassVar[int]
previous_codes: ClassVar[Set[int]]
deprecated: ClassVar[bool] = False
full_code: ClassVar[str]
summary: ClassVar[str]
postfix_template: ClassVar[ViolationPostfixes] = ' > {0}'

Returns error’s formatted message with code and reason.

Conditionally formats the error_template if it is required.

Return type:



Returns tuple to match flake8 API format.

Return type:

Tuple[int, int, str]

class ASTViolation(node, text=None, baseline=None)[source]

Bases: _BaseASTViolation

Violation for ast based style visitors.

class MaybeASTViolation(node=None, text=None, baseline=None)[source]

Bases: _BaseASTViolation

Violation for ast and modules visitors.

Is used for violations that share the same rule for nodes and module names. Is wildly used for naming rules.

class TokenizeViolation(node, text=None, baseline=None)[source]

Bases: BaseViolation

Violation for tokenize based visitors.

class SimpleViolation(node=None, text=None, baseline=None)[source]

Bases: BaseViolation

Violation for cases where there’s no associated nodes.