为Flake8开发格式化插件

Flake8 允许在版本3.0.0中自定义格式化插件。让我们一起写一个插件:

from flake8.formatting import base


class Example(base.BaseFormatter):
    """Flake8's example formatter."""

    pass

我们一开始就注意到,我们从 Flake8BaseFormatter 班级。如果我们遵循 instructions to register a plugin 并尝试使用我们的示例格式化程序,例如。, flake8 --format=example 然后 Flake8 将失败,因为我们没有实现 format 方法。让我们下一步做。

class Example(base.BaseFormatter):
    """Flake8's example formatter."""

    def format(self, error):
        return 'Example formatter: {0!r}'.format(error)

说完我们就完了。显然,这不是一个非常有用的格式化程序,但是它应该突出使用Flake8创建格式化程序的简单性。如果我们想创建一个格式化程序来聚合结果并返回XML、JSON或子单元,我们也可以这样做。 Flake8 以两种方式与格式化程序交互:

  1. 它创建格式化程序并提供从配置文件和命令行解析的选项

  2. 它使用格式化程序实例并调用 handle 带着错误。

默认情况下 flake8.formatting.base.BaseFormatter.handle() 只需调用 format 方法然后 write . 您希望为格式化目的执行的任何额外处理都应该覆盖 handle 方法。

API文档

class flake8.formatting.base.BaseFormatter(options)[源代码]

类定义格式化程序接口。

options

从配置文件和命令行解析的选项。

filename

如果用户指定,则为存储运行结果的路径。

output_fd

初始化时 start() 被称为。这将是一个为写入而打开的文件对象。

newline

要添加到行尾的字符串。仅当指定了输出文件名时才使用此选项。

after_init()[源代码]

进一步初始化格式化程序。

beginning(filename)[源代码]

通知格式化程序我们正在开始处理文件。

参数

filename (str) -- Flake8开始报告结果的文件的名称。

finished(filename)[源代码]

通知格式化程序我们已完成对文件的处理。

参数

filename (str) -- Flake8已完成报告结果的文件的名称。

format(error)[源代码]

格式化Flake8报告的错误。

这种方法 must 由子类实现。

参数

error (flake8.style_guide.Violation) -- 这将是 Violation .

返回

格式化的错误字符串。

返回类型

str

handle(error)[源代码]

处理Flake8报告的错误。

默认为调用 format()show_source() 然后 write() . 若要扩展错误的处理方式,请重写此方法。

参数

error (flake8.style_guide.Violation) -- 这将是 Violation .

show_benchmarks(benchmarks)[源代码]

格式化并打印基准。

show_source(error)[源代码]

显示生成错误的物理行。

这还为报告为生成问题的行的特定部分添加了一个指示符。

参数

error (flake8.style_guide.Violation) -- 这将是 Violation .

返回

如果用户希望显示源,则返回格式化的错误字符串。如果用户不想显示源,则返回 None .

返回类型

str

show_statistics(statistics)[源代码]

格式化并打印统计数据。

start()[源代码]

准备格式化程序以接收输入。

默认为初始化 output_fd 如果 filename

stop()[源代码]

报告完成后进行清理。

write(line, source)[源代码]

将该行写入输出文件或stdout。

它处理决定是写入到文件还是打印到子类的标准输出。如果需要与默认值不同的行为,请重写此选项。

参数
  • line (str) -- 要打印或写入的格式化字符串。

  • source (str) -- 已格式化并与输出行关联的源代码。