我正在尝试在我的项目中使用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
如果有人能提供一些见解,我会很感激。
答案 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