Afonasev Evgeniy
1. Нет готовых на то, что вам нужно.
2. Мэйнтейнеры не принимают новые фичи, даже если вам кажется, что их можно добавить в имеющиеся плагины.
2. Нужно проверять какие-то внутренние договоренности или устоявшиеся в команде правила
1. Шаблоный код, который копируется из проекта в проект.
2. Нет нужных готовых утилит для тестирования, проверки noqa etc.
3. Организацию кода плагина (ошибки, парсеры, etc.) каждый раз переизобретают заново
from flake8_plugin_utils import Error
class BadVariableNameError(Error):
code = 'V100'
message = 'Bad variable name: {name}'
from flake8_plugin_utils import Visitor
BAD_NAMES = ['var']
class BadVariableNameChecker(Visitor):
def visit_Assign(self, node):
for target in node.targets:
if target.id not in BAD_NAMES:
continue
self.error_from_node(
BadVariableNameError,
node,
name=target.id
)
from flake8_plugin_utils import Plugin
class BadVariableNamePlugin(Plugin):
name = 'BadVariableNamePlugin'
version = '1.0'
visitors = [BadVariableNameChecker]
V10 = 'flake8_bad_variable_name:BadVariableNamePlugin'
setup(
...
entry_points={
'flake8.extension': [
'V10 = flake8_bad_variable_name:BadVariableNamePlugin',
],
},
...
)
[tool.poetry.plugins."flake8.extension"]
V10 = 'flake8_bad_variable_name:BadVariableNamePlugin'
from flake8_plugin_utils import assert_error, assert_not_error
@pytest.mark.parametrize(
'src',
[
'var = 1',
],
)
def test_code_with_error(src):
assert_error(BadVariableNameChecker, src, BadVariableNameError, name='var')
@pytest.mark.parametrize(
'src',
[
'good_name = 1',
],
)
def test_code_without_error(src):
assert_not_error(BadVariableNameChecker, src)
Afonasev Evgeniy
ea.afonasev@gmail.com
https://github.com/Afonasev