Форматирование кода плохо при использовании VCS?

24

Я почти всегда форматирую свой код перед тем, как сделать коммит, чтобы убедиться, что он сделан правильно. Большинству моей команды это безразлично, и они не всегда правильно форматируют свой код (второстепенные вещи, которые не влияют на код, но влияют на читабельность при его поддержке).

Недавно я установил инструменты питания VS, у которых есть опция «Форматировать при сохранении», и внес изменения в файл, который ранее не форматировался. Вице-президент по разработке только что пришел ко мне и сделал выговор за форматирование, поскольку в инструменте слияния он показывает, что изменился почти весь файл, а не просто строка или две (поэтому он не может точно увидеть, что я легко изменил), и сказал мне отключить формат при сохранении в будущем. Хотя я понимаю эту проблему, мне иногда трудно разобраться в коде, который не отформатирован, и в любом случае IMO должен быть правильно отформатирован все время. Обратите внимание, что я не просто переформатирую вещи по прихоти, но когда я пишу код, я либо использую электроинструмент, либо нажимаю команду клавиши для форматирования текста, чтобы его было легче читать, а в SVN это отображается как модификация.

Поэтому я спрашиваю, всегда ли форматирование кода на самом деле плохо? Являются ли его опасения более обоснованными, чем обеспечение читабельности кода?

Аллан Уайт
источник
8
он прав, так почему бы не заставить всю команду использовать инструмент форматирования при сохранении, тогда вы все получите красиво отформатированный код, который легко читается и легко просматривается с помощью коммитов различий.
gbjbaanb
12
Большинство хороших инструментов сравнения файлов имеют фильтр для «несущественных различий» или «игнорировать пробелы». Некоторые, такие как Beyond Compare, поставляются с готовыми языковыми фильтрами. Используйте это в ваших интересах, если у вас есть.
Майкл К
7
Форматирование кода так же важно, как и внесенные изменения. Читаемость должна быть одним из высших приоритетов, когда вы в команде. Ваш вице-президент должен знать это и беспокоиться об этом.
Эдгар Гонсалес
@ Эдгар: +1. VP слишком требователен. Читаемость в первую очередь ... и опция игнорирования пробелов означает, что это не страшно. И это также означает, что есть большая проблема, потому что остальная команда не заботится. Вице-президент должен быть более обеспокоен этим.
quick_now

Ответы:

41

Прежде всего, ваша команда должна выбрать соглашение о форматировании и придерживаться его. Вам нужно прийти к соглашению и заставить всех придерживаться его, чтобы люди не боролись за то, как все должно выглядеть. Это не должно быть чем-то, что вы делаете самостоятельно.

Что касается вашего реального вопроса. Форматирование кода не плохая вещь. Плохо делать серьезные изменения форматирования в том же коммите, что и изменения кода. Когда ваша команда придет к общему мнению о том, как все должно быть отформатировано, сделайте один проход через код и отформатируйте все. Проверьте это само по себе. Сообщение фиксации прояснит, что изменения являются просто пробелами и не работают. Затем, когда вам нужно внести функциональные изменения, они находятся в другом коммите, чтобы их было ясно видно.

unholysampler
источник
Это все равно не поможет, если вы хотите сравнить изменения от нескольких ревизий назад, но это лучше, чем изменение кода + изменение формата за один раз. Конечно, этот ответ также относится к рефакторингу.
gbjbaanb
1
+1: в дополнение к этому, хорошо использовать что-то вроде Stylecop или другой инструмент, который автоматически форматирует и применяет стиль. Затем синхронизируйте настройки между всеми членами команды, чтобы форматирование было одинаковым для всех, и вам не обязательно помнить, что такое «правильное» правило форматирования.
Райан Хейс
3
Если ОП получил выговор за попытку отформатировать один документ, что-то подсказывает мне, что он не сможет предложить использовать StyleCop.
Уэйн Молина
3
@gbjbaanb: Да. Вот почему лучше всего принимать такие решения с самого начала. В проекте, в котором я сейчас работаю, параметры форматирования Eclipse включены в репозиторий, поэтому мы знаем, что у всех одинаковые настройки.
unholysampler
1
@quickly_now: Вот почему у нас есть менеджеры с правом вето. Если люди не могут согласиться, они могут принять решение.
unholysampler
29

Нет, форматирование кода очень важно . Тем не менее, коммиты должны быть сделаны в двух группах:

  1. Косметические изменения - все, что делает код более читабельным.
  2. Другие изменения - все остальное, что влияет на код.

Используйте сообщение фиксации, чтобы указать, что были изменены только косметические средства. Их можно легко пропустить при поиске более существенных модификаций.

