PSR-2 缩进规则的说明

Clarifications on PSR-2 indenting rules

PSR-2 Coding Style Guide chooses 4-space indent over tabs. I had always assumed that tabs vs spaces was just a question of preference and this impression of mine seems kind of supported by the fact that even PSR-2 project members survey was far from being unanimous. However, the indenting 部分提供了以下基本原理:

Using only spaces, and not mixing spaces with tabs, helps to avoid problems with diffs, patches, history, and annotations. The use of spaces also makes it easy to insert fine-grained sub-indentation for inter-line alignment.

我的两个疑惑是:

  1. 关于差异、补丁、历史和注释的说明是否仅限于混合缩进(不需要进一步解释)或者是否有一些特定问题可以由(适当的)触发 tab-only 缩进?

  2. "fine-grained sub-indentation for inter-line alignment"到底是什么意思?是否有任何特定情况需要插入 半个缩进 ? (特别欢迎提供示例。)


希望您不要只是阅读 "tabs/spaces" 并根据意见急于结束。我要求澄清 PSR-2 中可以完美使用 objective 答案的两个非常具体的点。这绝不是什么更好的问题。

据我所知,当您主要使用 vi 来编写 PHP 文件时,混合制表符和空格会非常非常混乱。这样做的原因很简单,一些客户要求您使用 ssh 登录并在远程服务器场上工作,拒绝您在本地计算机上下载任何代码。

在客户非常关注安全(政府)并且需要遵守更多规则的情况下,这确实发生在我身上。因此,我们不讨论 ssh+vi 可能是好选择还是坏选择的原因。有时,这根本不是一种选择,而是一种强加,如果你想要那份工作,你就必须尊重。

除了编辑器之外,gitdiffgrep都不总是喜欢标签。例如,如果您有此代码:

$em = $this->getEntityManager();
// more code...

if ($some_bit)
{
    $em = $this->getEntityManager();
    // more code...
}

现在你想 grep 基于缩进的行你可以这样做:

grep -nri "    $em"
grep -nri "        $em"

在控制台上编写 grep 命令时,tab 键通常用于自动完成和类似功能。插入 tab 不是立即的(您可以尝试 \t 但这完全取决于您实际使用的工具,转义并不总是可能的)。

另一种情况是将此处的代码复制并粘贴到SO中,无法使用制表符。但这不是 PSR-2 的问题,这只是对 tabs.

的一个小威慑

对于 half-indentation,我可以向您展示这段错误对齐但在某种程度上令人愉悦的代码。我不知道美学是否应该胜过正确的缩进。

嗯,我不总是喜欢它,但有时我喜欢。这都是基于意见的,所以......对待是这样的:意见。

$qb->andWhere("a = :a")
   ->andWhere("b = :b")
   ->setParameter("a", $a)
   ->setParameter("b", $b);

所有这些都是有争议的,我没有兴趣为这些推理辩护。我还可以使用任何类型的 tabs 和 IDE 或遵守 PSR-2 或任何其他风格或指南。我根据客户的要求调整我的工作。

Is the note about diffs, patches, history and annotations only restricted to mixed indentations (something that needs no further explanation) or are there some specific problems that can be triggered by (proper) tab-only indents?

Git 默认情况下显示一个制表符的 8 个空格,下面是 1 个制表符行后跟 4 个空格行。考虑到终端不是很大,8 个空格对于差异来说是巨大的。虽然这可以调整。

What does "fine-grained sub-indentation for inter-line alignment" mean exactly? Is there any specific situation where you could need to insert half an indent? (Examples are particularly welcome.)

不确定这是否是他们的想法,但在一起分配值时对齐“=”符号或“=>”,空格提供准确的数字,具体取决于您的制表符宽度值,制表符看起来很糟糕。即,较小的移位会使值不对齐,较大的移位宽度会在多个选项卡上中断。空间在不同环境中看起来相同