1

我正在尝试在我的一个项目中使用 Uncrustify,但是当宏用作 Objective-C 消息的接收器时,我遇到了一些间距更改问题。例如,给定以下宏和方法调用,我希望间距保持原样。

#define NilOrNotNSNull(val) ({id __val = (val); (__val == [NSNull null]) ? nil : __val;})

title_ = [NilOrNotNSNull([dict objectForKey:@"post_title"]) copy];

然而,这就是结果。

#define NilOrNotNSNull(val) ({id __val = (val); (__val == [NSNull null]) ? nil : __val;})

title_ = [NilOrNotNSNull ([dict objectForKey:@"post_title"])copy];

似乎 Uncrustify 无法识别括号中的文本是宏的参数,但是我不确定它到底认为它是什么。这对我来说似乎是一个 Uncrustify 错误,但它可能是我的配置的问题,所以我想我会在这里问以及在 GitHub 上提交问题。这是我正在使用的配置:https ://gist.github.com/812314

如果有人可以提供一些见解,我将不胜感激。

4

1 回答 1

1

当我使用您的配置运行时,我没有得到您的确切输出。你用的是什么版本?我的版本输出如下:

macbook-adamd:~ adamd$ uncrustify --version
uncrustify 0.56

我使用您的配置获得的输出有一个反斜杠,它将您的宏的关闭父级包装到换行符:

#define NilOrNotNSNull(val) ({ id __val = (val); (__val == [NSNull null]) ? nil : __val; } \
                         )

title_ = [NilOrNotNSNull ([dict objectForKey:@"post_title"])copy];

也就是说,我可以通过添加到配置文件的顶部来消除NilOrNotNSNull和 open paren之间的空格。set func_call_user NilOrNotNSNull有关详细信息,请参阅文档sp_func_call_user_paren。似乎您设置了删除空间的选项,只是没有与之匹配的定义。

这是我的输出set func_call_user NilOrNotNSNull

#define NilOrNotNSNull(val) ({ id __val = (val); (__val == [NSNull null]) ? nil : __val; } \
                             )

title_ = [NilOrNotNSNull([dict objectForKey:@"post_title"]) copy];

我分叉了你的要点并更新了它:https ://gist.github.com/815042

于 2011-02-07T19:59:32.317 回答