我正在使用 clang-format (
version 8.0.0 (tags/google/stable/2019-01-18)
) 和样式文件,我在其中设置
…
PointerAlignment: Left
…
这成功地改变了这样的声明
const string &foo = "lorem ipsum";
进入
const string& foo = "lorem ipsum";
但是,当我也包含在我的样式文件中时
BasedOnStyle: Google
这些选项没有任何作用。由于某种原因,它们被基本样式覆盖。这对我来说似乎很荒谬——显式选项应该覆盖基本样式,不是吗? 有人可以解释一下问题是什么以及如何使用
BasedOnStyle
和 PointerAlignment: Left
吗?
答案是 Google 风格(可以用
clang-format -style=google -dump-config | less
检查它)定义了
DerivePointerAlignment: true
文档是这么说的
如果为 true,则分析格式化文件中最常见的 & 和 * 对齐方式。指针和参考对齐样式将根据文件中的首选项进行更新。 PointerAlignment 仅用作后备。
这意味着如果想自己处理就必须明确设置
DerivePointerAlignment: false
。
这咬了我。我个人认为使用默认值覆盖特定设置值的未记录选项是愚蠢的。如果有人专门将 PointerAlignment 设置为左(或右),为什么程序会决定忽略该设置,尤其是在不生成错误的情况下。 PointerAlignment:Left 似乎在我扫描的 99% 的文件中都有效,但在少数文件中失败了。使测试变得困难。
还有其他值可以这样工作吗?该选项似乎有效,但在某些文件中失败,因为某些隐藏的未记录的已弃用功能覆盖了特定设置?