【问题标题】:Astyle - how to format condition without braces to 1TBSAstyle - 如何将不带大括号的条件格式化为 1TBS
【发布时间】:2025-12-07 22:15:01
【问题描述】:

我有一个使用 Astyle 将代码格式化为 1TBS 的程序。所以,如果我有这样的代码

if(condition)
    func(a, b);

变成了这个

if(condition) {
    func(a, b);
}

问题是,当被调用函数中的参数被分成多行时,像这样:

if(condition)
    func(a, 
         b);

即使我尝试用--add-brackets 强制他,Astyle 也无法添加大括号。是否可以通过其他方式实现?

我的命令现在看起来像这样:

astyle --style=1tbs --add-brackets  test.c

【问题讨论】:

  • 也许 clang-format 可以做到这一点?
  • @EOF 也许可以,但如果可能的话,我更愿意坚持使用 Astyle。即使没有其他软件包,我们的程序也已经相当大了。

标签: c++ c parsing astyle


【解决方案1】:

这可能看起来有点复杂,但如果你有很多来源 添加大括号是您只需要一次的操作, 以下方案可能有效。

你可以坚持 astyle 但你暂时需要uncrustify 以及我编写的名为 whatstyle 的脚本。

在以下步骤中,将 test1.c 替换为您的来源并保留备份 您的来源,因为它们将被修改。

教 astyle 您的资源的当前样式

whatstyle.py -f astyle --mode resilient --output astylerc test1.c

教导你的资源当前的风格

whatstyle.py -f uncrustify --output uncrustify.cfg test1.c

告诉 uncrustify 总是在 ifs 中添加大括号

( egrep -v mod_full_brace_if < uncrustify.cfg ; echo "mod_full_brace_if = force" ) \
  > uncrustify_addbrace.cfg

使用 uncrustify 尽可能少地更改您的资源格式

uncrustify --replace -c uncrustify_addbrace.cfg test1.c

现在已经添加了大括号,使用 astyle 重新转换为原始样式。

ARTISTIC_STYLE_OPTIONS=astylerc astyle test1.c

现在您的来源应该看起来几乎和以前一样了,除了添加了大括号 虽然来回风格转换可能会有更多变化。

【讨论】:

    最近更新 更多