diff options
author | Daniel Jasper <djasper@google.com> | 2014-01-09 13:42:56 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2014-01-09 13:42:56 +0000 |
commit | 3a93edef5bd0f5adfdd81cd458b88cb9f84690b4 (patch) | |
tree | 7154f307233f9543dafe36fa3445a8103510d049 /lib/Format/FormatToken.cpp | |
parent | 3e2101f5a61e4d05480e2a164296081d01be38c2 (diff) |
clang-format: Some tweaks to braces list formatting:
- Format a braced list with one element per line if it has nested
braced lists.
- Use a column layout only when the list has 6+ elements (instead of the
current 4+ elements).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198869 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Format/FormatToken.cpp')
-rw-r--r-- | lib/Format/FormatToken.cpp | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/lib/Format/FormatToken.cpp b/lib/Format/FormatToken.cpp index 16600f24ee..0816668b57 100644 --- a/lib/Format/FormatToken.cpp +++ b/lib/Format/FormatToken.cpp @@ -26,11 +26,10 @@ TokenRole::~TokenRole() {} void TokenRole::precomputeFormattingInfos(const FormatToken *Token) {} -unsigned CommaSeparatedList::format(LineState &State, - ContinuationIndenter *Indenter, - bool DryRun) { - if (!State.NextToken->Previous || !State.NextToken->Previous->Previous || - Commas.size() <= 2) +unsigned CommaSeparatedList::formatAfterToken(LineState &State, + ContinuationIndenter *Indenter, + bool DryRun) { + if (!State.NextToken->Previous || !State.NextToken->Previous->Previous) return 0; // Ensure that we start on the opening brace. @@ -82,6 +81,14 @@ unsigned CommaSeparatedList::format(LineState &State, return Penalty; } +unsigned CommaSeparatedList::formatFromToken(LineState &State, + ContinuationIndenter *Indenter, + bool DryRun) { + if (HasNestedBracedList) + State.Stack.back().AvoidBinPacking = true; + return 0; +} + // Returns the lengths in code points between Begin and End (both included), // assuming that the entire sequence is put on a single line. static unsigned CodePointsBetween(const FormatToken *Begin, @@ -92,8 +99,7 @@ static unsigned CodePointsBetween(const FormatToken *Begin, void CommaSeparatedList::precomputeFormattingInfos(const FormatToken *Token) { // FIXME: At some point we might want to do this for other lists, too. - if (!Token->MatchingParen || Token->isNot(tok::l_brace) || - Token->NestingLevel != 0) + if (!Token->MatchingParen || Token->isNot(tok::l_brace)) return; FormatToken *ItemBegin = Token->Next; @@ -103,7 +109,6 @@ void CommaSeparatedList::precomputeFormattingInfos(const FormatToken *Token) { // trailing comments which are otherwise ignored for column alignment. SmallVector<unsigned, 8> EndOfLineItemLength; - bool HasNestedBracedList = false; for (unsigned i = 0, e = Commas.size() + 1; i != e; ++i) { // Skip comments on their own line. while (ItemBegin->HasUnescapedNewline && ItemBegin->isTrailingComment()) @@ -143,6 +148,13 @@ void CommaSeparatedList::precomputeFormattingInfos(const FormatToken *Token) { ItemBegin = ItemEnd->Next; } + // If this doesn't have a nested list, we require at least 6 elements in order + // create a column layout. If it has a nested list, column layout ensures one + // list element per line. + if (HasNestedBracedList || Commas.size() < 5 || + Token->NestingLevel != 0) + return; + // We can never place more than ColumnLimit / 3 items in a row (because of the // spaces and the comma). for (unsigned Columns = 1; Columns <= Style.ColumnLimit / 3; ++Columns) { @@ -179,11 +191,6 @@ void CommaSeparatedList::precomputeFormattingInfos(const FormatToken *Token) { if (Format.TotalWidth > Style.ColumnLimit) continue; - // If this braced list has nested braced list, we format it either with one - // element per line or with all elements on one line. - if (HasNestedBracedList && Columns > 1 && Format.LineCount > 1) - continue; - Formats.push_back(Format); } } |