[PATCH] D37845: [clang-format] New flag - BraceWrapping.AfterExternBlock

2017-09-15 Thread Krasimir Georgiev via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL313354: [clang-format] New flag - 
BraceWrapping.AfterExternBlock (authored by krasimir).

Changed prior to commit:
  https://reviews.llvm.org/D37845?vs=115240=115394#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D37845

Files:
  cfe/trunk/docs/ClangFormatStyleOptions.rst
  cfe/trunk/include/clang/Format/Format.h
  cfe/trunk/lib/Format/Format.cpp
  cfe/trunk/lib/Format/UnwrappedLineFormatter.cpp
  cfe/trunk/lib/Format/UnwrappedLineParser.cpp
  cfe/trunk/unittests/Format/FormatTest.cpp

Index: cfe/trunk/docs/ClangFormatStyleOptions.rst
===
--- cfe/trunk/docs/ClangFormatStyleOptions.rst
+++ cfe/trunk/docs/ClangFormatStyleOptions.rst
@@ -661,6 +661,21 @@
 int x;
   }
 
+  * ``bool AfterExternBlock`` Wrap extern blocks.
+
+.. code-block:: c++
+
+  true:
+  extern "C"
+  {
+int foo();
+  }
+
+  false:
+  extern "C" {
+  int foo();
+  }
+
   * ``bool BeforeCatch`` Wrap before ``catch``.
 
 .. code-block:: c++
Index: cfe/trunk/include/clang/Format/Format.h
===
--- cfe/trunk/include/clang/Format/Format.h
+++ cfe/trunk/include/clang/Format/Format.h
@@ -681,6 +681,20 @@
 ///   }
 /// \endcode
 bool AfterUnion;
+/// \brief Wrap extern blocks.
+/// \code
+///   true:
+///   extern "C"
+///   {
+/// int foo();
+///   }
+///
+///   false:
+///   extern "C" {
+///   int foo();
+///   }
+/// \endcode
+bool AfterExternBlock;
 /// \brief Wrap before ``catch``.
 /// \code
 ///   true:
Index: cfe/trunk/lib/Format/UnwrappedLineFormatter.cpp
===
--- cfe/trunk/lib/Format/UnwrappedLineFormatter.cpp
+++ cfe/trunk/lib/Format/UnwrappedLineFormatter.cpp
@@ -233,9 +233,10 @@
   if (Tok && Tok->is(tok::kw_typedef))
 Tok = Tok->getNextNonComment();
   if (Tok && Tok->isOneOf(tok::kw_class, tok::kw_struct, tok::kw_union,
-  Keywords.kw_interface))
+  tok::kw_extern, Keywords.kw_interface))
 return !Style.BraceWrapping.SplitEmptyRecord && EmptyBlock
-? tryMergeSimpleBlock(I, E, Limit) : 0;
+   ? tryMergeSimpleBlock(I, E, Limit)
+   : 0;
 }
 
 // FIXME: TheLine->Level != 0 might or might not be the right check to do.
Index: cfe/trunk/lib/Format/UnwrappedLineParser.cpp
===
--- cfe/trunk/lib/Format/UnwrappedLineParser.cpp
+++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp
@@ -1039,7 +1039,12 @@
 if (FormatTok->Tok.is(tok::string_literal)) {
   nextToken();
   if (FormatTok->Tok.is(tok::l_brace)) {
-parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false);
+if (Style.BraceWrapping.AfterExternBlock) {
+  addUnwrappedLine();
+  parseBlock(/*MustBeDeclaration=*/true);
+} else {
+  parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false);
+}
 addUnwrappedLine();
 return;
   }
Index: cfe/trunk/lib/Format/Format.cpp
===
--- cfe/trunk/lib/Format/Format.cpp
+++ cfe/trunk/lib/Format/Format.cpp
@@ -420,6 +420,7 @@
 IO.mapOptional("AfterObjCDeclaration", Wrapping.AfterObjCDeclaration);
 IO.mapOptional("AfterStruct", Wrapping.AfterStruct);
 IO.mapOptional("AfterUnion", Wrapping.AfterUnion);
+IO.mapOptional("AfterExternBlock", Wrapping.AfterExternBlock);
 IO.mapOptional("BeforeCatch", Wrapping.BeforeCatch);
 IO.mapOptional("BeforeElse", Wrapping.BeforeElse);
 IO.mapOptional("IndentBraces", Wrapping.IndentBraces);
@@ -500,9 +501,9 @@
   if (Style.BreakBeforeBraces == FormatStyle::BS_Custom)
 return Style;
   FormatStyle Expanded = Style;
