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