向Flake8注册插件¶
注册任何类型的插件 Flake8 ,您需要:
一种安装插件的方法(不管它是单独打包的还是作为其他插件的一部分)。在本节中,我们将使用
setup.py
为一个示例插件编写的。一个插件的名字(理想情况下)是唯一的。
setuptools的最新版本(比0.7.0更新,但最好尽可能更新)。
Flake8 依赖于名为 Entry Points . 这些允许任何包注册插件 Flake8 通过那个包裹 setup.py
文件。
假设我们已经编写了插件,它位于一个名为 flake8_example
. 我们可能会有 setup.py
看起来像:
import setuptools
requires = [
"flake8 > 3.0.0",
]
flake8_entry_point = # ...
setuptools.setup(
name="flake8_example",
license="MIT",
version="0.1.0",
description="our extension to flake8",
author="Me",
author_email="example@example.com",
url="https://gitlab.com/me/flake8_example",
packages=[
"flake8_example",
],
install_requires=requires,
entry_points={
flake8_entry_point: [
'X = flake8_example:ExamplePlugin',
],
},
classifiers=[
"Framework :: Flake8",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 3",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Software Development :: Quality Assurance",
],
)
请特别注意以下几行:
flake8_entry_point = # ...
setuptools.setup(
# snip ...
entry_points={
flake8_entry_point: [
'X = flake8_example:ExamplePlugin',
],
},
# snip ...
)
我们告诉setuptools注册我们的入口点 X
flake8应该查找的特定入口点分组内部。
Flake8 目前来看两组:
flake8.extension
flake8.report
如果你的插件是一个向 Flake8 , _您_将_使用_ flake8.extension
. 如果您的插件执行额外的报表处理(格式化、筛选等),它将使用 flake8.report
.
如果我们的 ExamplePlugin
如果是添加检查的内容,我们的代码将如下所示:
setuptools.setup(
# snip ...
entry_points={
'flake8.extension': [
'X = flake8_example:ExamplePlugin',
],
},
# snip ...
)
这个 X
在检查插件时,定义它要报告的错误代码。如果插件只报告错误代码 X101
你的切入点:
X101 = flake8_example:ExamplePlugin
如果你的插件报告了几个错误代码 X10
,那么它看起来像:
X10 = flake8_example:ExamplePlugin
如果所有插件的错误代码都以 X1
然后看起来像:
X1 = flake8_example:ExamplePlugin
最后,如果所有插件的错误代码都以 X
那么它看起来就像原来的例子。
Flake8 要求每个入口点在用户环境中安装的所有插件中都是唯一的。选择一个已经被使用的入口点会导致插件在没有警告的情况下被停用!
Please Note: Your entry point does not need to be exactly 4 characters
as of Flake8 3.0. Consider using an entry point with 3 letters followed
by 3 numbers (i.e. ABC123
).