Violations

Contains detailed technical information about violation internals.

Violations API

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

ASTViolation

Violation for ast based style visitors.

MaybeASTViolation

Violation for ast and modules visitors.

TokenizeViolation

Violation for tokenize based visitors.

SimpleViolation

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.

Conventions

  • 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:

@final
class SomeViolation(ASTViolation):
    deprecated = True

Reference

ErrorNode

General type for all possible nodes where error happens.

alias of AST | TokenInfo | None

ErrorCallback

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.

error_template

message that will be shown to user after formatting.

code

unique violation number. Used to identify the violation.

previous_codes

just a documentation thing to track changes in time.

deprecated

indicates that this violation will be removed soon.

postfix_template

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}'
message()[source]

Returns error’s formatted message with code and reason.

Conditionally formats the error_template if it is required.

Return type:

str

node_items()[source]

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.