Olo*_*f_t 11 xcode objective-c objective-c-blocks uncrustify
有没有办法让Xcode不重新格式化格式化的代码,或者是否有像uncrustify这样的工具可以格式化使用块的源代码?
对于objective-c中的块,代码变得难以阅读.一种解决方案是写出块定义并在新行上放置花括号,如下所示:
dispatch_async(dispatch_get_global_queue(0, 0), ^(void)
{
//block of code
});
Run Code Online (Sandbox Code Playgroud)
和:
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop)
{
//block of code
}];
Run Code Online (Sandbox Code Playgroud)
美丽而轻松!
但是Xcode不保留这种格式,我找不到以这种方式制作unrustify输出代码的方法.Uncrustify真的很好,但也许块太新了?
有任何想法吗?
[免责声明:我知道这可能变成"巨魔小时",但代码应该是一样容易地阅读,并在同一列有括号,使事情变得更加清晰(对我来说).特别是如果你在一个街区内有几个街区.因此,如果你不喜欢这样的代码,请尝试忽略这个问题.]
最新的(大约两个月前左右)更新 uncrustify 几乎解决了问题。只需在配置文件中设置以下项目:
indent_oc_block = true
indent_with_tabs = 0
indent_columns = 4 # set to the same as indent_switch_case
indent_switch_case = 4 # set to the same as indent_columns
Run Code Online (Sandbox Code Playgroud)
(我使用 indent_with_tabs = 0 因为我无法让它与制表符一起使用。可能没有必要。)
当然,对于 {} 之后/之前的新行,将 nl_some_parameter_brace 的所有内容设置为“force”。
现在 uncrustify 将处理您的代码,它不会为您将新行插入到块中,这样的代码将仍然丑陋:
dispatch_async(dispatch_get_global_queue(0, 0), ^(void) {
//code
}
Run Code Online (Sandbox Code Playgroud)
如果有人找到一种方法让它适当地插入新行,请告诉我。
感谢@ipmcc 对 uncrustify 的更新。
编辑:是的,每当您复制/粘贴时,xCode 都会混淆代码。我使用这个很棒的 xCode 插件来简化工作流程:https://github.com/benoitsan/BBUncrustifyPlugin-Xcode
编辑 2:Uncrustify 不能很好地处理嵌套块(仍然比 Xcode 更好)。例如,嵌套块变为:
dispatch_async(dispatch_get_global_queue(0, 0), ^(void)
{
[array enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop)
{
[array enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop)
{
NSLog(@"the pumpkin pie!");
}];
}];
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1906 次 |
| 最近记录: |