Одна из особенностей языка Go, которая мне очень нравится – стандартизация практические всего и вся с предоставлением инструментов для валидации и максимальной автоматизации применения. Так все программы на Go выглядят более-менее одинаково как за счет единого стандарта к разработке (да,я не люблю кучу соплей с проверкой результатов возврата, но тем не менее это единообразие) так и за счет единого форматирования. Благодаря этому не приходится испытывать какого-то серьезного дискомфорта разбирая новый кусок кода – каким бы (не)качественным он ни был, выглядеть и как следствие восприниматься он будет как родной. Кроме того, основная масса редакторов Go поддерживает переформатирование текста при сохранении, так как за формат отвечает косольное приложение, то появляется возможность поставить триггеры в VCS и отклонять не удовлетворяющие условиям коммиты. С одной стороны, все это может казаться мелочами. Но только до тех пор, пока ты не работаешь в довольно сильно распределенной команде с крайне разными уровнями у разработчиков.
Если же говорить про C++, то чуть ли не каждый редактор умеет форматировать по своему, в соответствии с видением прекрасного у автора. Задать какой-то единообразный стиль для всей команды за пределами “пробелы VS табуляции” является довольно сложной задачей порождающей практически в каждой уважаемой себя компании 20-30 страничные “соглашения по написанию кода”, которым, с одной стороны, мало кто следует, а с другой стороны они являются отличной возможностью развести срач в ревью требуя переставить запятую по стандарту.
Я, конечно, тоже тормоз, и открыл для себя такую восхитительную утилиту как clang-format совсем недавно, но она реально меняет жизнь С++ разработчики к лучшему и улучшает качество проектов. Основное отличие от множества подобных инструментов в уникальной комбинации возможностей, таких как отсутствие ошибок разбора кода в процессе форматирования, довольно широкие возможности настройки форматирования (тем не менее слабее чем во встроенном в Emacs форматтере), работа на всех платформах, возможность запустить из командной строки и как следствие наличие интеграции практически во все редакторы.
К своей конфигурации VIM я его добавил очень просто:
autocmd FileType c,cpp,objc vnoremap <buffer><Leader>C :ClangFormat<CR>
let g:clang_format#style_options = {
\ "AlignConsecutiveAssignments" : "true",
\ "AlignConsecutiveDeclarations" : "true",a
\ "AllowShortBlocksOnASingleLine" : "false",
\ "AllowShortLoopsOnASingleLine" : "true",
\ "AllowShortIfStatementsOnASingleLine" : "true",
\ "AllowShortFunctionsOnASingleLine" : "All",
\ "AllowShortCaseLabelsOnASingleLine" : "true",
\ "SpaceBeforeParens" : "Never",
\ "SpacesInParentheses" : "true",
\ "UseTab" : "Never",
\ "AccessModifierOffset" : -4,
\ "AlwaysBreakTemplateDeclarations" : "true",
\ "Standard" : "C++11",
\ "BreakConstructorInitializersBeforeComma" : "true",
\ "BreakBeforeBraces" : "Allman"}
Но это мои личные предпочтения форматирования, так как никакого талмуда по правилам форматирования в нашей команде внезапно нет. Для командной разработки потребовалось бы чуть больше действий – добавить общий для всех конфигурационный файл.
Приверженцы Visual Studio / CLion не забыты и для них так же имеются плагины. Очень рекомендую даже для домашних проектов”