插件处理

插件管理

Flake8 除了那些定义新检查的插件之外,3.0增加了对其他插件的支持。它现在支持:

  • 额外的支票

  • 替代报表格式

为了促进这一点, Flake8 需要一种更成熟的插件管理方式。因此,我们开发了 PluginManager 它接受一个命名空间并将加载该命名空间的插件。A PluginManager 创建和管理许多 Plugin 实例。

A Plugin 延迟加载setuptools提供的底层入口点。入口点将通过调用 load_plugin() 或访问 plugin 属性。我们还使用这个抽象来检索插件希望注册和解析的选项。

唯一的公共方法 PluginManager 提供的是 map() . 这将接受一个函数(或其他可调用函数),并将每个插件作为第一个参数调用它。

我们在 PluginManagerPluginTypeManager . 预计 PluginTypeManager 将其子类化并指定 namespace ,例如,

class ExamplePluginType(flake8.plugin.manager.PluginTypeManager):
    namespace = 'example-plugins'

这通过 PluginManagermap 方法。

最后,我们创建了两类插件:

它们分别用于与每种类型的插件进行交互。

注解

我们处理插件的灵感来自于作者对插件的丰富经验 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)[源代码]

一致地查找和管理插件。

__init__(namespace, local_plugins=None)[源代码]

初始化管理器。

参数
  • namespace (str) -- 要管理的插件的命名空间,例如“flake8.extension”。

  • local_plugins (list) -- 配置中的插件(如“X=路径。到:Plugin“字符串)。

map(func, *args, **kwargs)[源代码]

呼叫 func 使用插件和 * ARGS和 * *夸克之后。

由此产生的价值 func 对于每个插件。

参数
  • func (collections.Callable) -- 函数调用每个插件。签名至少应为:。。代码块::python def myfunc(plugin):传递任何使用map指定的额外位置或关键字参数都将在插件之后传递给此函数。传递的插件是 Plugin .

  • args -- 要传递到的位置参数 func 在每个插件之后。

  • kwargs -- 要传递给的关键字参数 func 在每个插件之后。

versions()[源代码]

生成插件的版本。

返回

插件名称和版本的元组

返回类型

tuple

class flake8.plugins.manager.Plugin(name, entry_point, local=False)[源代码]

包装setuptools和其他逻辑的入口点。

__init__(name, entry_point, local=False)[源代码]

初始化我们的插件。

参数
  • name (str) -- 在setuptools中注册的入口点的名称。

  • entry_point (setuptools.EntryPoint) -- setuptools返回的入口点。

  • local (bool) -- 这是一个回购本地插件吗?

disable(optmanager)[源代码]

将插件名称添加到默认忽略列表。

enable(optmanager, options=None)[源代码]

从默认忽略列表中删除插件名称。

execute(*args, **kwargs)[源代码]

调用插件 * ARGS和 * * 克沃斯

group()[源代码]

找到并解析插件所在的组。

is_in_a_group()[源代码]

确定此插件是否在组中。

返回

如果插件在组中,则为True,否则为False。

返回类型

bool

load_plugin()[源代码]

检索此入口点的插件。

这将加载插件,将其存储在实例上,然后返回它。它不会在第一次之后重新加载它,它只返回缓存的插件。

返回

没有什么

property off_by_default

返回是否默认忽略插件。

property parameter_names

需要传递给插件的参数名列表。

property parameters

需要传递给插件的参数列表。

property plugin

加载并返回与入口点关联的插件。

此属性隐式加载插件,然后缓存它。

property plugin_name

返回插件的名称。

provide_options(optmanager, options, extra_args)[源代码]

将解析后的选项和额外参数传递给插件。

register_options(optmanager)[源代码]

在OptionManager上注册插件的命令行选项。

参数

optmanager (flake8.options.manager.OptionManager) -- 要在上注册选项的实例化OptionManager。

返回

没有什么

to_dictionary()[源代码]

将此插件转换为字典。

property version

返回插件的版本。

class flake8.plugins.manager.PluginTypeManager(local_plugins=None)[源代码]

大多数特定插件类型的父类。

get(name, default=None)[源代码]

检索引用的插件 name 或者返回默认值。

参数
  • name (str) -- 要检索的插件的名称。

  • default -- 要返回的默认值。

返回

按名称引用的插件对象(如果存在)。

返回类型

Plugin

load_plugins()[源代码]

此加载管理器管理的所有插件。

property names

基础管理器的代理属性。

property plugins

基础管理器的代理属性。

provide_options(optmanager, options, extra_args)[源代码]

为插件提供解析的选项和额外的参数。

register_options(optmanager)[源代码]

向OptionManager注册checker的所有选项。

register_plugin_versions(optmanager)[源代码]

向OptionManager注册插件及其版本。

class flake8.plugins.manager.Checkers(local_plugins=None)[源代码]

通过入口点或配置注册的所有跳棋程序。

property ast_plugins

期望AST树的插件列表。

checks_expecting(argument_name)[源代码]

检索需要具有指定名称的参数的检查。

查找所有需要特定参数的检查器插件。

property logical_line_plugins

期望逻辑行的插件列表。

property physical_line_plugins

期望物理线的插件列表。

register_options(optmanager)[源代码]

向OptionManager注册checker的所有选项。

这还可以确保不属于组的插件在选项管理器上被启用。

to_dictionary()[源代码]

返回AST和基于行的插件的字典。

class flake8.plugins.manager.ReportFormatters(local_plugins=None)[源代码]

通过entry points/config注册的所有报表格式化程序。