如何在python中强制关闭括号lint规则

时间:2018-03-17 14:01:02

标签: python indentation lint pylint

我们正在使用flake8和pylint对项目进行代码样式检查。

但问题是,没有人会检查线路的分割方式。由于项目中的一致性很好,我们发现它看起来很奇怪

foo = long_function_name(var_one, var_two,
                         var_three, var_four)

foo = long_function_name(
    var_one,
    var_two,
    var_three,
    var_four)

foo = long_function_name(
    var_one,
    var_two,
    var_three,
    var_four
)

foo = {
    a,
    b}

foo = {
    a,
    b,
}

在我们的代码库中。有时,关闭事物的不同方式就像上面的例子一样紧挨着。

现在是否有针对pylint或片状或特殊检查器的检查器或规则,以确保:

  • 如果你有一个悬挂缩进,那么右括号,大括号或圆括号总是在一个新行中,并且我们上面有一个尾随逗号。

一致性是干净代码库的关键,如果没有自动检查规则,我们就不能依赖开发人员遵守规则。所以我需要检查所提到的案例。

4 个答案:

答案 0 :(得分:1)

您可以使用wemake-python-styleguide。它是一组flake8插件,具有许多新规则。

要安装它,请运行:pip install wemake-python-styleguide

运行:flake8 your_module.py

这仍然只是一个flake8插件!

您感兴趣的特定规则是consistency.ParametersIndentationViolation

正确的代码示例:

# Correct:
def my_function(arg1, arg2, arg3) -> None:
    return None

print(1, 2, 3, 4, 5, 6)

def my_function(
    arg1, arg2, arg3,
) -> None:
    return None

print(
    1, 2, 3, 4, 5, 6,
)

def my_function(
    arg1,
    arg2,
    arg3,
) -> None:
    return None

print(
    first_variable,
    2,
    third_value,
    4,
    5,
    last_item,
)

# Special case:

print('some text', 'description', [
    first_variable,
    second_variable,
    third_variable,
    last_item,
], end='')

不正确的代码示例:

call(1,
     2,
     3)

print(
    1, 2,
    3,
)

文档:https://wemake-python-stylegui.de

答案 1 :(得分:0)

pylint不会这样做。

所有pylint消息的列表 http://pylint-messages.wikidot.com/all-codes

答案 2 :(得分:0)

因此,默认情况下,pycodestyle(PEP8不执行的某些检查)会被flake8包装的短绒棉之一忽略,但是如果选中,它们实际上可以进行。 Here您可以检查错误代码并更改默认行为以选择要运行的错误代码。 示例:

flake8 --select E123

如果您已经拥有以前未检查过的带有这些样式的代码,则可以使用autopep8格式器对其进行重新格式化:

autopep8 --select=E123 --in-place --recursive .

答案 3 :(得分:-1)

我也在使用flake8,并且无法配置它以增强示例中的一致性,因为您的所有示例均符合PEP8。

为增强一致性,我发现了https://github.com/python/black:“不妥协的代码格式化程序”。除了重新格式化代码外,它还可以使用--check标志来充当lint(请参见下面的示例用法)。

当我在示例中调用黑色时,前三个格式为:

foo = long_function_name(var_one, var_two, var_three, var_four)

和最后两个格式化为:

foo = {a, b}

演示:1)在需要换行时黑色如何工作;和2)将黑色用作短绒:

$ cat bar.py
foo = long_function_name(
    var_one,
    var_two,
    var_three,
    var_four,
    var_five,
    var_six,
    var_seven)

foo = long_function_name(
    var_one,
    var_two,
    var_three,
    var_four,
    var_five,
    var_six,
    var_seven,
    var_eight,
    var_nine
)

$ black --check bar.py
would reformat bar.py
All done!   
1 file would be reformatted.

$ black bar.py
reformatted bar.py
All done! ✨  ✨
1 file reformatted.

$ cat bar.py
foo = long_function_name(
    var_one, var_two, var_three, var_four, var_five, var_six, var_seven
)

foo = long_function_name(
    var_one,
    var_two,
    var_three,
    var_four,
    var_five,
    var_six,
    var_seven,
    var_eight,
    var_nine,
)

$ black --check bar.py
All done! ✨  ✨
1 file would be left unchanged.