在方法调用中使用宏来解决间距问题

时间:2011-02-05 08:23:08

标签: objective-c uncrustify

我正在尝试在我的项目中使用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

如果有人能提供一些见解,我会很感激。

1 个答案:

答案 0 :(得分: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来消除set func_call_user NilOrNotNSNull和开放式paren之间的空间。有关详细信息,请参阅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