Skip to content

Commit 5e9fa0f

Browse files
KarthikNayakttaylorr
authored andcommitted
clang-format: re-adjust line break penalties
In 42efde4 (clang-format: adjust line break penalties, 2017-09-29) we adjusted the line break penalties to really fine tune what we care about while doing line breaks. Modify some of those to be more inline with what we care about in the Git project now. We need to understand that the values set to penalties in '.clang-format' are relative to each other and do not hold any absolute value. The penalty arguments take an 'Unsigned' value, so we have some liberty over the values we can set. First, in that commit, we decided, that under no circumstances do we want to exceed 80 characters. This seems a bit too strict. We do overshoot this limit from time to time to prioritize readability. So let's reduce the value for 'PenaltyExcessCharacter' to 10. This means we that we add a penalty of 10 for each character that exceeds the column limit. By itself this is enough to restrict to column limit. Tuning other penalties in relation to this is what is important. The penalty `PenaltyBreakAssignment` talks about the penalty for breaking an assignment operator on to the next line. In our project, we are okay with this, so giving a value of 5, which is below the value for 'PenaltyExcessCharacter' ensures that in the end, even 1 character over the column limit is not worth keeping an assignment on the same line. Similarly set the penalty for breaking before the first call parameter 'PenaltyBreakBeforeFirstCallParameter' and the penalty for breaking comments 'PenaltyBreakComment' and the penalty for breaking string literals 'PenaltyBreakString' also to 5. Finally, we really care about not breaking the return type into its own line and we really care about not breaking before an open parenthesis. This avoids weird formatting like: static const struct strbuf * a_really_really_large_function_name(struct strbuf resolved, const char *path, int flags) or static const struct strbuf *a_really_really_large_function_name( struct strbuf resolved, const char *path, int flags) to instead have something more readable like: static const struct strbuf *a_really_really_large_function_name(struct strbuf resolved, const char *path, int flags) (note: the tabs here have been replaced by spaces for easier reading) This is done by bumping the values of 'PenaltyReturnTypeOnItsOwnLine' and 'PenaltyBreakOpenParenthesis' to 300. This is so that we can allow a few characters above the 80 column limit to make code more readable. Signed-off-by: Karthik Nayak <[email protected]> Signed-off-by: Taylor Blau <[email protected]>
1 parent ef8ce8f commit 5e9fa0f

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

.clang-format

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -209,13 +209,14 @@ KeepEmptyLinesAtTheStartOfBlocks: false
209209

210210
# Penalties
211211
# This decides what order things should be done if a line is too long
212-
PenaltyBreakAssignment: 10
213-
PenaltyBreakBeforeFirstCallParameter: 30
214-
PenaltyBreakComment: 10
212+
PenaltyBreakAssignment: 5
213+
PenaltyBreakBeforeFirstCallParameter: 5
214+
PenaltyBreakComment: 5
215215
PenaltyBreakFirstLessLess: 0
216-
PenaltyBreakString: 10
217-
PenaltyExcessCharacter: 100
218-
PenaltyReturnTypeOnItsOwnLine: 60
216+
PenaltyBreakOpenParenthesis: 300
217+
PenaltyBreakString: 5
218+
PenaltyExcessCharacter: 10
219+
PenaltyReturnTypeOnItsOwnLine: 300
219220

220221
# Don't sort #include's
221222
SortIncludes: false

0 commit comments

Comments
 (0)