r183112 - Let clang-format remove empty lines before "}".
Daniel Jasper
djasper at google.com
Mon Jun 3 09:16:42 PDT 2013
Author: djasper
Date: Mon Jun 3 11:16:41 2013
New Revision: 183112
URL: http://llvm.org/viewvc/llvm-project?rev=183112&view=rev
Log:
Let clang-format remove empty lines before "}".
These lines almost never aid readability.
Before:
void f() {
int i; // some variable
}
After:
void f() {
int i; // some variable
}
Modified:
cfe/trunk/lib/Format/Format.cpp
cfe/trunk/lib/Format/TokenAnnotator.cpp
cfe/trunk/unittests/Format/FormatTest.cpp
Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=183112&r1=183111&r2=183112&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Mon Jun 3 11:16:41 2013
@@ -1592,6 +1592,11 @@ private:
bool InPPDirective) {
unsigned Newlines =
std::min(RootToken.NewlinesBefore, Style.MaxEmptyLinesToKeep + 1);
+ // Remove empty lines before "}" where applicable.
+ if (RootToken.is(tok::r_brace) &&
+ (!RootToken.Next ||
+ (RootToken.Next->is(tok::semi) && !RootToken.Next->Next)))
+ Newlines = std::min(Newlines, 1u);
if (Newlines == 0 && !RootToken.IsFirst)
Newlines = 1;
Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=183112&r1=183111&r2=183112&view=diff
==============================================================================
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Mon Jun 3 11:16:41 2013
@@ -54,7 +54,7 @@ private:
tok::question, tok::colon))
return false;
// If a && or || is found and interpreted as a binary operator, this set
- // of angles is like part of something like "a < b && c > d". If the
+ // of angles is likely part of something like "a < b && c > d". If the
// angles are inside an expression, the ||/&& might also be a binary
// operator that was misinterpreted because we are parsing template
// parameters.
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=183112&r1=183111&r2=183112&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Mon Jun 3 11:16:41 2013
@@ -192,6 +192,53 @@ TEST_F(FormatTest, RemovesWhitespaceWhen
format("int a;\n \n\n int b;", 9, 0, getLLVMStyle()));
}
+TEST_F(FormatTest, RemovesEmptyLines) {
+ EXPECT_EQ("class C {\n"
+ " int i;\n"
+ "};",
+ format("class C {\n"
+ " int i;\n"
+ "\n"
+ "};"));
+
+ // Don't remove empty lines in more complex control statements.
+ EXPECT_EQ("void f() {\n"
+ " if (a) {\n"
+ " f();\n"
+ "\n"
+ " } else if (b) {\n"
+ " f();\n"
+ " }\n"
+ "}",
+ format("void f() {\n"
+ " if (a) {\n"
+ " f();\n"
+ "\n"
+ " } else if (b) {\n"
+ " f();\n"
+ "\n"
+ " }\n"
+ "\n"
+ "}"));
+
+ // FIXME: This is slightly inconsistent.
+ EXPECT_EQ("namespace {\n"
+ "int i;\n"
+ "}",
+ format("namespace {\n"
+ "int i;\n"
+ "\n"
+ "}"));
+ EXPECT_EQ("namespace {\n"
+ "int i;\n"
+ "\n"
+ "} // namespace",
+ format("namespace {\n"
+ "int i;\n"
+ "\n"
+ "} // namespace"));
+}
+
TEST_F(FormatTest, ReformatsMovedLines) {
EXPECT_EQ(
"template <typename T> T *getFETokenInfo() const {\n"
More information about the cfe-commits
mailing list