Фигурные скобки метода Xcode 4 «{«соглашение

#xcode #methods #coding-style #conventions #brackets

#xcode #методы #стиль кодирования #соглашения #скобки

Вопрос:

Я переключился на Xcode 4, когда он был в бета-версии, и в основном редактировал существующий код, поэтому до сих пор особо не задумывался об этом…

Похоже, что шаблоны файлов Apple изменили соглашение для методов кодирования. В качестве примера, метод, существовавший до Xcode 4 dealloc , выглядел следующим образом:

 - (void)dealloc {
[super dealloc];
}
  

В Xcode 4 теперь используется этот стиль:

 - (void)dealloc
{
    [super dealloc];
}
  

Как заядлый перфекционист и раздражительный человек, это меня очень раздражает! Я был воспитан на предыдущем стиле в самом Xcode, и теперь я обнаруживаю, что просматриваю каждый шаблон при каждом его создании, чтобы вернуть скобки в нужное место!

Пожалуйста, скажите мне, что это опция по умолчанию, которую я могу изменить … или мне придется изменить свой собственный стиль кодирования, чтобы соответствовать (или, что еще хуже, «научиться жить с этим» [содрогаться]!).

Комментарии:

1. Выполните завершение кода в цикле while, и вы увидите, что перед открывающей фигурной скобкой нет разрыва строки. Таким образом, он смешивается, что на самом деле является стилем K amp; R: en.wikipedia.org/wiki/Indent_style#K.26R_style

2. @Gustav: А, достаточно верно. Я с удовольствием использовал множество операторов перехода и циклов с обычными фигурными скобками — я просто неправильно использовал названия стилей в своем вопросе. Я соответствующим образом отредактирую свой пост. Хотя методы все еще вызывают у меня проблемы! По крайней мере, я широко использую сворачивание кода, и этот стиль делает его намного менее эффективным.

Ответ №1:

Я никогда не мог разобраться с отступом Xcode. Вместо этого я получил отдельный скрипт, который вызывает uncrustify (для ObjC) или indent (для обычного C) для очистки кода перед каждой фиксацией. Таким образом, мой стиль кодирования (естественно, единственный разумный) последовательно (фанатично?) применяется в любое время.

Это также устраняет другие типичные неудобства Xcode, такие как завершающий пробел, который разумный редактор кода удалил бы при экономии времени.

Комментарии:

1. Звучит интересно, я изучу это. Вам нужно активно запускать скрипт, или он может сделать это автоматически за вас по мере ввода? Лично я был бы немного обеспокоен одновременным пакетным изменением сотен файлов, не видя изменений по мере их возникновения. У вас когда-нибудь были какие-либо проблемы с этим?

2. Нет, к сожалению, это только скрипт. Вы создаете довольно обширный конфигурационный файл, определяющий каждый аспект того, как вы предпочитаете форматирование, затем запускаете его. У меня никогда не было с этим никаких проблем. Вероятно, лучше всего запустить его один раз для всех файлов, чтобы все исправить, и зафиксировать это как отдельный коммит «только для переформатирования», затем запускать его перед каждым коммитом, чтобы все было в порядке. В зависимости от вашего VCS вы могли бы запустить его как часть операции фиксации.

3. Вы также можете определить его как макрос в Xcode, чтобы вы могли переформатировать файл (или, возможно, выделенный фрагмент) с помощью горячей клавиши. У меня нет точных сведений для этого под рукой, но я уверен, что у Google есть. 🙂

4. Спасибо за указатель. В какой-то момент я могу рассмотреть это как решение.

Ответ №2:

Насколько я знаю, нет опции по умолчанию, которую вы можете изменить; однако:

Если вы создаете файлы, вы можете редактировать файлы в /Developer/Library/Xcode/Templates соответствии с вашим желаемым стилем кодирования.

Что касается фрагментов в редакторе, которые вставляются, когда вы вводите dealloc самостоятельно, и тому подобного; они, по-видимому, поступают из /Developer/Library/Xcode/PrivatePlugins/IDECodeSnippetLibrary.plugin

Я бы не обязательно рекомендовал редактировать файлы там; но это вариант.

Редактировать: чтобы обновления Xcode не нарушали ваши усовершенствованные шаблоны, вы, вероятно, могли бы chmod -w их использовать, что должно препятствовать тому, чтобы обновления касались их; но это может привести к полному сбою обновлений.

Комментарии:

1. Это удобно знать, спасибо. Я не слишком беспокоюсь о фрагментах кода — когда я ввожу длинное имя метода, такое как - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shoulderRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer , я позволяю ему дополнять имя метода, но я всегда делаю скобки сам. В значительной степени меня беспокоят только шаблоны, поэтому я вполне могу последовать вашему совету и изменить их вручную и надеюсь, что будущие обновления Xcode не испортят мои изменения.

2. Спасибо за это, хотя я мог бы просто создать резервные копии отредактированных шаблонов в папке где-нибудь в стороне. Я бы беспокоился о том, что попаду в ситуацию, из которой не смогу оправиться — я не терминальный гений!

Ответ №3:

Я настроил это репозиторий github для совместного использования файлов исправленных шаблонов, которые устраняют вашу проблему.