Как отформатировать исходный код с фигурными скобками на новых строках с блоками и Xcode?
есть ли способ сделать 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 действительно хорош, но, возможно, блоки тоже новые?
какие идеи?
[отказ: Я знаю, что это может превратиться в "час троллей", но код должен быть как можно проще для чтения, и наличие скобок на одном столбце делает вещи намного более ясными (для меня). Особенно если у вас есть несколько блоков внутри блока. Поэтому, если вам не нравится такой код, попробуйте просто проигнорировать вопрос.]
2 ответов
последнее (около 2 месяцев или около того) обновление для 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!");
}];
}];
});
XCode использует встроенные "фрагменты кода" для автозаполнения. Откройте библиотеку фрагментов кода, нажав кнопку {}
значок на панели библиотека. Вы не можете редактировать фрагменты непосредственно в самом XCode, но приложение SnippetEdit позволяет редактировать их.
Я предлагаю вам сделать резервную копию файла "codesnippets" перед их редактированием. Он расположен в /Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets