【问题标题】:Configuring uncrustify to add braces配置 uncrustify 以添加大括号
【发布时间】:2017-11-22 17:55:27
【问题描述】:

我正在使用 0.66.1 版本的 uncrustify,我对设置为“强制”的“mod_full_brace_if”的行为感到困惑。它的评论说:

在单行“if”语句中添加或删除大括号。如果大括号包含“else”,则不会删除它们。

鉴于行:

if (flag) val = 10;

我希望/期望它转变为

if (flag) { val = 10; }

相反,它保持不变。

这只是我对“mod_full_brace_if”行为的误解吗?

稍后: 我有时间在家里做一些小实验。我首先创建了一个新的格式文件,并修改了一些与强制大括号与各种关键字在同一行有关的设置,以及一些强制大括号围绕单行正文的设置。我制作了一个包含以下内容的测试文件:

void foo() {
bool flag;
int var;
if (flag) var = 10;
if (!flag)
    var = 20; 
}

使用我的新配置文件运行 uncrustify 会产生与我在工作中看到的相同的缺乏转换。

然后我创建了另一个配置文件,只更改了“mod_full_brace_if”(更改为“强制”)。在我的测试文件中使用它会导致 if 语句的主体周围出现大括号。显然,多个设置之间存在一些奇怪的交互。我在未来看到了一些改变设置和测试的苦差事。

【问题讨论】:

  • 您的示例适用于 Uncrustify-0.66.1-2-f9c285db。所以它要么是你的配置和/或代码中的其他东西。发布两者的链接。
  • @CDanU 感谢您提供的信息;知道局部有问题是很有价值的。不幸的是,配置和示例代码在我的工作机器上,在接下来的几天里我无法使用。我可以说我的测试代码非常简单,本质上是:
  • 抱歉 - 被 5 分钟的编辑限制抓住了。测试代码基本上是一个文件,其中包含: void foo() { int val;布尔标志;如果(标志)val = 10; }

标签: c++ uncrustify


【解决方案1】:

原来问题在于将“mod_full_brace_if_chain”设置为“true”。

文档说:

使链中的所有 if/elseif/else 语句都被支撑或不支撑。覆盖 mod_full_brace_if。

如果任何必须支撑,它们都被支撑。如果所有都可以解开,则移除大括号。

我在设置值时没有仔细阅读最后一句话。

【讨论】:

    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多