【问题标题】:How do I control indentation of array initializers with clang-format?如何使用 clang 格式控制数组初始值设定项的缩进?
【发布时间】:2015-07-31 09:30:15
【问题描述】:

有时 clang-format 会这样做:

SomeType VariableName[] = {Thing1,
                           Thing2,
                           Thing3}

有时 clang-format 会这样做:

SomeType VariableName[] = {
   Thing1,
   Thing2,
   Thing3}

而且单个字符的变化就可以让它在两者之间切换。

有什么方法可以控制它的作用吗?

我是从最新的 git 源构建的,所以可以使用最新的选项。

【问题讨论】:

  • 您能否提供更多关于什么样的单个字符更改可以使其切换的信息?这些信息将有助于我找出答案。谢谢。
  • 我试图为这个问题创建一个小案例,但它工作正常没有问题。
  • 单个字符的变化是 PointerAlignment 从 Right 变为 Middle。
  • 我不明白“工作正常没有问题”。我并没有声称存在错误。只是我更喜欢总是获得第二种样式。

标签: c++ clang-format


【解决方案1】:

根据this answerclang-format 在某些步骤中尽可能多地放在一行上,并在其上应用ColumnLimit

这可以解释行为之间的转换。

One way 为防止这种情况发生,可以将ColumnLimit 设置为 0,代价是移除所有自动换行。我认为这是值得的,我相信其他人不同意。

【讨论】:

    【解决方案2】:

    clang-format 为用户提供了一种在格式化代码时指定单个属性的方式,例如是否允许tabtabwidth 是什么。

    您可以使用以下方式告诉clang-format 使用自定义属性。

      $clang-format -style="{BaseonStype: llvm, IndentWidth: 8}"
      $clang-format -style=HAND_WRITTEN_FORMAT_FILENAME
      $clang-format -style=llvm  #builtin styles.
    

    您可以了解可以在file 中从171 行到266 行中自定义哪些属性。

    【讨论】:

    • 我知道如何更改属性。我仔细研究了clang.llvm.org/docs/ClangFormatStyleOptions.html,它似乎是最新的源。似乎没有属性可以控制这种行为,尽管较小的 ColumnLimit 通常会将其从第一种样式更改为第二种样式。
    猜你喜欢
    • 2017-02-08
    • 2018-11-27
    • 2021-04-15
    • 2021-05-15
    • 2016-10-29
    • 2014-08-31
    • 2021-07-06
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多