-  Expanded.BraceWrapping = {false, false, false, false, false, false,
-false, false, false, false, false, true,
-true,  true};
+  Expanded.BraceWrapping = {false, false, false, false, false, false, 
+false, false, false, false, false, false, 
+true,  true,  true};
   switch (Style.BreakBeforeBraces) {
   case FormatStyle::BS_Linux:
 Expanded.BraceWrapping.AfterClass = true;
@@ -515,6 +516,7 @@
 Expanded.BraceWrapping.AfterFunction = true;
 Expanded.BraceWrapping.AfterStruct = true;
 Expanded.BraceWrapping.AfterUnion = true;
+Expanded.BraceWrapping.AfterExternBlock = true;
 Expanded.BraceWrapping.SplitEmptyFunction = true;
 Expanded.BraceWrapping.SplitEmptyRecord = false;
 break;
@@ -531,13 +533,14 @@
 Expanded.BraceWrapping.AfterNamespace = true;
 

[PATCH] D37845: [clang-format] New flag - BraceWrapping.AfterExternBlock

2017-09-15 Thread Pawel Maciocha via Phabricator via cfe-commits
PriMee added a comment.

I would be grateful, thank you!


https://reviews.llvm.org/D37845



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D37845: [clang-format] New flag - BraceWrapping.AfterExternBlock

2017-09-15 Thread Krasimir Georgiev via Phabricator via cfe-commits
krasimir accepted this revision.
krasimir added a comment.
This revision is now accepted and ready to land.

Looks good! Should I commit this for you?


https://reviews.llvm.org/D37845



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D37845: [clang-format] New flag - BraceWrapping.AfterExternBlock

2017-09-14 Thread Pawel Maciocha via Phabricator via cfe-commits
PriMee updated this revision to Diff 115240.
PriMee added a comment.

Thank you for noticing! Done.


https://reviews.llvm.org/D37845

Files:
  docs/ClangFormatStyleOptions.rst
  include/clang/Format/Format.h
  lib/Format/Format.cpp
  lib/Format/UnwrappedLineFormatter.cpp
  lib/Format/UnwrappedLineParser.cpp
  unittests/Format/FormatTest.cpp

Index: unittests/Format/FormatTest.cpp
===
--- unittests/Format/FormatTest.cpp
+++ unittests/Format/FormatTest.cpp
@@ -1704,7 +1704,42 @@
Style));
 }
 
-TEST_F(FormatTest, FormatsExternC) { verifyFormat("extern \"C\" {\nint a;"); }
+TEST_F(FormatTest, FormatsExternC) {
+  verifyFormat("extern \"C\" {\nint a;");
+  verifyFormat("extern \"C\" {}");
+  verifyFormat("extern \"C\" {\n"
+   "int foo();\n"
+   "}");
+  verifyFormat("extern \"C\" int foo() {}");
+  verifyFormat("extern \"C\" int foo();");
+  verifyFormat("extern \"C\" int foo() {\n"
+   "  int i = 42;\n"
+   "  return i;\n"
+   "}");
+
+  FormatStyle Style = getLLVMStyle();
+  Style.BreakBeforeBraces = FormatStyle::BS_Custom;
+  Style.BraceWrapping.AfterFunction = true;
+  verifyFormat("extern \"C\" int foo() {}", Style);
+  verifyFormat("extern \"C\" int foo();", Style);
+  verifyFormat("extern \"C\" int foo()\n"
+   "{\n"
+   "  int i = 42;\n"
+   "  return i;\n"
+   "}",
+   Style);
+
+  Style.BraceWrapping.AfterExternBlock = true;
+  Style.BraceWrapping.SplitEmptyRecord = false;
+  verifyFormat("extern \"C\"\n"
+   "{}",
+   Style);
+  verifyFormat("extern \"C\"\n"
+   "{\n"
+   "  int foo();\n"
+   "}",
+   Style);
+}
 
 TEST_F(FormatTest, FormatsInlineASM) {
   verifyFormat("asm(\"xyz\" : \"=a\"(a), \"=d\"(b) : \"a\"(data));");
@@ -9979,6 +10014,7 @@
   CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterObjCDeclaration);
   CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterStruct);
   CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterUnion);
+  CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterExternBlock);
   CHECK_PARSE_NESTED_BOOL(BraceWrapping, BeforeCatch);
   CHECK_PARSE_NESTED_BOOL(BraceWrapping, BeforeElse);
   CHECK_PARSE_NESTED_BOOL(BraceWrapping, IndentBraces);
