开发商须知

源代码

源代码当前为 available on GitHub 根据 Expat license . 叉开!

方向

一些高层次的目标和方向应铭记在心,以便作出贡献:

  • pycodestyle is intended to be as fast as possible. Using the ast module defeats that purpose. The pep8-naming plugin exists for this sort of functionality.
  • 如果要提供扩展性/插件,请参见 flake8 - pycodestyle 不需要或不需要插件架构。
  • pycodestyle aims to have no external dependencies.

贡献

您可以通过编写插件向该程序添加检查。每个插件都是一个简单的函数,对每一行源代码(物理代码或逻辑代码)进行调用。

物理线:

  • 输入文件中的原始文本行。

逻辑线:

  • 多行语句转换为单行。
  • 从左到右剥离。
  • 字符串内容替换为 "xxx" 长度相同。
  • 注释已删除。

check函数按第一个参数的名称请求物理或逻辑行:

def maximum_line_length(physical_line)
def extraneous_whitespace(logical_line)
def blank_lines(logical_line, blank_lines, indent_level, line_number)

上面的最后一个例子演示了check插件如何通过额外的参数请求额外的信息。的所有属性 Checker 对象可用。一些例子:

  • lines: a list of the raw lines from the input file
  • tokens: the tokens that contribute to this logical line
  • line_number: line number in the input file
  • total_lines: number of lines in the input file
  • blank_lines: blank lines before this one
  • indent_char: indentation character in this file (" " or "\t")
  • indent_level: indentation (with tabs expanded to multiples of 8)
  • previous_indent_level: indentation on previous line
  • previous_logical: previous logical line

检查插件还可以保持每个文件的状态。如果需要,请声明一个名为 checker_state . 您将被传递一个dict,对于同一个文件中的所有行,该dict是相同的,但是对于不同的文件,该dict是不同的。每个检查插件都有自己的dict,所以您不必担心会破坏其他插件的状态。

每个检查功能的docstring应是来自 PEP 8 . 如果用户启用 --show-pep8 . 几个docstring直接包含来自 PEP 8 文件。

Okay: spam(ham[1], {eggs: 2})
E201: spam( ham[1], {eggs: 2})

pycodestyle.py 正在运行 --doctest 选择权。您可以为自己的检查功能添加示例。格式很简单: "Okay" 或者错误/警告代码后面跟冒号和空格,行的其余部分是示例源代码。如果你放 'r' 在docstring之前,您可以使用 \n 换行 \t 用于制表符。

然后确保通过测试:

$ python pycodestyle.py --testsuite testsuite
$ python pycodestyle.py --doctest
$ python pycodestyle.py --verbose pycodestyle.py

当对PycodeStyle作出贡献时,请遵守我们的 Code of Conduct .

要运行测试,核心开发团队和Travis CI使用毒性:

$ pip install -r dev-requirements.txt
$ tox

所有可用口译员的测试都应通过,总结如下:

congratulations :)

变化

2.5.0(2019年1月29日)

新支票:

  • E117:过缩进代码块
  • W505:仅当配置为--最大文档长度时,最大文档字符串长度

变化:

  • 拆下eol python 2.6和3.3的支架。PR 720。
  • 为过度缩进的代码块添加E117错误。
  • 允许w605被“noqa”静音,并固定w605报告的位置。
  • 允许用户在类和函数的一个线性定义周围省略空行
  • 包括函数返回注释( -> )因为只在python 3上需要周围的空白
  • 确认只有名字可以跟在后面 await . 以前我们允许数字和字符串。
  • 添加对python 3.7的支持
  • 修正了E252注释参数默认值的检测
  • 修正W504报告的位置

2.4.0(2018年4月10日)

新支票:

  • 添加W504警告,检查二进制运算符后是否没有中断。默认情况下,此检查被忽略。PR 502。
  • 为字符串文本中的无效转义序列添加W605警告。PR 676。
  • 为python 3.7中引入的“async”和“await”保留关键字添加w606警告。PR 684。
  • 添加E252错误,因为等号周围缺少带默认值的带注释的函数参数。PR 717。

