Подтвердить что ты не робот

Что такое штрафные санкции?

документация по файлам sytle формата clang содержит ряд опций, называемых PenaltyXXX. Документация не объясняет, как эти штрафы следует использовать. Можете ли вы описать, как использовать эти штрафные значения и какой эффект они могут достичь (возможно, на примере)?

4b9b3361

Ответ 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

Чтобы проиллюстрировать эти значения:

clang-format: отрегулируйте штрафные прерывания

Мы действительно очень хотим ограничить столбцы до 80 на строку: One из нескольких последовательных комментариев стиля в списке рассылки Git заключается в том, что строки должны иметь не более 80 столбцов/строк (даже если 79 столбцов/строк будет иметь больше смысла, учитывая, что код часто рассматривается как diff, и отличается добавлением дополнительного символа).

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

(Смотрите эту тему)

Из существующих примеров и документации в стиле clang появляется что 100 - это штраф, который считается подходящим для Stuff You Really Don't Want, поэтому позвольте назначить его как штраф за "лишние символы", т.е. слишком длинные строки.

В то время как при этом корректируйте штрафы дальше: мы на самом деле не так увлечены о предотвращении новых разрывов строк в комментариях или строковых литералах, поэтому штраф в 100 кажется ужасно высоким.

Точно так же мы не все, что непреклонено, из операторов присваивания (много кодов Git разрывается сразу после символ =, чтобы сохранить это 80 столбцов/лимит).

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

Наконец, мы не особенно задумываемся о нарушении перед первым параметром в вызове, но если он держит линию короче 80 столбцов/строк, это что мы делаем, поэтому снижаем штраф за нарушение перед первым вызовом параметр, но не так сильно, как введение новых разрывов строк в комментарии.