JK
источник
3
Кроме того, хорошей практикой является принятие решения об определенном соглашении о форматировании между вашей командой. Не просто форматируйте код от других людей, не обсудив это в первую очередь.
Стивен Джеурис
Да ... Но вы знаете, иногда бывает так заманчиво отформатировать этот чертов бардак "пока вы на нем". Кроме того, попытка отделить косметические изменения от функциональных изменений может быть болезненной, если вы используете VS, и он автоматически что-то форматирует. О, и никто не скажет, что вы делаете какое-то глупое форматирование, когда у вас есть очень важные задачи, которые вы просматриваете в истории
коммитов
10

У вас обоих есть смысл, но вы можете получить то, что хотите. Сначала отформатируйте код, отметьте только это изменение. Затем внесите свои функциональные изменения и проверьте это в качестве второго шага.

PeterAllenWebb
источник
3
Я думаю, что это лучшее решение для вашей текущей ситуации, но вы должны поговорить об этом со своей командой. Тем не менее, у вас есть большая проблема, которая заключается в отсутствии стандарта кодирования.
Томас Оуэнс
2
Согласовано. Интересно, является ли окружение ОП одним из тех ковбойских мест, где стандарты избегают "быстрого решения проблем".
Уэйн Молина
4

Я тоже форматирующий нит-сборщик, так что вот несколько советов:

  • Обязательный первый шаг: попросите команду согласовать некоторые базовые стандарты форматирования, такие как табуляция и пробелы, позиции фигурных скобок, стили комментариев и т. Д. Теперь ваши изменения форматирования не станут полной неожиданностью для всех, и вы не сделаете шаг на любых пальцах.

  • Очистите форматирование только вокруг кода, который вы меняете. Если вы вносите изменения только в одну функцию, то очистите эту функцию. По крайней мере, со временем у вас будет более красивый код.

  • Выполните основные изменения форматирования как отдельную фиксацию, без каких-либо других изменений кода. Это следует делать только в том случае, если вы с меньшей вероятностью захотите сравнить код после изменения с изменением до изменения, так как сравнение по разным подобным может раздражать. Я обычно выполняю очистку в первую очередь перед серьезной разработкой этого кода.

  • Получите хороший инструмент сравнения, который может сделать зависящую от языка маркировку существенных изменений и незначительных изменений. Мой любимый diff Beyond Compare отмечает реальные изменения кода в одном цвете, а пробелы / комментарии - только различия в другом.

отредактируйте еще один совет:

  • Он варьируется от языка к языку, но для действительно косметических изменений в коде вы должны иметь возможность сравнивать скомпилированные двоичные файлы до и после основной очистки, чтобы быть абсолютно уверенным, что вы не испортили его.
Джон
источник
Пока вы не включаете теги VC в двоичный файл (или информацию о сборке).
Ватин
2

Вы не должны переформатировать и вносить изменения в код других людей, если:

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

Вы заметите, что во всех случаях я имею в виду стандарты командного кодирования. Я твердо верю в разумные, согласованные стандарты кодирования для команды. Если они у вас есть, то первоначальный разработчик должен вернуться и очистить свой код, чтобы придерживаться стандартов команды, вы не должны делать это за их спиной. Если у вас нет стандартов (и вы должны это делать), то вам не следует изменять код другого члена команды, чтобы придерживаться своей философии, особенно за его спиной. Помните, что вы являетесь частью команды, и хотя стандарты кодирования важны, равно как и доверие и уважение между членами команды.

cdkMoose
источник
«За их спиной»: это восходит к психологическим проблемам владения кодом (или развития дерновой войны).
Руонг
2
«Код других людей» - интересный способ сказать это. Я работаю над продуктом своей компании, скомпилированным из кода, которым владеет моя компания, над которым работают члены моей команды и я. Это не за их спиной никоим образом не исправить это при работе со стандартами. Тем не менее, я согласен с тем, что идеальное решение состоит в том, чтобы заставить первоначального разработчика привести его в соответствие со стандартом.
Калеб Хуитт - cjhuitt
@Caleb: становится трудно, если они просто отказываются.
quick_now
Под «чужим кодом» я не подразумеваю права собственности, я имею в виду то, что они написали, и считаю, что они по-прежнему несут ответственность за поддержку. В отсутствие стандартов кодирования, если я реализую класс с 1000 строками кода, а вы внесете изменения в 2 строки, чтобы исправить некоторое поведение и переформатировать весь файл, я буду очень удивлен, когда открою файл. Как члены команды, мы не должны делать это друг с другом. Если вы зарегистрируете этот файл с полным переформатированием и даже не дадите мне знать, это не очень дружелюбно для команды.
cdkMoose
В оригинальном обсуждении OP я читал, что это среда, в которой нет стандартов кодирования (или недостаточно хорошо соблюдаются), поэтому я ответил так. В этой среде один разработчик не должен навязывать свои стандарты другим.
cdkMoose