Visitors¶
Contains detailed technical documentation about how to write a visitor.
See also
Visitor is a well-known software engineering pattern: https://en.wikipedia.org/wiki/Visitor_pattern
Each visitor might work with one or many violations. Multiple visitors might one with the same violation.
Visitor relation with violations.¶
Visitors API¶
BaseNodeVisitor |
Allows to store violations while traversing node tree. |
BaseFilenameVisitor |
Abstract base class that allows to visit and check module file names. |
BaseTokenVisitor |
Allows to check tokenize sequences. |
The decision relies on what parameters do you need for the task. It is highly unlikely that you will need two parameters at the same time. See Tutorial for more information about choosing a correct base class.
Conventions¶
Then you will have to write logic for your visitor. We follow these conventions:
- Public visitor methods start with
visit_, than comes the name of a token or node to be visited - All other methods and attributes should be protected
- We try to separate as much logic from
visit_methods as possible, so they only route for callbacks that actually executes the checks - We place repeating logics into
logics/package to be able to reuse it
There are different example of visitors in this project already.
Reference¶
-
class
BaseVisitor(options, filename='stdin')[source]¶ Bases:
objectAbstract base class for different types of visitors.
-
options¶ contains the options objects passed and parsed by
flake8.
-
filename¶ filename passed by
flake8, each visitor has a file name.
-
violations¶ list of violations for the specific visitor.
-
classmethod
from_checker(checker)[source]¶ Constructs visitor instance from the checker.
Each unique visitor class should know how to construct itself from the checker instance.
Generally speaking, each visitor class needs to eject required parameters from checker and then run its constructor with these parameters.
Return type: BaseVisitor
-
-
class
BaseNodeVisitor(options, tree, **kwargs)[source]¶ Bases:
ast.NodeVisitor,wemake_python_styleguide.visitors.base.BaseVisitorAllows to store violations while traversing node tree.
This class should be used as a base class for all
astbased checkers. Methodvisit()is defined inNodeVisitorclass.-
tree¶ asttree to be checked.
-
classmethod
from_checker(checker)[source]¶ Constructs visitor instance from the checker.
Return type: BaseNodeVisitor
-
-
class
BaseFilenameVisitor(options, filename='stdin')[source]¶ Bases:
wemake_python_styleguide.visitors.base.BaseVisitorAbstract base class that allows to visit and check module file names.
Has
visit_filename()method that should be defined in subclasses.-
stem¶ the last part of the filename. Does not contain extension.
-
-
class
BaseTokenVisitor(options, file_tokens, **kwargs)[source]¶ Bases:
wemake_python_styleguide.visitors.base.BaseVisitorAllows to check
tokenizesequences.-
file_tokens¶ tokenize.TokenInfosequence to be checked.
-
classmethod
from_checker(checker)[source]¶ Constructs
tokenizebased visitor instance from the checker.Return type: BaseTokenVisitor
-
visit(token)[source]¶ Runs custom defined handlers in a visitor for each specific token type.
Uses
.exact_typeproperty to fetch the token name. So, you have to be extra careful with tokens like->and other operators, since they might resolve in justOPname.Does nothing if handler for any token type is not defined.
Inspired by
NodeVisitorclass.Return type: None
-