Pull to refresh

Пора завязывать

Reading time 4 min
Views 2.6K
EXPANDTAB!!!Может быть, стоило написать в «Я негодую». Не знаю. Пока писал, расколотил чашку с чаем и таким образом достиг хладнокровия.

Я про вот что: раз и два.

Есть же множество прекрасных тем для холиваров: Windows или Linux, IE или FF, Canon и Nikon, Intel и AMD, «на Украине» или «в Украине». Чужой или Хищник, наконец!

Так нет же, зацепились на ровном месте: пробелы и табуляции.



Не буду делать вид, что проблемы не существует. Проблема еще какая. Если в коде использованы не те символы, рвется индентация, странным образом скачет курсор, появляются развесистые глупые диффы и увеличивается систолический объем сердца. Что-то надо делать.

Конфликты

Я не про конфликты слияния (хотя они тоже есть), а про конфликты между сотрудниками.

Ладно бы только табуляции. Есть, скажем, такой спецэффект в vim'е: если между двумя строками с отступом затесалась одна совсем пустая строка (то есть в файле на ее месте два \n подряд), то vim не сохранял позицию курсора при перемещении вниз-вверх.

И ты теперь жалуешься мне, что я закоммитил пустые строки. Настолько пустые, что даже без пробелов. Тебе это жмёт, а виноват я.

Когда я писал в vim, это было моей проблемой. Кажется, она даже как-то решалась.

Теперь в vim пишешь ты (а я в Komodo Edit), но почему-то это осталось моей проблемой. Почему? Потому что vim православнее? Вот не надо. В конце концов, я старше и у меня ноги грязнее. У нас субординация и выслуга лет.

Куды бечь?

Давай не будем друг друга в чем-то убеждать. У тебя свои пробелы, у меня свои. Не станем их навязывать. Каждый остается при своем, а чтобы оставаться было удобней, умные люди придумали обрабатывающие скрипты (hooks) на события в системах контроля версий.

Sapienti sat.

Вы, в конце концов, программисты или где? Что за нытье? Не вы ли разбирали в трудах классиков волшебную формулу — как посчитать число табуляций по позиции в строке?

Так, теперь при собеседовании на работу будет обязательное задание — написать фильтр, превращающий любой текстовый файл в излюбленную кандидатом комбинацию пробельных символов для отступов. Не справился за 20 минут? Вон из профессии.

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

Что дальше?

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

Вообще, у нас где-то валялся стайл-гайд. Мы три страницы скопипастили и своих два абзаца добавили; потом задолбались и то, что получилось, запихали в корпоративную вики. Тычем туда носом новичков. Когда сам заглядывал? Ну… в прошлом году, кажется, смотрел. Да, в прошлом году, точно. В январе. Там хорошо написано о том, как важны комментарии и когда применять в идентификаторах num, а когда count.

Да, стайл-гайд соблюдать полезно. Но иногда лениво.

Так в чем проблема? Быстренько гуглим: %твой_любимый язык% tidy. Скачиваем, ставим, прогоняем код через него и радуемся жизни.

Что-о-о? Для %твой_любимый язык% ничего нет? И ты еще спрашиваешь, чем таким гениальным осчастливить open source сообщество в свободный вечер?

Бери и пиши. За пример можешь взять perltidy, он, пожалуй, самый мощный. В нем стопиццот ручек и кнопок; я уверен, даже автор их все не знает. А с выравниванием, которое alignment, как он управляется — это просто волшебство какое-то.

Ответ на главный вопрос

Решаем у себя раз и навсегда. Решаем, например, так:
  • код в репозитории хранится с отступами, кратными 4 пробелам
  • каждые 8 пробелов обязательно заменяются символом табуляции ASCII 0x09
  • новая строка определяется символом ASCII 0x0A (LF)
  • между несколькими символами LF никаких других пробельных символов не допускается
  • завершающих пробельных символов в строках быть не должно
  • файл обязательно завершается одним и только одним LF
С этим всё. Это делается парой-тройкой простейших регулярок.

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

Третье. Никакие жалобы вида «я привык так», «мне надо вот этак», «у меня редактор NoteWordMega+++ не понимает ваших табов», «этот его долбанный NoteWordMega+++ понапихал в код свистелок и перделок» отныне и навеки веков не принимаются. Жалобщик будет наказан тремя днями рефакторинга кода, написанного на Whitespace и распечатанного на туалетной бумаге. После чего садится настраивать хуки на своей стороне. Теперь совсем всё.

Незамедлительно по офису распространяется благодать и цвет лица разработчиков улучшается на 18%.

Официально заявляю

Если вдруг я приду к вам на работу, или вы придете ко мне на работу, и попробуете что-то предъявить насчет пробелов и табуляций — я порву на себе майку, заору страшным голосом и откушу вам голову. Ну ладно, ладно, я забьюсь в угол, заплачу и буду звать маму.

Договорились?



1. Поскольку животное в начале топика, взятое мною на Flickr, было лицензировано под CC BY-SA, указываю автора фотографии: Johnathan Nightingale.

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

3. В первой версии поста количество матюков достигало трех штук на предложение. Скрепя сердце, матюки повыбрасывал. А то программист нынче пошел нежный, от табуляций и пробелов бледнеет и чахнет, куда ему крепкую лексику. Тут смайл.


Tags:
Hubs:
+143
Comments 96
Comments Comments 96

Articles