clang-format 可以为我对齐#defines 块吗?

Can clang-format align a block of #defines for me?

我有一个包含这样几行的源文件;

#define ARC_V2_LP_START         0x002
#define ARC_V2_LP_END           0x003
#define ARC_V2_STATUS32         0x00a

所有值都很好地对齐。不幸的是,clang-format 会这样做;

#define ARC_V2_LP_START 0x002
#define ARC_V2_LP_END 0x003
#define ARC_V2_STATUS32 0x00a

我找到了 AlignConsecutiveDeclarations 和 AlignConsecutiveAssignments 选项,但没有任何东西可以对齐连续的#defines。可以这样做吗?

快速浏览 style options 似乎目前没有此选项。我看到的处理预处理的唯一选项是 IndentPPDirectives,它处理 #if 块的缩进。

[更新]

op 的 pull request 终于通过了,从 clang 版本 9.0.0 开始。该功能由 AlignConsecutiveMacros: true 选项启用。

[原创]

奇怪的是,这个功能还没有在 clang 中实现;当前缺少连续宏的格式化选项。

许多开发人员都很感兴趣,并且有一个工作拉取请求已等待批准多年:https://reviews.llvm.org/D28462?id=93341

你可以集成它或者等待他们是否将它添加到官方分支,但在这一点上我怀疑他们会。

我也找不到任何选项。 Clang 破坏了我所有由 emacs 自动对齐的定义..

请注意,clang-format-9 及更高版本有一个 AlignConsecutiveMacros: true 选项,它可以为您解决问题。

要在 ubuntu/Debian 上安装 clang-format-9,您需要检查 http://apt.llvm.org/

例如,如果您有 Ubuntu 16.04/xenial,则需要执行以下操作:

sudo sh -c 'echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main" >> /etc/apt/sources.list'
sudo sh -c 'echo "deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main" >> /etc/apt/sources.list'
sudo apt update
sudo apt install clang-format-9

可以用同样的方式处理Trusty/Ubuntu14.04。