跳转到主要内容

用于确保软件质量的lint

项目描述

https://img.shields.io/travis/pyga/ebb-lint/master.svg?style=flat-square https://img.shields.io/codecov/c/github/pyga/ebb-lint/master.svg?style=flat-square https://img.shields.io/pypi/v/ebb-lint.svg?style=flat-square https://img.shields.io/pypi/format/ebb-lint.svg?style=flat-square https://img.shields.io/pypi/pyversions/ebb-lint.svg?style=flat-square https://img.shields.io/pypi/l/ebb-lint.svg?style=flat-square

ebb-lint

这是一个flake8插件!它会检查样式问题!要激活它

$ pip install ebb-lint

配置

配置不会做任何事情,只会引起错误或松懈,因此ebb-lint建议保留默认设置。然而,提供了两个配置选项来处理长行。这两个选项都可以通过传递标志给flake8或使用典型的配置方法来指定。

hard-max-line-length

行不应超过此值。默认值为119列。

permissive-bulkiness-percentage

行长度可以超过 max-line-length(被认为是“软限制”),但前提是该行包含的字符串字面量或注释的百分比大于或等于这个值,每个的百分比是分开计算的。默认值是67%。更多详细信息,请参阅关于 长行 的部分。

当编写一次性脚本时,若要无视 ebb-lint 的要求使用 print,请在该文件的顶部添加注释以禁用该警告

# I sincerely swear that this is one-off code.

此注释必须位于代码(包括文档字符串)的任何语句之上,并且单独成行。

noqa

ebb-lint 会极端地禁用 # noqa 注释。此功能过度使用且过于通用;不可能仅将某些错误标记为可接受,因此,为一种错误标记 noqa 的行可能会完全掩盖另一种错误。

错误

所有可能的错误,按类别组织

L1: 文档字符串

L101

类的方法 __init__ 不应包含文档字符串,因为按照 标准的 Sphinx 风格,应将此信息放在类的文档字符串中。

L102

文档字符串的格式错误。单行文档字符串应类似于这样

def func():
    """Spam eggs."""

多行文档字符串应类似于这样

def func():
    """
    Spam eggs.

    Also, sausage.
    """
L103

测试文档字符串(即名称以 test_ 开头的函数或方法的文档字符串)不得以任何形式的“test”、“verify”或“ensure”开头。

L104

文档字符串必须使用 Napoleon,而不是 reStructuredText 字段

L2: 有疑义的语法

Python 的某些功能弊大于利。这些错误在程序员可能有意做某事但意外做错了的情况下捕获潜在问题。

L201

容器字面量必须跟在最后一个元素后面有一个逗号。如果关闭的 )]} 与最后一个元素在同一行上,则不会发出此错误。

L202

print 除了调试外不允许使用。对于生产代码,日志记录更加灵活和可预测。这可以在 一次性脚本 中禁用。

L203

pdb 和兼容的模块(即暴露 set_trace 函数的模块)除了调试外不允许使用。如果允许在生产代码中使用 set_trace 调用,可能会阻塞进程。

L204

隐式字符串字面量连接(即 'spam' 'eggs' 等价于 'spameggs')仅允许在连接的每个字符串都被括号包围时使用,并且括号中只包含字符串字面量。

这没问题

some_string = ('spam {} '
               'eggs').format('spam')

但这不行

some_list = [
    'spam'
    'eggs',
    'sausage',
]
L205

__init__.py 不允许包含函数或类定义。

L206

隐式相对导入 不允许。

L207

pass 仅在包含没有其他语句的非可选块中是必要的。如果块中包含其他语句,添加 pass 是多余的。文档字符串算作一个语句。

非可选块是例如 defclassif 的块。 elsefinally 块是可选的,因此这种情况永远不会必要

if predicate():
    do_something()
else:
    pass

try:
    do_something()
finally:
    pass
L208

处理Pokémon异常总是错误的。如果真的想要捕获并忽略异常,应明确指定要静音的异常类型。

L209

returndelraiseassertprint(在Python 2中,没有 print_functionyieldyield from 都是语句,而不是函数,因此不需要括号。

这没问题

return (
  a
  + b)

但这不行

return(a + b)
L210

而不是有意依赖map、filter或列表推导式的副作用,应该写一个明确的for循环。

这没问题

for x in y:
    print(x)

但这不行

map(print, y)
L211

使用map或filter与lambda作为第一个参数总是更好写成列表推导式或生成器表达式。表达式更易读、更易扩展,并且不太重要,不会产生太多的函数调用开销。

L212

使用@staticmethod总是错误的。最常见的情况有两种:

  • 想要对类做些事情,但不需要实例,在这种情况下,@classmethod是正确的解决方案。

  • 想要在类上‘命名空间’一个函数,但这不是Java,所以将其作为模块作用域的函数。

单独使用staticmethod没有问题;这对于测试目的完全是可以接受的。

from some_module import do_some_more_io, some_io


def do_io():
    return some_io()


class Spam(object):
    do_io = staticmethod(do_io)
    do_some_more_io = staticmethod(do_some_more_io)

L3: 格式化

L301

文件必须以换行符结尾。

L302

行太长了。

超过hard-max-line-length(这被认为是“硬限制”,默认为119列)的行是不允许的。如果行包含超过一定百分比的字符串字面量或注释,则允许超过max-line-length(这被认为是“软限制”,默认为79列)。这两个百分比不合并。允许的“一定百分比”是permissive-bulkiness-percentage,默认为67%。

对于以下所有示例,软限制为15列,硬限制为25列。

不允许,因为,在20个字符时,该行超过了软限制,整个行只占字符计数的15%字符串字面量。

ultradignified = 'y'

允许,因为整个行占字符计数的80%是字符串字面量。

t = 'electroplating'

允许,因为整个行占字符计数的75%是注释。

f()  # accreditation

不允许,因为整个行占字符计数的20%是注释和50%是字符串字面量,并且这两个都不是或超过67%。

d = 'smallpox'  # ok

不允许,因为整个行长为26个字符,超过了硬限制。

thyroparathyroidectomize()

hard-max-line-lengthpermissive-bulkiness-percentage 可以配置;请参阅配置部分。

L303

noqa 被忽略,因此应删除 # noqa 注释以减少无用的噪音。

贡献

请在问题跟踪器上提交问题,并遵循我们的行为准则

项目详情


下载文件

下载适用于您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。

源分布

ebb-lint-0.19.1.0.tar.gz (37.0 kB 查看哈希值)

上传时间

构建分布

ebb_lint-0.19.1.0-py2.py3-none-any.whl (23.2 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面