如何运行检查

Flake8 2.x, Flake8 委托检查运行到pep8。在3.0中 Flake8 承担责任。这使得处理 --jobs 参数(使用 multiprocessing )并简化了并发出错时的回退。在最底层我们有一个 FileChecker . 实例 FileChecker 是为 each 要分析的文件 Flake8 . 每个实例都有一个在setuptools中注册的所有插件的副本 flake8.extension 入口点组。

这个 FileChecker 实例由的实例管理 Manager . 这个 Manager 使用实例句柄创建子进程 multiprocessing 如果出现操作系统级错误,则返回到串行运行检查。创建时 FileChecker 实例 Manager 负责确定特定文件是否已被排除。

正在处理文件

不幸的是,自从 Flake8 接管了pep8/pycodestyle运行的check,它还必须接管checker要使用的解析和处理文件。因为它不能重用pycodestyle的功能(因为它没有将处理与检查运行完全分离),所以该功能被隔离到 FileProcessor 班级。我们将几个helper函数移到 flake8.processor 模块(另请参见 Processor Utility Functions

API引用

class flake8.checker.FileChecker(filename, checks, options)[源代码]

管理文件的运行检查并聚合结果。

check_physical_eol(token, prev_physical)[源代码]

当且仅当它位于行尾时运行物理检查。

handle_newline(token_type)[源代码]

遇到换行符时处理逻辑。

process_tokens()[源代码]

处理令牌和触发器检查。

这会引起 flake8.exceptions.InvalidSyntax 例外情况。与其直接使用,不如使用 flake8.checker.FileChecker.run_checks() .

report(error_code, line_number, column, text)[源代码]

通过将错误存储在结果列表中来报告错误。

run_ast_checks()[源代码]

运行所有需要抽象语法树的检查。

run_check(plugin, **arguments)[源代码]

在单个插件中运行检查。

run_checks()[源代码]

对文件运行检查。

run_logical_checks()[源代码]

运行所有需要逻辑行的检查。

run_physical_checks(physical_line)[源代码]

运行给定物理线路的所有检查。

一次物理检查可能会返回多个错误。

class flake8.checker.Manager(style_guide, arguments, checker_plugins)[源代码]

管理每个插件和文件的并行性和检查实例。

该课程将负责以下内容:

  • 测定Flake8的平行度,例如:

    • 我们用什么 multiprocessing 或者是没有?

    • 我们是自动决定要使用的作业数量还是用户提供的?

  • 如果遇到与 multiprocessing

  • 组织每个检查器的结果,以便我们可以将输出分组在一起,并使输出具有确定性。

is_path_excluded(path)[源代码]

检查是否排除了路径。

参数

path (str) -- 检查排除模式的路径。

返回

如果存在排除模式和路径匹配,则为True,否则为False。

返回类型

bool

make_checkers(paths=None)[源代码]

为每个文件创建棋盘格。

report()[源代码]

报告在托管文件检查器中发现的所有错误。

这将迭代每个checker并报告按行号排序的错误。

返回

找到的总结果和报告的结果的元组。

返回类型

tuple(int, int)

run()[源代码]

运行所有的跳棋。

这将智能地决定是并行运行检查还是串行运行检查。

如果并行运行检查导致问题(例如。,https://gitlab.com/pycqa/flake8/issues/74)这也实现了回退到串行处理。

run_parallel()[源代码]

平行地运行方格。

run_serial()[源代码]

连续运行跳棋。

start(paths=None)[源代码]

开始检查文件。

参数

paths (list) -- 要检查的路径名。这是直接传递给 make_checkers() .

stop()[源代码]

停止检查文件。

class flake8.processor.FileProcessor(filename, options, lines=None)[源代码]

处理文件并保持状态。

它通过生成令牌、逻辑和物理行以及AST树来处理文件。这还提供了一种将文件的状态传递给需要该状态的检查的方法。插件可以请求此对象上的任何公共属性。已知的公共属性包括:

blank_before

前面的空行数

blank_lines

空行数

build_ast()[源代码]

从行列表构建一个抽象语法树。

build_logical_line()[源代码]

从当前令牌列表构建逻辑行。

build_logical_line_tokens()[源代码]

构建映射、注释和逻辑行列表。

checker_state

当前检查器状态

delete_first_token()[源代码]

删除令牌列表中的第一个令牌。

property file_tokens

返回文件的完整令牌集。

访问此属性 may 引发InvalidSyntax异常。

加薪

flake8.exceptions.InvalidSyntax

generate_tokens()[源代码]

将文件标记化并生成标记。

引发

flake8.exceptions.InvalidSyntax -- 如果A tokenize.TokenError 生成标记时引发。

hang_closing

为挂起用户提供关闭选项

indent_char

用于缩进的字符

indent_level

当前缩进水平

inside_multiline(line_number)[源代码]

上下文管理器来切换多行属性。

keyword_arguments_for(parameters, arguments=None)[源代码]

为参数列表生成关键字参数。

line_number

文件中的行号

logical_line

当前逻辑线

max_doc_length

用户配置的最大docstring/注释行长度

max_line_length

用户配置的最大线路长度

multiline

当前物理行是否为多行

next_line()[源代码]

从列表中获取下一行。

next_logical_line()[源代码]

记录上一个逻辑行。

这也重置令牌列表和BLANKYSH行计数。

noqa = False

总是 False ,包括为了兼容性

noqa_line_for(line_number)[源代码]

检索将用于确定不合格品的行。

previous_indent_level

上一级缩进

previous_logical

上一逻辑行

previous_unindented_logical_line

上一个未插入的(即顶层)逻辑行

read_lines()[源代码]

读取此文件检查器的行。

read_lines_from_filename()[源代码]

读一个文件的行。

read_lines_from_stdin()[源代码]

读标准中的行。

reset_blank_before()[源代码]

将属性前的BLANKIG重置为零。

should_ignore_file()[源代码]

检查是否 flake8: noqa 在要忽略的文件中。

返回

如果行匹配,则为True defaults.NOQA_FILE ,否则为False

返回类型

bool

split_line(token)[源代码]

基于新行拆分物理行的行。

这也会自动增加调用者的行号。

statistics

统计字典

strip_utf_bom()[源代码]

从文件的行中剥离UTF bom。

tokens

当前令牌集

total_lines

文件中的总行数

update_checker_state_for(plugin)[源代码]

更新插件的checkeru state属性。

update_state(mapping)[源代码]

根据逻辑行映射更新缩进级别。

verbose

8级冗长

visited_new_blank_line()[源代码]

注意,我们访问了一个新的空行。

效用函数

flake8.processor.count_parentheses(current_parentheses_count, token_text)[源代码]

计算圆括号的数目。

flake8.processor.expand_indent(line)[源代码]

返回缩进量。

选项卡扩展到8的下一个倍数。

>>> expand_indent('    ')
4
>>> expand_indent('\t')
8
>>> expand_indent('       \t')
8
>>> expand_indent('        \t')
16
flake8.processor.is_eol_token(token)[源代码]

检查令牌是否为行尾令牌。

flake8.processor.is_multiline_string(token)[源代码]

检查这是否是多行字符串。

flake8.processor.log_token(log, token)[源代码]

将令牌记录到提供的日志对象。

flake8.processor.mutate_string(text)[源代码]

将内容替换为“xxx”,以防止语法匹配。

>>> mutate_string('"abc"')
'"xxx"'
>>> mutate_string("'''abc'''")
"'''xxx'''"
>>> mutate_string("r'abc'")
"r'xxx'"
flake8.processor.token_is_newline(token)[源代码]

检查令牌类型是否为换行令牌类型。