变化:

  • 为了提高搜索效率,内部对分搜索取代了线性搜索。PR 648。
  • pycodestyle现在使用pypi-trove分类器来记录pypi上支持的python版本。PR 654。
  • “setup.cfg”“[wheel]”部分已重命名为“[bdist_wheel]”,因为前者是遗留的。PR 653。
  • pycodeStyle现在可以更有效地处理python 3.2+中非常长的行。修正643。PR 644。
  • 现在可以编写“pycodestyle.styleguide(verbose=true)”而不是“pycodestyle.styleguide(verbose=true,path=['-v'])”来实现冗长性。PR 663。
  • PycodeStyle的发行版现在包括许可证文本,以符合开源许可证的要求。PR 694。
  • “最大线长度”现在忽略shebang(“!”)线。PR 736。
  • 为允许的空行数添加配置选项。它是作为一个顶级字典实现的,很容易被覆盖。修正732。PR 733。

漏洞:

  • 防止将来的python中出现由无效转义序列导致的“deprecationwarning”和“syntaxerror”。PR 625。
  • 当docstring的第一行太长时,正确报告e501。解决第622题。PR 630。
  • 当变量以关键字开头时支持变量注释,例如python 3.6中的类变量类型注释。PR 640。
  • 为了让“python3-m cprofile”报告正确的度量,pycodestyle内部结构已经被更改。PR 647。
  • 修正E722描述中的拼写错误。PR 697。
  • 如果“gitconfig”启用“助记键前缀”,则“pycodestyle--diff”现在不会中断。PR 706。

2.3.1(2017-01-31)

漏洞:

  • 修正e302和e306检测中的回归;618,620

2.3.0(2017-01-30)

