diff options
author | Daniel Jasper <djasper@google.com> | 2015-03-09 08:13:55 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2015-03-09 08:13:55 +0000 |
commit | ac5c97e36b589926d6883cf4a246ec2ba94d35ee (patch) | |
tree | 0c2f55a3ca16eb6fd46d17875028a6222165e3a4 /clang | |
parent | 65b07b8e1b73816dc7f339e2c461f1bc72443319 (diff) | |
download | bcm5719-llvm-ac5c97e36b589926d6883cf4a246ec2ba94d35ee.tar.gz bcm5719-llvm-ac5c97e36b589926d6883cf4a246ec2ba94d35ee.zip |
clang-format: Don't remove newline if macro ends in access specifier.
I.e.:
#define A public:
// The new line before this line would be removed.
int a;
llvm-svn: 231636
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Format/UnwrappedLineFormatter.cpp | 3 | ||||
-rw-r--r-- | clang/unittests/Format/FormatTest.cpp | 24 |
2 files changed, 26 insertions, 1 deletions
diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp index 8e6809f7608..71e8b3fd6b0 100644 --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -512,7 +512,8 @@ void UnwrappedLineFormatter::formatFirstToken(FormatToken &RootToken, ++Newlines; // Remove empty lines after access specifiers. - if (PreviousLine && PreviousLine->First->isAccessSpecifier()) + if (PreviousLine && PreviousLine->First->isAccessSpecifier() && + (!PreviousLine->InPPDirective || !RootToken.HasUnescapedNewline)) Newlines = std::min(1u, Newlines); Whitespaces->replaceWhitespace(RootToken, Newlines, IndentLevel, Indent, diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index fcfe9778f3c..7221ec898aa 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -1930,6 +1930,30 @@ TEST_F(FormatTest, SeparatesLogicalBlocks) { "\n" " void f();\n" "};")); + + // Even ensure proper spacing inside macros. + EXPECT_EQ("#define B \\\n" + " class A { \\\n" + " protected: \\\n" + " public: \\\n" + " void f(); \\\n" + " };", + format("#define B \\\n" + " class A { \\\n" + " protected: \\\n" + " \\\n" + " public: \\\n" + " \\\n" + " void f(); \\\n" + " };", + getGoogleStyle())); + // But don't remove empty lines after macros ending in access specifiers. + EXPECT_EQ("#define A private:\n" + "\n" + "int i;", + format("#define A private:\n" + "\n" + "int i;")); } TEST_F(FormatTest, FormatsClasses) { |