【问题标题】:Can clang-format align variable or macro assignments in columns?clang-format 可以在列中对齐变量或宏赋值吗?
【发布时间】:2015-01-22 12:48:26
【问题描述】:

是否可以在列中使用 clang 格式对齐变量赋值?例如:

int someInteger             = 42;
std::string someString      = "string";
const unsigned someUnsigned = 42;

#define SOME_INTEGER        42
#define SOME_STRING_LITERAL "string"
#define SOME_CONSTANT       42

enum Enum {
    ONE   = 1,
    TWO   = 2,
    THREE = 3,
    FOUR  = 4,
    FIVE  = 5,
    SIX   = 6,
    SEVEN = 7
};

比以下更具可读性:

int someInteger = 42;
const unsigned someUnsigned = 42;
std::string someString = "string";

#define SOME_INTEGER 42
#define SOME_STRING_LITERAL "string"
#define SOME_CONSTANT 42

enum Enum {
    ONE = 1,
    TWO = 2,
    THREE = 3,
    FOUR = 4,
    FIVE = 5,
    SIX = 6,
    SEVEN = 7
};

我意识到 clang-format 总是这样做可能不切实际,但是当已经像上述代码一样手动格式化代码时,clang-format 最好保留格式。

【问题讨论】:

  • uncrustify 有这个选项,但没有 clang-format。
  • 它不支持这一点让我感到震惊。基本上使 clang 格式无法使用 IMO。
  • uncrustify的对应选项是:align_pp_define_span

标签: c++ c c++11 clang clang-format


【解决方案1】:

你可以使用这个选项:AlignConsecutiveMacros: true 参考:https://clang.llvm.org/docs/ClangFormatStyleOptions.html 支持llvm版本:>=10.0

【讨论】:

    【解决方案2】:

    对于宏:看起来您将能够在发布 clang 10 后完成此操作,只需将 AlignConsecutiveMacros: true 添加到您 .clang-format 即可

    https://reviews.llvm.org/D28462

    【讨论】:

      【解决方案3】:

      我使用https://github.com/mattga/ClangFormat-Xcode/tree/clang_3.7 对其进行了测试,它是支持 3.7 的 ClangFormat-Xcode 的分支。

      我可以格式化 a = 9999;通过选项输入我想要的列表

      AlignConsecutiveAssignments = true

      。但定义不一致。 是否有任何迹象可以对齐它们?

      【讨论】:

      • AlignConsecutiveDeclarations 可能是您想要的。
      【解决方案4】:

      看起来 3.7 支持这样的东西(尚未测试)。

      来自docs

      AlignConsecutiveAssignments (bool)
      如果为 true,则对齐连续的分配。

      这将对齐连续行的赋值运算符。这将导致像 code int aaaa = 12; 这样的格式。诠释 b = 23; int ccc = 23;结束码

      (原文如此)

      【讨论】:

      • @syvex,请问您是否需要做一些特别的事情才能使它正常工作?我得到error: unknown key 'AlignConsecutiveAssignments'
      • 这实际上不适用于预处理器宏。我目前正在尝试将其添加为单独的选项,请参阅此分支上的最新提交 github.com/eriknyquist/clang/tree/align_defines
      • Eriks commit 有没有成功过 clang?荒谬的是,他们没有对齐宏的选项。为什么审核和接受需要这么长时间?
      • @ErikNyquist 你有没有把它带入 LLVM?
      • 不,仍然开放供审核。只是有很多流失,如果您查看我发布到评论的链接,您会看到所有已请求的更改(并且我已经实施)。然后沉默了很长很长时间,上个月有人刚回来,基本上要求重做整个事情,我只是没有时间/精力了.....跨度>
      【解决方案5】:

      Clang-format 没有任何选项可以做到这一点。

      如果您想告诉 clang-format 保留某些行,您可以使用 // clang-format off// clang-format on cmets 来实现。

      【讨论】:

      • @syvex 你用的是什么版本?看起来它可能是自 3.5 版本以来的一项新功能。
      猜你喜欢
      • 1970-01-01
      • 2016-11-18
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 2016-10-22
      • 2018-05-20
      • 1970-01-01
      相关资源
      最近更新 更多