如何在使用块和Xcode时将源代码格式化为新行中的大括号?

11

有没有办法让Xcode不重新格式化已经格式化的代码,或者有没有像uncrustify这样的工具可以格式化使用块的源代码?

对于Objective-C中的块,代码变得难以阅读。一个解决方案是编写块定义并将花括号放在新行上,就像这样:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void)
{
    //block of code
});

并且:

[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop)
{
    //block of code
}];

简单美观!

但是 Xcode 不能保持这个格式,我找不到方法让 Uncrustify 输出这种格式的代码。Uncrustify 真的很好,但也许函数块太新了?

有什么想法吗?

[免责声明: 我知道这可能会变成“怼人时间”,但代码应该尽可能易于阅读,而将括号放在同一列使事情更加清晰(对我来说)。特别是如果你有几个块在一个块内。所以如果您不喜欢代码看起来像这样,请尽量忽略这个问题。]


我也遇到了在参数中格式化代码块的问题。我找不到设置来修改代码缩进和^后括号的位置 :( - Yogurt
2
不,这方面确实没有任何设置。不过,当使用小块时,xCode会理解如果您先输入 ^(void) 然后按回车键,接下来的括号将被正确放置。 - Olof_t
3
请尝试从GitHub构建最新版本的uncrustify。与一年前发布的0.59版本相比,它在块支持方面有很大的改进。 - nschum
@nschum 是的,现在的uncrustify比旧版本好多了。然而,它仍然无法解决这个问题。 - Olof_t
1
我认为你可以使用最新的uncrustify来正确地完成这个任务,但我的经验也告诉我,下次你在那段代码中工作时,Xcode会把它搞砸。 - ipmcc
2个回答

3
最新的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

我使用了 indent_with_tabs = 0,因为我无法通过制表符来使其正常工作。可能并不必要。

当然,如果你想在 {} 前后设置换行符,请把所有的 nl_some_parameter_brace 都设置为 "force"。

现在 uncrustify 将处理 你的 代码,它不会为你插入新行到代码块中,像这样的代码将保持丑陋:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void) {
    //code
}

如果有人找到了一种使其适当插入新行的方法,请告诉我。
感谢@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!");
                }];
        }];
});

-1

XCode使用内置的“代码片段”进行自动完成。通过单击库窗格中的{}图标打开代码片段库。您无法直接在XCode中编辑片段,但应用程序SnippetEdit允许您编辑它们。

我建议您在编辑它们之前备份“codesnippets”文件。它位于/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接