The package provides base classes and utils for flake8 plugin writing
Project description
flake8-plugin-utils
The package provides base classes and utils for flake8 plugin writing.
Installation
pip install flake8-plugin-utils
Example
Write simple plugin
from flake8_plugin_utils import Error, Visitor, Plugin
class MyError(Error):
code = 'X100'
message = 'my error'
class MyVisitor(Visitor):
def visit_ClassDef(self, node):
self.error_from_node(MyError, node)
class MyPlugin(Plugin):
name = 'MyPlugin'
version = '0.1.0'
visitors = [MyVisitor]
and test it with pytest
from flake8_plugin_utils import assert_error, assert_not_error
def test_code_with_error():
assert_error(MyVisitor, 'class Y: pass', MyError)
def test_code_without_error():
assert_not_error(MyVisitor, 'x = 1')
Configuration
To add configuration to a plugin, do the following:
- Implement classmethod
add_options
in your plugin class, as per the flake8 docs. - Override classmethod
parse_options_to_config
in your plugin class to return any object holding the options you need. - If you need a custom
__init__
for your visitor, make sure it accepts a keyword argument namedconfig
and pass it tosuper().__init__
- Use
self.config
in visitor code.
Example:
from flake8_plugin_utils import Error, Visitor, Plugin, assert_error
class MyError(Error):
code = 'X100'
message = 'my error with {thing}'
class MyConfig:
def __init__(self, config_option):
self.config_option = config_option
class MyVisitorWithConfig(Visitor):
def visit_ClassDef(self, node):
self.error_from_node(
MyError, node, thing=f'{node.name} {self.config.config_option}'
)
class MyPluginWithConfig(Plugin):
name = 'MyPluginWithConfig'
version = '0.0.1'
visitors = [MyVisitorWithConfig]
@classmethod
def add_options(cls, options_manager):
options_manager.add_option('--config_option', ...)
@classmethod
def parse_options_to_config(cls, option_manager, options, args):
return MyConfig(config_option=options.config_option)
def test_code_with_error():
assert_error(
MyVisitorWithConfig,
'class Y: pass',
MyError,
config=MyConfig(config_option='123'),
thing='Y 123',
)
Formatting
Your Error
s can take formatting arguments in their message
:
from flake8_plugin_utils import Error, Visitor, assert_error
class MyFormattedError(Error):
code = 'X101'
message = 'my error with {thing}'
class MyFormattedVisitor(Visitor):
def visit_ClassDef(self, node):
self.error_from_node(MyFormattedError, node, thing=node.name)
def test_code_with_error():
assert_error(
MyFormattedVisitor,
'class Y: pass',
MyFormattedError,
thing='Y',
)
Usage with typing/mypy
The Plugin
and Visitor
classes are generic with the config class as type
parameter. If your plugin does not have any config, inherit it from
Plugin[None]
and the visitors from Visitor[None]
. Otherwise, use the
config class as the type parameter (e.g. Plugin[MyConfig]
and
Visitor[MyConfig]
in the above example).
License
MIT
Change Log
Unreleased
- ...
1.2.0 - 2020-03-06
- add
config
argument toassert_error
andassert_not_error
1.1.1 - 2020-03-02
- ignore encoding errors when reading strings for noqa validation
1.1.0 - 2020-03-01
- add ability for plugins to parse and use configuration
NB: this change breaks type-checking if you use typing/mypy. Change your
code to inherit from
Plugin[None]
andVisitor[None]
to fix.
1.0.0 - 2019-05-23
- add message formatting to Error
0.2.1 - 2019-04-01
- don`t strip before src dedent in _error_from_src
- add is_none, is_true, is_false util functions
0.2.0 - 2019.02.21
- add assert methods
0.1.0 - 2019.02.09
- initial
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file flake8-plugin-utils-1.2.0.tar.gz
.
File metadata
- Download URL: flake8-plugin-utils-1.2.0.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.5 CPython/3.6.7 Linux/4.15.0-1028-gcp
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0ec78b72e48b2bdaf0037e97105f0770a2b59b0e7b2519aaec35993f3538073f |
|
MD5 | b3c4d3671bad479a5a6377878c3811eb |
|
BLAKE2b-256 | 3c94bc9b4b399d7607f8be6ae67e9575645280169adfe37c87186d6274bab08f |
Provenance
File details
Details for the file flake8_plugin_utils-1.2.0-py3-none-any.whl
.
File metadata
- Download URL: flake8_plugin_utils-1.2.0-py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.5 CPython/3.6.7 Linux/4.15.0-1028-gcp
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 94b04623082dd64e97b93177e53125d5d17657c9864a4d3a29ef31a9a6c39e15 |
|
MD5 | 81127c29402e31fb5a30ba9d7cbc0860 |
|
BLAKE2b-256 | 6a7eaca84258eb1ceb33235d3753ee50cf9f4a46c0078016e60103bb63faaa10 |