Index: lib/Format/UnwrappedLineParser.cpp
===
--- lib/Format/UnwrappedLineParser.cpp
+++ lib/Format/UnwrappedLineParser.cpp
@@ -1039,7 +1039,12 @@
 if (FormatTok->Tok.is(tok::string_literal)) {
   nextToken();
   if (FormatTok->Tok.is(tok::l_brace)) {
-parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false);
+if (Style.BraceWrapping.AfterExternBlock) {
+  addUnwrappedLine();
+  parseBlock(/*MustBeDeclaration=*/true);
+} else {
+  parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false);
+}
 addUnwrappedLine();
 return;
   }
Index: lib/Format/UnwrappedLineFormatter.cpp
===
--- lib/Format/UnwrappedLineFormatter.cpp
+++ lib/Format/UnwrappedLineFormatter.cpp
@@ -233,9 +233,10 @@
   if (Tok && Tok->is(tok::kw_typedef))
 Tok = Tok->getNextNonComment();
   if (Tok && Tok->isOneOf(tok::kw_class, tok::kw_struct, tok::kw_union,
-  Keywords.kw_interface))
+  tok::kw_extern, Keywords.kw_interface))
 return !Style.BraceWrapping.SplitEmptyRecord && EmptyBlock
-? tryMergeSimpleBlock(I, E, Limit) : 0;
+   ? tryMergeSimpleBlock(I, E, Limit)
+   : 0;
 }
 
 // FIXME: TheLine->Level != 0 might or might not be the right check to do.
Index: lib/Format/Format.cpp
===
--- lib/Format/Format.cpp
+++ lib/Format/Format.cpp
@@ -420,6 +420,7 @@
 IO.mapOptional("AfterObjCDeclaration", Wrapping.AfterObjCDeclaration);
 IO.mapOptional("AfterStruct", Wrapping.AfterStruct);
 IO.mapOptional("AfterUnion", Wrapping.AfterUnion);
+IO.mapOptional("AfterExternBlock", Wrapping.AfterExternBlock);
 IO.mapOptional("BeforeCatch", Wrapping.BeforeCatch);
 IO.mapOptional("BeforeElse", Wrapping.BeforeElse);
 IO.mapOptional("IndentBraces", Wrapping.IndentBraces);
@@ -500,9 +501,9 @@
   if (Style.BreakBeforeBraces == FormatStyle::BS_Custom)
 return Style;
   FormatStyle Expanded = Style;
-  Expanded.BraceWrapping = {false, false, false, false, false, false,
-false, false, false, false, false, true,
-true,  true};
+  Expanded.BraceWrapping = {false, false, false, false, false, false, 
+false, false, false, false, false, false, 
+true,  true,  true};
   switch (Style.BreakBeforeBraces) {
   

[PATCH] D37845: [clang-format] New flag - BraceWrapping.AfterExternBlock

2017-09-14 Thread Krasimir Georgiev via Phabricator via cfe-commits
krasimir added a comment.

Looks great! Just one more nit: please add a line checking the parsing of the 
new option similar to the line `CHECK_PARSE_NESTED_BOOL(BraceWrapping, 
AfterStruct);` in `unittests/Format/FormatTest.cpp`.


https://reviews.llvm.org/D37845



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D37845: [clang-format] New flag - BraceWrapping.AfterExternBlock

2017-09-14 Thread Pawel Maciocha via Phabricator via cfe-commits
PriMee updated this revision to Diff 115202.
PriMee added a comment.

Sorry, forgot again...


https://reviews.llvm.org/D37845

Files:
  docs/ClangFormatStyleOptions.rst
  include/clang/Format/Format.h
  lib/Format/Format.cpp
  lib/Format/UnwrappedLineFormatter.cpp
  lib/Format/UnwrappedLineParser.cpp
  unittests/Format/FormatTest.cpp

Index: unittests/Format/FormatTest.cpp
===
--- unittests/Format/FormatTest.cpp
+++ unittests/Format/FormatTest.cpp
@@ -1704,7 +1704,42 @@
Style));
 }
 