新支票:

  • 为裸机添加E722警告 except 条款
  • 异步函数定义的报告E704( async def

漏洞:

  • 为以“class”或“def”开头的变量修复另一个e305误报
  • 固定检测之间的多个空格 asyncdef
  • 修复变量注释的处理。停止在python 3.6上报告E701以获取变量注释。

2.2.0(2016-11-14)

公告:

  • 添加make target以获得适当的tarball文件权限;599

漏洞:

  • 修正了由400;593引起的E305回归

2.1.0(2016年11月4日)

公告:

  • 将对PEP8项目的所有引用更改为pycodestyle;530

变化:

  • 对于“异步定义”前的空白行,报告e302;556
  • 更新我们的测试和支持的python版本列表,包括2.6、2.7、3.2、3.3、3.4和3.5,以及夜间python构建和pypy。
  • 报告e742和e743,查找名称错误为“l”、“o”或“i”的函数和类。
  • 关于“全局”和“非本地”声明以及禁止的单字母变量的报告E741。
  • 不赞成使用`[pep8]`节名称而赞成使用`[pycodestyle]`;591
  • 报告E722,使用裸除外条款时;579

漏洞:

  • 使用flake8 2.6.2和pycodestyle时修复opt_类型断言错误;561
  • 在顶级def之后需要两行空白,class;536
  • 根据冒号的数目删除意外的二次计算。这将使pycodestyle在某些情况下更快;314

2.0.0(2016年5月31日)

公告:

  • 存储库已重命名为 pycodestyle; 发行466/481。
  • 增加了作为Pycqa成员的联合行为准则;483

变化:

  • 为python 3.5和pypy3添加了毒性测试支持
  • 添加了E275复选框,用于“发件人…”导入…`lines;489/491
  • 将w503添加到默认忽略列表忽略的代码列表中;498
  • 删除了对项目级`.pep8`配置文件的使用;364

漏洞:

  • 修复了将`~`运算符视为二进制的错误;383/384
  • 将二进制运算符标识为一元;484/485

1.7.0(2016-01-12)

公告:

变化:

  • 已恢复368中的修复,“在命令行上传递的选项仅被接受”功能。这在PEP8和flake8中有许多意想不到的结果,当我有更多的时间时需要重新处理。
  • 增加了对python 3.5的支持。(第420和459版)
  • 增加了对多行配置文件选项解析的支持。(第429题)
  • 改进了参数分析。(第420和456期)

漏洞:

  • 修正了python 3上的字节警告。(第459题)

1.6.2(2015年2月15日)

变化:

  • 增加了对二元运算符的断开检查。(发行197,拉动305)

漏洞:

  • 已还原process_options()中的config_文件参数。(第380题)

1.6.1(2015年2月8日)

变化:

  • 在引用之前分配变量。(第287题)

漏洞:

  • 由于未分配而引发异常 local_dir 变量。(第377题)

1.6.0(2015年2月6日)

新闻:

变化:

  • lambda分配报告E731。(第277题)
  • 报告E704中的一个衬里DEF而不是E701。不要在默认配置中报告此错误。(第277题)
  • 将代码E111、E112和E113替换为代码E114、E115和E116,以防注释缩进错误。(第274题)
  • 当块注释以多个开头时,报告E266而不是E265 # . (第270题)
  • 对于不在文件顶部的import语句,报告e402。(第264题)
  • 不要在周围强制使用空格 ** 操作员。(第292题)
  • 在规范化过程中从路径周围去除空白。(发行339/343)
  • 更新 --format 文档。(发布198/拉式请求310)
  • 添加 .tox/ 默认排除。(第335题)
  • 不要在默认配置中报告E121或E126。(发行256/316)
  • 在带批注的函数中,允许等号周围有空格。(第357题)
  • 如果在内联注释中,则允许尾随反斜杠。(第374题)
  • 如果 --config 只处理该配置。否则,合并用户和本地配置。(发行368/369)

错误修复:

  • 如果checker.build_tokens_line()返回none,则不要崩溃。(第306题)
  • 如果os.path.expanduser()引发importError,不要崩溃。(第297题)
  • 关键字参数“equal not always reported”周围缺少空格,E251。(第323题)
  • 固定假阳性E711/E712/E713。(发行330和336)
  • 如果换行符被转义,不要跳过物理检查。(第319题)
  • 冲洗sys.stdout以避免打印时出现竞争情况。有关详细信息,请参阅flake8 bug:https://gitlab.com/pycqa/flake8/issues/17。(第363题)

1.5.7(2014-05-29)

错误修复:

  • 跳过“断管”信号的回溯。(第275题)
  • 当选项进入时不退出 setup.cfgtox.ini 无法识别。
  • 检查最后一行,即使它没有以换行符结尾。(第286题)
  • 总是在python 2中以通用换行模式打开文件。(第288题)

1.5.6(2014年4月14日)

错误修复:

  • 检查最后一行,即使它没有行尾。(第273题)

1.5.5(2014年4月10日)

错误修复:

  • 使用e22检查和内联注释修复回归。(第271题)

1.5.4(2014年4月7日)

错误修复:

  • 在多行docstring之前用e303修正负偏移。(第269题)

1.5.3(2014年4月4日)

错误修复:

  • 当错误在物理行的最后一个字符上时,修复错误的偏移量计算。(第268题)

1.5.2(2014年4月4日)

变化:

  • 分发通用车轮文件。

错误修复:

  • 报告E303的正确行号和注释。(第60题)
  • 参数等于后不允许换行。(第252题)
  • 为多行字符串报告的固定行号。(第220题)
  • 用多行字符串修复假阳性E121/E126。(第265题)
  • 用python 2.5在注释中未检测到修复e501。
  • 用固定插入符号位置 --show-source 当行包含制表符时。

1.5.1(2014年3月27日)

错误修复:

  • 使用E125修复多行字符串上的崩溃。(第263题)

1.5(2014年3月26日)

变化:

  • 对于与下一逻辑行具有相同缩进的可视缩进行,报告E129而不是E125。(第126题)
  • 报告E265获取块注释前的空间。(第190题)
  • 操作员报告E713和E714 not inis not 建议。(第236题)
  • 如果无法换行,则允许多行字符串和注释中的长行。(第224题)。
  • (可选)禁用多行字符串内的物理行检查,使用 # noqa . (第242题)
  • 将E121的文本更改为报告“缩进下的续行用于挂起缩进”,而不是缩进不是4的倍数。
  • 如果悬挂缩进在同一连续块内不一致,则报告E131而不是E121/E126。当错误E121或E126出现在 ignore 名单。
  • 当连续行挂有额外的缩进时,即使缩进不是4的倍数,也要报告E126而不是E121。

错误修复:

  • 允许检查程序报告空文件的错误。(第240题)
  • 修复忽略过多检查的情况 --select 与flake8扩展中声明的代码一起使用。(第216题)
  • 用多个括号固定回归。(第214题)
  • 固定 StyleGuide 如果关键字参数 paths 指定。(第246题)
  • 修复假阳性E124以悬挂缩进。(第254题)
  • 用嵌入结肠修复假阳性E126。(第144题)
  • 使用制表符缩进时修复假阳性E126。(第204题)
  • 修正行为 exclude 在配置文件中,而当前目录不是项目目录。(第247题)
  • 逻辑检查可以返回 None 而不是空的迭代器。(第250题)
  • 如果只有第一个缩进以制表符开头,则不要报告多个E101。(第237题)
  • 修复罕见的假阳性W602。(第34题)

1.4.6(2013年7月2日)

变化:

  • 荣誉 # noqa 对于错误E711和E712。(第180题)
  • 当两个 tox.ini 和A setup.cfg 存在于项目目录中,合并其内容。这个 tox.ini 文件优先(与以前相同)。(第182题)
  • 优先考虑 --select 结束 --ignore . (第188题)
  • 排除文件时比较完整路径。(第186题)
  • 新选项 --hang-closing 切换到关闭括号缩进的可选样式,以便悬挂缩进。为缺少缩进的右括号添加错误E133。(第103题)
  • 接受两种样式的右括号缩进,以便悬挂缩进。不要在默认配置中报告错误E123。(第103题)

错误修复:

  • 当运行AST检查且文档包含空字节时,不要崩溃。(第184题)
  • 忽略E123时,正确报告其他E12错误。(第103题)
  • 当文件包含物料清单时,修复假阳性E261/E262。(第193题)
  • 修复E701、E702和E703,有时未检测到。(第196题)
  • 在某些情况下未检测到修复E122。(版本201和208)
  • 用多个支架固定假阳性E121。(第203题)

1.4.5(2013年3月6日)

  • 当没有指定路径时,不要尝试从stdin读取。该功能已在1.4.3中添加,但Windows不支持。使用 - 要从stdin读取的文件名参数。自1.3.4起支持此用法。(第170题)
  • 不要求 setuptools 在StupUp.Py中。它解决了一个问题 pip 和Python 3。(第172题)
  • 添加 __pycache__ 到忽略列表。
  • 更改E251的误导信息。(第171题)
  • 当源文件的第一行有编码cookie或注释时,不要报告错误的e302。(第174题)
  • 重新组织测试并为API和命令行用法和选项添加测试。(第161和162期)
  • 忽略在以下情况下未显式选择的所有检查: select 传递给 StyleGuide 建造师。

1.4.4(2013年2月24日)

  • 对于位、移位或模运算符周围的空白,报告e227或e228而不是e225。(第166题)
  • 更改E226的消息,以明确它是关于算术运算符的。
  • 用制表符修复连续行缩进的假阳性E128。
  • 用修正回归 --diff 选择权。(第169题)
  • 修复 TestReport 类以打印意外的警告和错误。

1.4.3(2013年2月22日)

  • 隐藏 --doctest--testsuite 安装时的选项。
  • 修复语法无效时与ast checkers的崩溃。(第160题)
  • 如果没有指定路径,则从标准输入读取。
  • 启动正常关机 Control+C .
  • 允许更改 checker_class 对于 StyleGuide .

1.4.2(2013年2月10日)

  • 支持第三方应用程序提供的AST检查程序。
  • 注册新的支票 register_check(func_or_cls, codes) .
  • 允许构造 StyleGuide 使用自定义分析器。
  • 接受不带括号的可视缩进 if 语句。(第151题)
  • 使用时修复未绑定的本地错误 # noqa 用连续的线条。(第158题)
  • 重新订购的行 StandardReport .
  • 检查E12续行时展开选项卡。(第155题)
  • 重构测试类 TestReport 具体的测试功能分为单独的测试模块。

1.4.1(2013-01-18)

  • 允许对注释使用sphinx.ext.autodoc语法。(第110题)
  • 对于尾随分号,报告E703而不是E702。(第117题)
  • 荣誉 # noqa 除了 # nopep8 . (第149题)
  • 揭露 OptionParser 工厂提供更好的扩展性。

1.4(2012年12月22日)

  • 对于常见运算符周围的可选空白区域,报告E226而不是E225( ***/+- )在默认配置中忽略这个新的错误代码,因为PEP8建议“使用您自己的判断”。(第96题)
  • A线 # nopep8 最后将不会在行长E501或连续行缩进E12*上发出错误。(第27题)
  • 修复源文件包含无效行尾时的断言错误 "\r\r\n" . (第119题)
  • 阅读 [pep8] 截面 tox.inisetup.cfg 如果存在。(第93版和第141版)
  • 添加基于sphinx的文档,并在https://pycodestyle.readthedocs.io/上发布。(第105题)

1.3.4(2012-12-18)

  • 用注释修复假阳性E124和E128。(第100题)
  • 修复使用bpython运行时stdin上的错误。(第101题)
  • 固定假阳性E401。(第104题)
  • 列表中嵌套字典的报告E231。(第142题)
  • 在行首捕获E271。(第133题)
  • 修复多行注释的假阳性E126。(第138题)
  • 当运算符前面有逗号时,修复假阳性E221。(第135题)
  • 固定 --diff 在一条线上失败了。(第137题)
  • 修复 --exclude 切换目录路径。(第111题)
  • 使用 - 从标准输入读取的文件名。(第128题)

1.3.3(2012年6月27日)

  • 使用续行检查程序修复回归。(第98题)

1.3.2(2012年6月26日)

  • 恢复以前的行为 --show-pep8 不要暗示 --first . (第89题)
  • 为IO错误添加E902。(第87题)
  • 修复E121的假阳性,并丢失E124。(第92题)
  • 在Windows上为配置文件设置合理的默认路径。(第95题)
  • 允许 verbose 在配置文件中。(第91题)
  • 显示强制 max-line-length 在错误消息中。(第86题)

1.3.1(2012年6月18日)

  • 解释需要哪些配置选项。接受并建议选项名称使用连字符而不是下划线。(第82题)
  • 当用作模块时,不要读取用户配置(除非 config_file=True 传递给 StyleGuide 构造函数)。
  • 修复E12系列的错误或丢失案例。
  • 修复E122丢失的案例。(第81题)

1.3(2012年6月15日)

警告

内部API向后不兼容。

  • 删除全局配置并围绕 StyleGuide 类;添加配置各种报告程序的能力。(发行35和66)
  • 从读取用户配置 ~/.config/pep8 和本地配置 ./.pep8 . (第22题)
  • 修正E502中嵌入多行字符串的反斜杠。(第68题)
  • 为python 3 iterable解包(pep 3132)修复e225。(第72题)
  • 在默认配置中启用E12系列的新检查程序。
  • 针对E712错误建议较少出错的备选方案。
  • 重写跳棋以更快地运行(e22、e251、e27)。
  • 修正了解析代码无效时的崩溃(右括号太多)。
  • 固定E127和E128以进行连续线缩进。(第74题)
  • 新选项 --format 自定义错误格式。(第23题)
  • 新选项 --diff 只检查修改后的代码。从stdin读取统一diff。例子: hg diff | pep8 --diff (第39题)
  • 正确报告失败计数,并将退出代码设置为1 --doctest--testsuite 失败。
  • 正确检测python 3中的编码。(第69题)
  • 放弃对python 2.3、2.4和3.0的支持。(第78题)

1.2(2012年6月1日)

  • 添加E121到E128作为连续行缩进。默认情况下禁用这些检查。如果要强制执行所有检查,请使用开关 --select=E,W . Sam Vilain的补丁。(第64题)
  • 添加E721进行直接类型比较。(第47题)
  • 添加e711和e712与单件进行比较。(第46题)
  • 修复函数注释的伪E225和E701。(第29题)
  • 为括号之间的显式行连接添加e502。
  • 使用打印源时修复e901 --show-source .
  • 报告每个检查器的所有错误,而不是只报告每行的第一次出现。
  • 期权 --show-pep8 暗示 --first .

1.1(2012年5月24日)

  • 为语法错误添加e901。(第63和30期)
  • 在关键字周围添加e271、e272、e273和e274作为外部空白。(第57题)
  • 添加 tox.ini 测试的配置文件。(第61题)
  • 添加 .travis.yml 用于持续集成的配置文件。(第62题)

1.0.1(2012年4月6日)

  • 修复不一致的版本号。

1.0(2012年4月4日)

  • 修正W602 raise 处理多字符名称。(第53题)

0.7.0(2012年3月26日)

  • 现在 --first 只打印每个错误的第一次出现。这个 --repeat 标志将变得过时,因为它是默认行为。(第6题)
  • 允许指定 --max-line-length . (第36题)
  • 使shebang更灵活。(第26题)
  • 将testsuite添加到包中。(第25题)
  • 修复Jython。(第49题)
  • 添加PYPI分类器。(第43题)
  • 修复 --exclude 选择权。(第48题)
  • 固定W602,接受 raise 有3个参数。(第34题)
  • 正确选择所有测试,如果 DEFAULT_IGNORE == '' .

0.6.1(2010年10月3日)

  • 修复不一致的版本号。(第21题)

0.6.0(2010年9月19日)

  • 为了用更少的测试文件检查更多的失败,测试套件进行了重新组织和增强。阅读 run_tests 有关语法的详细信息。
  • 固定E225:接受 print >>sys.stderr, "..." 语法。
  • 对于包含多字节编码字符的行,修复e501。(第7题)
  • 修复在某些情况下未检测到的E221、E222、E223、E224。(第16题)
  • 修正e211以拒绝 v = dic['a'] ['b'] . (第17题)
  • 如果发现任何错误或警告,则退出代码始终为1。(第10题)
  • --ignore checks are now really ignored, especially in conjunction with --count. (Issue #8)
  • 空格的空行产生W29而不是W29:有些开发人员希望忽略此警告并缩进空白行,以便在Python解释器中轻松地粘贴代码。
  • 修正E301:在缩进块之前不需要空行。(第14题)
  • 修正e203以接受numpy slice表示法 a[0, :] . (第13题)
  • 性能改进。
  • 修复了在python 3中解码和检查非utf8文件的问题。
  • 修正E225:拒绝 True+False 在python 3上运行时。
  • 当行以运算符开始时修复异常。
  • 关闭前允许新行 )}}] . (第5题)

0.5.0(2010-02-17)

  • 改变了 --count 切换到打印到sys.stderr,如果发现任何错误或警告,则将退出代码设置为1。
  • 从标准检查中删除E241和E242。如果要包括这些检查,请使用开关 --select=E,W . (第4题)
  • 在第一类方法或嵌套函数定义之前,空行不是必需的,即使有docstring。(第1题)
  • 添加开关 --version .
  • 使用python 3修复解码错误。(第13题) [1]
  • 添加 --select 选项是镜像 --ignore .
  • 在内联注释之前添加检查e261和e262中的空格。
  • 新的检查W604警告不推荐使用backticks。
  • 新检查W603警告不推荐使用的运算符 <> .
  • 由于重写了E225,性能得到了提高。
  • E225现在接受:
    • 一元运算符或类似运算符后没有空格。(第9题) [1]
    • 具有参数解包或关键字默认值的lambda函数。
  • 为模块级逻辑块保留“2空行”。(E303)
  • 允许多行注释。(E302,第10版) [1]

0.4.2(2009年10月22日)

  • 类和类方法上的修饰符现在可以了。

0.4(2009年10月20日)

  • 支持从2.3到3.1的所有版本的python。
  • 新的和大大扩展的自我测试。
  • 补充 --count 用于打印错误和警告总数的选项。
  • 对注释和空白行处理的进一步改进。(第1题) [1] 其他变化。)
  • 传递目录时检查目录中的所有py文件(问题2 [1] )这还可以防止在使用非 *.py 文件夹。
  • E231应允许逗号后接 ) . (第3题) [1]
  • 关键字参数或默认参数值的等号周围不再需要空格。
[1](1, 2, 3, 4, 5, 6) 这些问题涉及 `previous issue tracker`_ _.

0.3.1(2009年9月14日)

  • 修改注释:检查项目之间的空行时不计算注释。
  • 添加了用于pypi上传和易于安装的setup.py。

0.2(2007年10月16日)

  • 大量的修复和改进。

0.1(2006年10月1日)

  • 第一次发布。