插件处理¶
插件管理¶
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