-TEST_F(FormatTest, FormatsExternC) { verifyFormat("extern \"C\" {\nint a;"); }
+TEST_F(FormatTest, FormatsExternC) {
+  verifyFormat("extern \"C\" {\nint a;");
+  verifyFormat("extern \"C\" {}");
+  verifyFormat("extern \"C\" {\n"
+   "int foo();\n"
+   "}");
+  verifyFormat("extern \"C\" int foo() {}");
+  verifyFormat("extern \"C\" int foo();");
+  verifyFormat("extern \"C\" int foo() {\n"
+   "  int i = 42;\n"
+   "  return i;\n"
+   "}");
+
+  FormatStyle Style = getLLVMStyle();
+  Style.BreakBeforeBraces = FormatStyle::BS_Custom;
+  Style.BraceWrapping.AfterFunction = true;
+  verifyFormat("extern \"C\" int foo() {}", Style);
+  verifyFormat("extern \"C\" int foo();", Style);
+  verifyFormat("extern \"C\" int foo()\n"
+   "{\n"
+   "  int i = 42;\n"
+   "  return i;\n"
+   "}",
+   Style);
+
+  Style.BraceWrapping.AfterExternBlock = true;
+  Style.BraceWrapping.SplitEmptyRecord = false;
+  verifyFormat("extern \"C\"\n"
+   "{}",
+   Style);
+  verifyFormat("extern \"C\"\n"
+   "{\n"
+   "  int foo();\n"
+   "}",
+   Style);
+}
 
 TEST_F(FormatTest, FormatsInlineASM) {
   verifyFormat("asm(\"xyz\" : \"=a\"(a), \"=d\"(b) : \"a\"(data));");
Index: lib/Format/UnwrappedLineParser.cpp
===
--- lib/Format/UnwrappedLineParser.cpp
+++ lib/Format/UnwrappedLineParser.cpp
@@ -1039,7 +1039,12 @@
 if (FormatTok->Tok.is(tok::string_literal)) {
   nextToken();
   if (FormatTok->Tok.is(tok::l_brace)) {
-parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false);
+if (Style.BraceWrapping.AfterExternBlock) {
+  addUnwrappedLine();
+  parseBlock(/*MustBeDeclaration=*/true);
+} else {
+  parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false);
+}
 addUnwrappedLine();
 return;
   }
Index: lib/Format/UnwrappedLineFormatter.cpp
===
--- lib/Format/UnwrappedLineFormatter.cpp
+++ lib/Format/UnwrappedLineFormatter.cpp
@@ -233,9 +233,10 @@
   if (Tok && Tok->is(tok::kw_typedef))
 Tok = Tok->getNextNonComment();
   if (Tok && Tok->isOneOf(tok::kw_class, tok::kw_struct, tok::kw_union,
-  Keywords.kw_interface))
+  tok::kw_extern, Keywords.kw_interface))
 return !Style.BraceWrapping.SplitEmptyRecord && EmptyBlock
-? tryMergeSimpleBlock(I, E, Limit) : 0;
+   ? tryMergeSimpleBlock(I, E, Limit)
+   : 0;
 }
 
 // FIXME: TheLine->Level != 0 might or might not be the right check to do.
Index: lib/Format/Format.cpp
===
--- lib/Format/Format.cpp
+++ lib/Format/Format.cpp
@@ -420,6 +420,7 @@
 IO.mapOptional("AfterObjCDeclaration", Wrapping.AfterObjCDeclaration);
 IO.mapOptional("AfterStruct", Wrapping.AfterStruct);
 IO.mapOptional("AfterUnion", Wrapping.AfterUnion);
+IO.mapOptional("AfterExternBlock", Wrapping.AfterExternBlock);
 IO.mapOptional("BeforeCatch", Wrapping.BeforeCatch);
 IO.mapOptional("BeforeElse", Wrapping.BeforeElse);
 IO.mapOptional("IndentBraces", Wrapping.IndentBraces);
@@ -500,9 +501,9 @@
   if (Style.BreakBeforeBraces == FormatStyle::BS_Custom)
 return Style;
   FormatStyle Expanded = Style;
-  Expanded.BraceWrapping = {false, false, false, false, false, false,
-false, false, false, false, false, true,
-true,  true};
+  Expanded.BraceWrapping = {false, false, false, false, false, false, 
+false, false, false, false, false, false, 
+true,  true,  true};
   switch (Style.BreakBeforeBraces) {
   case FormatStyle::BS_Linux:
 Expanded.BraceWrapping.AfterClass = true;
@@ -515,6 +516,7 @@
 Expanded.BraceWrapping.AfterFunction = true;
 Expanded.BraceWrapping.AfterStruct = true;
 Expanded.BraceWrapping.AfterUnion = true;
+Expanded.BraceWrapping.AfterExternBlock = true;
 Expanded.BraceWrapping.SplitEmptyFunction = true;
 Expanded.BraceWrapping.SplitEmptyRecord = false;
 break;
@@ -531,13 +533,14 @@
  

[PATCH] D37845: [clang-format] New flag - BraceWrapping.AfterExternBlock

2017-09-14 Thread Krasimir Georgiev via Phabricator via cfe-commits
krasimir added inline comments.



Comment at: lib/Format/UnwrappedLineParser.cpp:1047
+else
+  parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false);
 addUnwrappedLine();

Please `clang-format` the newly added lines.


https://reviews.llvm.org/D37845



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits