我们正在使用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或片状或特殊检查器的检查器或规则,以确保:
一致性是干净代码库的关键,如果没有自动检查规则,我们就不能依赖开发人员遵守规则。所以我需要检查所提到的案例。
答案 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,
)
答案 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.