Astyle - 如何将没有大括号的条件格式化为1TBS

时间:2016-07-27 13:23:09

标签: c++ c parsing astyle

我有一个程序,它使用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

1 个答案:

答案 0 :(得分:0)

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

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

在以下步骤中,将whatstyle.py -f astyle --mode resilient --output astylerc test1.c 替换为您的来源并保留备份 您的来源将被修改。

教astyle你的来源的当前风格

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

教会解开你的来源的当前风格

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

告诉uncrustify始终为ifs添加大括号

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

使用uncrustify

以尽可能少的样式更改重新格式化您的源代码
ARTISTIC_STYLE_OPTIONS=astylerc astyle test1.c

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

public void start_sound(View v) {
    String url = /*"MY_URL"*/;
    try {
        if (mp != null)
        {
            mp.stop();
            mp.release();
            mp = null;
        }
        mp = new MediaPlayer();
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mp.setDataSource(url);
        mp.prepare();
        mp.start();
    } catch (Exception e) {}
}

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