документация по файлам sytle формата clang содержит ряд опций, называемых PenaltyXXX. Документация не объясняет, как эти штрафы следует использовать. Можете ли вы описать, как использовать эти штрафные значения и какой эффект они могут достичь (возможно, на примере)?
Что такое штрафные санкции?
Ответ 1
Если у вас есть строка, которая над пределом длины строки, clang-format нужно будет вставить один или несколько разрывов где-нибудь. Вы можете думать о штрафах как способе обескураживать определенное поведение, нарушающее правила. Например, скажем, что у вас есть:
Namespaces::Are::Pervasive::SomeReallyVerySuperDuperLongFunctionName(args);
// and the column limit is here: ^
Формат Clang, вероятно, будет выглядеть так странно:
Namespaces::Are::Pervasive::SomeReallyVerySuperDuperLongFunctionName(
args);
Вы можете решить, что вы готовы нарушить длину строки символом или двумя для таких случаев, так что вы можете управлять этим, установив PenaltyExcessCharacter
на низкое число и PenaltyBreakBeforeFirstCallParameter
на большее число.
Лично мне очень не нравится, когда тип возврата находится в отдельной строке, поэтому я устанавливаю PenaltyReturnTypeOnItsOwnLine
на абсурдно большое число.
В стороне, эта система была унаследована от Latex, что позволяет вам указывать все виды штрафов за разрывы строк, разбиение на страницы и переносы.
Ответ 2
Можете ли вы описать, как использовать эти штрафные значения и какой эффект они могут достичь (возможно, на примере)?
Вы можете увидеть пример в этом Git 2.15 (Q4 2017) clang-format
для проекта Git, написанного на C
См. commit 42efde4 (29 сентября 2017 г.) Йоханнес Шинделин (dscho
).
(слияние Йоханнес Шинделин - dscho
- в commit 42efde4, 01 октября 2017 г.
Здесь вы можете увидеть старые и новые значения:
Чтобы проиллюстрировать эти значения:
clang-format
: отрегулируйте штрафные прерыванияМы действительно очень хотим ограничить столбцы до 80 на строку: One из нескольких последовательных комментариев стиля в списке рассылки Git заключается в том, что строки должны иметь не более 80 столбцов/строк (даже если 79 столбцов/строк будет иметь больше смысла, учитывая, что код часто рассматривается как diff, и отличается добавлением дополнительного символа).
Штраф за 5 для лишних персонажей слишком низок, чтобы гарантировать, что, хотя, как отметил Брэндон Уильямс.
Из существующих примеров и документации в стиле clang появляется что 100 - это штраф, который считается подходящим для
Stuff You Really Don't Want
, поэтому позвольте назначить его как штраф за "лишние символы", т.е. слишком длинные строки.В то время как при этом корректируйте штрафы дальше: мы на самом деле не так увлечены о предотвращении новых разрывов строк в комментариях или строковых литералах, поэтому штраф в 100 кажется ужасно высоким.
Точно так же мы не все, что непреклонено, из операторов присваивания (много кодов Git разрывается сразу после символ
=
, чтобы сохранить это 80 столбцов/лимит).Мы немного нахмурились о том, что возвращаемые типы функций находятся на их собственная линия, чем штраф 0, предположил бы, поэтому это было скорректировано, тоже.
Наконец, мы не особенно задумываемся о нарушении перед первым параметром в вызове, но если он держит линию короче 80 столбцов/строк, это что мы делаем, поэтому снижаем штраф за нарушение перед первым вызовом параметр, но не так сильно, как введение новых разрывов строк в комментарии.