diff options
author | Daniel Jasper <djasper@google.com> | 2013-02-28 11:05:57 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2013-02-28 11:05:57 +0000 |
commit | a4d4621b206f941cc58d9d0bc7c67a8e705c9d49 (patch) | |
tree | 2f2f871f636f3daee81fc92ee550483d7d218f9e | |
parent | b6f02f3bcb5ddcd7c7f1a3571d554fe55c72968f (diff) |
Improve formatting of #defines.
Two improvements:
1) Always leave at least one space before "\". Otherwise is can look bad
and there is a risk of unwillingly joining to characters to a different
token.
2) Use the full column limit for single-line #defines.
Fixes llvm.org/PR15148
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176245 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Format/Format.cpp | 15 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 21 |
2 files changed, 18 insertions, 18 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 18a853f1e4..4aaae844fc 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -273,7 +273,7 @@ public: /// /// \returns The column after the last token in the last line of the /// \c UnwrappedLine. - unsigned format() { + unsigned format(const AnnotatedLine *NextLine) { // Initialize state dependent on indent. LineState State; State.Column = FirstIndent; @@ -295,7 +295,11 @@ public: moveStateToNextToken(State, /*DryRun=*/ false); // If everything fits on a single line, just put it there. - if (Line.Last->TotalLength <= getColumnLimit() - FirstIndent) { + unsigned ColumnLimit = Style.ColumnLimit; + if (NextLine && NextLine->InPPDirective && + !NextLine->First.FormatTok.HasUnescapedNewline) + ColumnLimit = getColumnLimit(); + if (Line.Last->TotalLength <= ColumnLimit - FirstIndent) { while (State.NextToken != NULL) { addTokenToState(false, false, State); } @@ -749,7 +753,7 @@ private: } unsigned getColumnLimit() { - return Style.ColumnLimit - (Line.InPPDirective ? 1 : 0); + return Style.ColumnLimit - (Line.InPPDirective ? 2 : 0); } /// \brief An edge in the solution space from \c Previous->State to \c State, @@ -1112,7 +1116,8 @@ public: UnwrappedLineFormatter Formatter(Style, SourceMgr, TheLine, Indent, TheLine.First, Whitespaces, StructuralError); - PreviousEndOfLineColumn = Formatter.format(); + PreviousEndOfLineColumn = + Formatter.format(I + 1 != E ? &*(I + 1) : NULL); IndentForLevel[TheLine.Level] = LevelIndent; PreviousLineWasTouched = true; } else { @@ -1192,7 +1197,7 @@ private: if (I->Last->Type == TT_LineComment) return; - unsigned Limit = Style.ColumnLimit - (I->InPPDirective ? 1 : 0) - Indent; + unsigned Limit = Style.ColumnLimit - Indent; // If we already exceed the column limit, we set 'Limit' to 0. The different // tryMerge..() functions can then decide whether to still do merging. Limit = I->Last->TotalLength > Limit ? 0 : Limit - I->Last->TotalLength; diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index cc68bcb947..98e035a598 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -857,29 +857,24 @@ TEST_F(FormatTest, EndOfFileEndsPPDirective) { } TEST_F(FormatTest, IndentsPPDirectiveInReducedSpace) { - // If the macro fits in one line, we still do not get the full - // line, as only the next line decides whether we need an escaped newline and - // thus use the last column. - verifyFormat("#define A(B)", getLLVMStyleWithColumns(13)); - - verifyFormat("#define A( \\\n B)", getLLVMStyleWithColumns(12)); - verifyFormat("#define AA(\\\n B)", getLLVMStyleWithColumns(12)); + verifyFormat("#define A(BB)", getLLVMStyleWithColumns(13)); + verifyFormat("#define A( \\\n BB)", getLLVMStyleWithColumns(12)); verifyFormat("#define A( \\\n A, B)", getLLVMStyleWithColumns(12)); + // FIXME: We never break before the macro name. + verifyFormat("#define AA(\\\n B)", getLLVMStyleWithColumns(12)); verifyFormat("#define A A\n#define A A"); verifyFormat("#define A(X) A\n#define A A"); - verifyFormat("#define Something Other", getLLVMStyleWithColumns(24)); - verifyFormat("#define Something \\\n" - " Other", - getLLVMStyleWithColumns(23)); + verifyFormat("#define Something Other", getLLVMStyleWithColumns(23)); + verifyFormat("#define Something \\\n Other", getLLVMStyleWithColumns(22)); } TEST_F(FormatTest, HandlePreprocessorDirectiveContext) { EXPECT_EQ("// some comment\n" "#include \"a.h\"\n" - "#define A(A,\\\n" - " B)\n" + "#define A( \\\n" + " A, B)\n" "#include \"b.h\"\n" "// some comment\n", format(" // some comment\n" |