Что делают штрафные санкции в формате clang?

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

34

Решение

Если у вас есть строка, которая превышает предел длины строки, clang-format потребуется вставить один или несколько разрывов где-то. Вы можете думать о наказаниях как о способе препятствовать определенному нарушающему поведение. Например, скажем, у вас есть:

Namespaces::Are::Pervasive::SomeReallyVerySuperDuperLongFunctionName(args);
// and the column limit is here:                                        ^

Clang-формат, вероятно, будет выглядеть немного странно:

Namespaces::Are::Pervasive::SomeReallyVerySuperDuperLongFunctionName(
args);

Вы можете решить, что хотите нарушить длину строки символом или двумя в таких случаях, поэтому вы можете управлять этим, установив PenaltyExcessCharacter на небольшое число и PenaltyBreakBeforeFirstCallParameter на большее число.

Лично мне очень не нравится, когда тип возвращаемого значения находится на отдельной строке, поэтому я установил PenaltyReturnTypeOnItsOwnLine до абсурдно большого числа.

Кроме того, эта система была унаследована от Latex, что позволяет указывать все виды штрафов за перенос строк, разбиение на страницы и переносы.

20

Другие решения

Можете ли вы описать, как использовать эти штрафные величины и какого эффекта они достигают (возможно, на примере)?

Вы можете увидеть пример в этом 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 столбцов / строку, это
что мы делаем, поэтому понизьте штраф за нарушение до первого вызова
параметр, но не так много, как введение новых разрывов строк в
Комментарии.

4

По вопросам рекламы [email protected]