插件处理¶
插件管理¶
Flake8 除了那些定义新检查的插件之外,3.0增加了对其他插件的支持。它现在支持:
额外的支票
替代报表格式
为了促进这一点, Flake8 需要一种更成熟的插件管理方式。因此,我们开发了 PluginManager
它接受一个命名空间并将加载该命名空间的插件。A PluginManager
创建和管理许多 Plugin
实例。
A Plugin
延迟加载setuptools提供的底层入口点。入口点将通过调用 load_plugin()
或访问 plugin
属性。我们还使用这个抽象来检索插件希望注册和解析的选项。
唯一的公共方法 PluginManager
提供的是 map()
. 这将接受一个函数(或其他可调用函数),并将每个插件作为第一个参数调用它。
我们在 PluginManager
与 PluginTypeManager
. 预计 PluginTypeManager
将其子类化并指定 namespace
,例如,
class ExamplePluginType(flake8.plugin.manager.PluginTypeManager):
namespace = 'example-plugins'
这通过 PluginManager
的 map
方法。
最后,我们创建了两类插件:
它们分别用于与每种类型的插件进行交互。
注解
我们处理插件的灵感来自于作者对插件的丰富经验 stevedore
.
默认插件¶
最后, Flake8 一直为Pyflakes提供自己的插件填充程序。作为其中的一部分,我们把自己的垫片放在树上,现在把它储存在里面 flake8.plugins.pyflakes
.
Flake8 也为pep8注册插件。pep8中的每个签入都需要不同的参数,而且它不能像Pyflakes那样容易地填充在一起。因此,插件有一个“组”的概念。如果你看看我们的 setup.py
您将看到我们注册的pep8支票大致如下:
pep8.<check-name> = pep8:<check-name>
我们这样做是为了确认 <check-name>>
是一个团体的一部分。这也使我们能够在特殊情况下处理如何报告这些支票。而不是在 --version
输出,我们报告 pep8
并检查 pep8
a的模块 __version__
属性。我们只报告一次,以避免混淆用户。
API文档¶
-
class
flake8.plugins.manager.
PluginManager
(namespace, local_plugins=None)[源代码]¶ 一致地查找和管理插件。
-
class
flake8.plugins.manager.
Plugin
(name, entry_point, local=False)[源代码]¶ 包装setuptools和其他逻辑的入口点。
-
property
off_by_default
¶ 返回是否默认忽略插件。
-
property
parameter_names
¶ 需要传递给插件的参数名列表。
-
property
parameters
¶ 需要传递给插件的参数列表。
-
property
plugin
¶ 加载并返回与入口点关联的插件。
此属性隐式加载插件,然后缓存它。
-
property
plugin_name
¶ 返回插件的名称。
-
register_options
(optmanager)[源代码]¶ 在OptionManager上注册插件的命令行选项。
- 参数
optmanager (flake8.options.manager.OptionManager) -- 要在上注册选项的实例化OptionManager。
- 返回
没有什么
-
property
version
¶ 返回插件的版本。
-
property
-
class
flake8.plugins.manager.
PluginTypeManager
(local_plugins=None)[源代码]¶ 大多数特定插件类型的父类。
-
property
names
¶ 基础管理器的代理属性。
-
property
plugins
¶ 基础管理器的代理属性。
-
property