Objective-C代码格式化工具

13

类似的问题以前已经被问过,但它们没有帮助我实现我想做的事情:

我想重新格式化现有的Objective-C代码(几百个文件)。 对于纯苹果风格格式化,uncrustify似乎可以满足我的需求。 但对于一些项目,我需要不同的样式,我还不知道如何为其配置uncrustify。 在这种样式中,长方法调用看起来像这样(请勿讨论您是否喜欢这种样式; 不要建议使用其他样式):

[self
    longMethod:arg1
    withLots:arg2
    ofArguments:arg3
    aBlock:^{
       [self doSomething];
    }
    andAnotherBlock:^{
       [self doSomethingElse];
    }
];

当方法调用的长度超过80或100个字符时,会进行这种包装。每行缩进一级,包含一个参数和与对应的:部分匹配的选择器部分。因此,这些行不是冒号对齐的。

如果行长度低于80或100个字符,则不进行包装:

[self shortMethod:withAnArgument];

有没有一个可以调整以支持这种样式的代码格式化程序?如果有,那么是哪个,更重要的是,如何


这个问题并不是离题的,因为它涉及到开发工具,而这些工具在 关于页面 中有明确提到(也可以参考 meta.stackoverflow.com)。请参阅常见问题解答中的相关主题:这不是关于观点而是事实:一个工具要么能做到,要么不能。如果可以,我想知道如何做。 - DarkDust
我回去重新阅读了指南,也无法想象这怎么会是离题的。 - Jody Hagins
看到除了纯C语言以外的任何语言都有80个字符的限制,总是让我倍感眼疼。这种字符限制源于IBM穿孔卡的使用,而且仅能用于C语言函数名不能超过8个字符的情况下才行。对于Obj-C来说,换行会导致格式非常奇怪,我认为你不太可能会找到支持它的格式化程序。格式越奇怪,找到格式化程序的可能性就越小。 - Sulthan
@Sulthan:请看我的问题:请不要讨论你是否喜欢那种风格;不要建议使用不同的风格。这和讨论C语言中的K&R vs. Allman风格一样无用。 - DarkDust
2个回答

2

不,我认为没有适用于这种风格的代码格式化程序。您可以使用clang的Lib Tooling来完成此任务。是的,您必须使用它构建自己的工具。但是,如果您想做一些非常不寻常的事情,开发自己的工具是通常的方式。


2

Clang格式化工具可用于以任意数量的样式格式化代码。您甚至可以指定您需要的确切选项,或使用几种“标准”样式之一。

还有一个XCode插件


但它是否支持所描述的格式呢?如果支持,是怎样支持的呢? - DarkDust
3
那个格式在我看来很丑,所以我从未尝试过那种具体格式 :-). 然而,我知道它有指定换行样式和行长的选项。我还认为它有根据冒号对齐或不对齐的选项。它是我所知道的Obj-C格式选项最多的,看起来匹配。但是,我不想浪费时间去调整选项以匹配那个具体格式。 - Jody Hagins
所以我确实看了一下Clang格式,但它对我没有帮助。事实上,它甚至比uncrustify还不太有用,因为你不能调整Objective-C方法调用的很多东西。 - DarkDust
很难让自动代码格式化程序完全符合每个人的要求。通常,如果你想自动完成,就必须在你想要的东西上做出妥协。我已经找到了一个比较满意的地方,使用clang-format...除了它缩进内联块的方式...我还没有找到任何我喜欢的东西。 - Jody Hagins
2
@JodyHagins 为了提高代码的可读性,你可以做的最好的事情之一就是停止使用内联块 :) 我花了多年时间才明白,为某些东西创建一个变量会使代码更易读,仅仅因为你会添加一个“名称”。 - Sulthan
1
@Sulthan 做过两种方式,使用过几种不同的编程语言(包括Obj-C和C++)。我发现,在一般情况下,内联块可以增加代码的可读性。不过像任何东西一样,它也可能被滥用。所有的工具都是有用的。 - Jody Hagins

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