重新格式化C++括号而不改变缩进?

emk*_*emk 6 c++ formatting coding-style indentation curly-braces

我们希望使我们的C++大括号样式更加一致.现在,我们的代码包含以下内容:

if (cond)
{
    // ...    
}
else
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

...和:

if (cond) {
    // ...
} else {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我们想要专门使用后一种风格.

但是,我们希望改变我们的代码的缩进.我尝试过使用astyle,bcpp,GNU indent和Uncrustify(我看过GreatCode的命令行选项).不幸的是,这些工具中的每一个都坚持重新定义我们的代码,并且大多数工具都非常糟糕地破坏了C++构造函数初始化程序列表和预处理程序宏.

是否有任何C++代码美化器可以修复大括号而只留下缩进?它不一定是一个预先存在的工具 - 如果你知道如何使用一些疯狂的Perl单线程,这也很好.谢谢!

更新:是的,我们知道这将使得难以读取旧代码的差异.这是一个长期推迟的代码清理,我们已经确定一致格式化的日常优势超过任何版本控制困难.

Jos*_*ley 7

这是一个Perl单行程,可以做你想要的.

perl -pi.bak -e 'BEGIN { undef $/; } s/\s*?(\s?\/\/.*)?\r?\n\s*{/ {\1/g; s/}(\s?\/\/.*)?\r?\n\s*else\b(.*)/} else\2\1/g;'
Run Code Online (Sandbox Code Playgroud)

它变成了这样:

int main(int argc, char *argv[])
{
    int something = 0;
    if (something)    // 5-12-2007
    {
        printf("Hi!\n");
    }
    else   // 5-13-2007
    {
        printf("Bye\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

进入这个:

int main(int argc, char *argv[]) {
    int something = 0;
    if (something) { // 5-12-2007
        printf("Hi!\n");
    } else { // 5-13-2007
        printf("Bye\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)