【问题标题】:What is the linter rule called when trying to left-align long list items?尝试左对齐长列表项时调用的 linter 规则是什么?
【发布时间】:2019-01-18 01:27:18
【问题描述】:

不好:

my_result = MyObject.my_method(first_parameter, second_parameter,
                               MyOtherObject.other_method(first, second))
  • 很快达到行长限制,尤其是在存在嵌套调用/列表时。
  • 如果有任何内容被重命名,则必须更改第 2 行的缩进。
  • 必须为每个新参数添加一堆缩进。
  • 一般不与默认缩进的倍数对齐。
  • 找到第 N 个参数的速度较慢,因为我必须同时进行垂直和水平扫描。

好:

my_result = MyObject.my_method(
    first_parameter,
    second_parameter,
    MyOtherObject.other_method(first, second),
)
  • 比上面的代码更容易扫描,因为第一个参数与方法名称分离得更远。
  • 更容易找到第 N 个参数。
  • 尾随逗号表示添加新参数时的差异仅为一行。

换句话说:

  • 仅当所有参数与方法调用位于同一行时,才将多个参数放在同一行。
  • 尽量减少任何更改的差异复杂性。

这种模式有名称吗?

(用例是我想找到一个 linter 来检查它,但首先我需要知道它叫什么。)

【问题讨论】:

  • PEP 8 使用术语“悬挂缩进”。如果你找到了这样的 linter,请告诉我 :)
  • @Ry- 看起来 hanging indent 是故事的一部分,但 PEP 8 仍然在多行调用中的每一行放置多个参数。
  • 你指的是AST吗?
  • 我为此写了一个格式化程序:github.com/asottile/add-trailing-comma -- black 也支持这种风格
  • 有点拗口:多行方法调用(尽管它也适用于函数、导入、classdefs、functiondefs)-- tbh 它实际上并不是一个好名字

标签: python lint


【解决方案1】:

关于 lint 格式化程序,您可以查看 Black(不是很可定制,但提示就在其名称中 :-)。

Black README your left-alignment is referred to as "vertical whitespace"。在yapf README it is controlled by CONTINUATION_ALIGN_STYLE.

我怀疑每个 linter/formatter 都有自己的名称,用于在换行时执行的那种缩进,并围绕使行“坏”和需要重排的规则编程可能非常复杂。

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2022-01-17
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多