forked from OSchip/llvm-project
clang-format: Allow customizing the penalty for breaking assignment
Summary: Add option to customize the penalty for breaking assignment This allows increasing the priority of the assignment, to prefer spliting an operation instead of splitting the assignment, e.g. : int a = bbbbbbbbbbbbbbbb + cccccccccccccccc; Reviewers: krasimir, djasper Reviewed By: djasper Subscribers: cfe-commits, klimek Differential Revision: https://reviews.llvm.org/D32477 llvm-svn: 303534
This commit is contained in:
parent
89d733a505
commit
9976efa8ff
|
@ -1133,6 +1133,9 @@ struct FormatStyle {
|
|||
/// ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
|
||||
bool ObjCSpaceBeforeProtocolList;
|
||||
|
||||
/// \brief The penalty for breaking around an assignment operator.
|
||||
unsigned PenaltyBreakAssignment;
|
||||
|
||||
/// \brief The penalty for breaking a function call after ``call(``.
|
||||
unsigned PenaltyBreakBeforeFirstCallParameter;
|
||||
|
||||
|
@ -1420,6 +1423,8 @@ struct FormatStyle {
|
|||
ObjCBlockIndentWidth == R.ObjCBlockIndentWidth &&
|
||||
ObjCSpaceAfterProperty == R.ObjCSpaceAfterProperty &&
|
||||
ObjCSpaceBeforeProtocolList == R.ObjCSpaceBeforeProtocolList &&
|
||||
PenaltyBreakAssignment ==
|
||||
R.PenaltyBreakAssignment &&
|
||||
PenaltyBreakBeforeFirstCallParameter ==
|
||||
R.PenaltyBreakBeforeFirstCallParameter &&
|
||||
PenaltyBreakComment == R.PenaltyBreakComment &&
|
||||
|
|
|
@ -343,6 +343,8 @@ template <> struct MappingTraits<FormatStyle> {
|
|||
IO.mapOptional("ObjCSpaceAfterProperty", Style.ObjCSpaceAfterProperty);
|
||||
IO.mapOptional("ObjCSpaceBeforeProtocolList",
|
||||
Style.ObjCSpaceBeforeProtocolList);
|
||||
IO.mapOptional("PenaltyBreakAssignment",
|
||||
Style.PenaltyBreakAssignment);
|
||||
IO.mapOptional("PenaltyBreakBeforeFirstCallParameter",
|
||||
Style.PenaltyBreakBeforeFirstCallParameter);
|
||||
IO.mapOptional("PenaltyBreakComment", Style.PenaltyBreakComment);
|
||||
|
@ -582,6 +584,7 @@ FormatStyle getLLVMStyle() {
|
|||
LLVMStyle.SpaceBeforeAssignmentOperators = true;
|
||||
LLVMStyle.SpacesInAngles = false;
|
||||
|
||||
LLVMStyle.PenaltyBreakAssignment = prec::Assignment;
|
||||
LLVMStyle.PenaltyBreakComment = 300;
|
||||
LLVMStyle.PenaltyBreakFirstLessLess = 120;
|
||||
LLVMStyle.PenaltyBreakString = 1000;
|
||||
|
|
|
@ -2093,9 +2093,10 @@ unsigned TokenAnnotator::splitPenalty(const AnnotatedLine &Line,
|
|||
if (Left.is(TT_ConditionalExpr))
|
||||
return prec::Conditional;
|
||||
prec::Level Level = Left.getPrecedence();
|
||||
if (Level != prec::Unknown)
|
||||
return Level;
|
||||
Level = Right.getPrecedence();
|
||||
if (Level == prec::Unknown)
|
||||
Level = Right.getPrecedence();
|
||||
if (Level == prec::Assignment)
|
||||
return Style.PenaltyBreakAssignment;
|
||||
if (Level != prec::Unknown)
|
||||
return Level;
|
||||
|
||||
|
|
|
@ -3457,6 +3457,18 @@ TEST_F(FormatTest, BreaksAfterAssignments) {
|
|||
" 1;");
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, ConfigurableBreakAssignmentPenalty) {
|
||||
FormatStyle Style = getLLVMStyle();
|
||||
verifyFormat("int aaaaaaaaaaaaaaaaaaaaaaaaaa =\n"
|
||||
" bbbbbbbbbbbbbbbbbbbbbbbbbb + cccccccccccccccccccccccccc;",
|
||||
Style);
|
||||
|
||||
Style.PenaltyBreakAssignment = 20;
|
||||
verifyFormat("int aaaaaaaaaaaaaaaaaaaaaaaaaa = bbbbbbbbbbbbbbbbbbbbbbbbbb +\n"
|
||||
" cccccccccccccccccccccccccc;",
|
||||
Style);
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, AlignsAfterAssignments) {
|
||||
verifyFormat(
|
||||
"int Result = aaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaa +\n"
|
||||
|
@ -8802,6 +8814,8 @@ TEST_F(FormatTest, ParsesConfiguration) {
|
|||
CHECK_PARSE("ObjCBlockIndentWidth: 1234", ObjCBlockIndentWidth, 1234u);
|
||||
CHECK_PARSE("ColumnLimit: 1234", ColumnLimit, 1234u);
|
||||
CHECK_PARSE("MaxEmptyLinesToKeep: 1234", MaxEmptyLinesToKeep, 1234u);
|
||||
CHECK_PARSE("PenaltyBreakAssignment: 1234",
|
||||
PenaltyBreakAssignment, 1234u);
|
||||
CHECK_PARSE("PenaltyBreakBeforeFirstCallParameter: 1234",
|
||||
PenaltyBreakBeforeFirstCallParameter, 1234u);
|
||||
CHECK_PARSE("PenaltyExcessCharacter: 1234", PenaltyExcessCharacter, 1234u);
|
||||
|
|
Loading…
Reference in New Issue