[clang-format] Use number of unwrapped lines for short namespace

Summary:
This patch makes the namespace comment fixer use the number of unwrapped lines
that a namespace spans to detect it that namespace is short, thus not needing
end comments to be added.
This is needed to ensure clang-format is idempotent. Previously, a short namespace
was detected by the original source code lines. This has the effect of requiring two
runs for this example:
```
namespace { class A; }
```
after first run:
```
namespace {
class A;
}
```
after second run:
```
namespace {
class A;
} // namespace
```

Reviewers: djasper

Reviewed By: djasper

Subscribers: cfe-commits, klimek

Differential Revision: https://reviews.llvm.org/D30528

llvm-svn: 296736
diff --git a/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp b/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp
index c24894e..28212f8 100644
--- a/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp
+++ b/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp
@@ -47,87 +47,123 @@
 TEST_F(NamespaceEndCommentsFixerTest, AddsEndComment) {
   EXPECT_EQ("namespace {\n"
             "  int i;\n"
+            "  int j;\n"
             "}// namespace",
             fixNamespaceEndComments("namespace {\n"
                                     "  int i;\n"
+                                    "  int j;\n"
                                     "}"));
   EXPECT_EQ("namespace {\n"
             "  int i;\n"
+            "  int j;\n"
             "}// namespace\n",
             fixNamespaceEndComments("namespace {\n"
                                     "  int i;\n"
+                                    "  int j;\n"
                                     "}\n"));
   EXPECT_EQ("namespace A {\n"
             "  int i;\n"
+            "  int j;\n"
             "}// namespace A",
             fixNamespaceEndComments("namespace A {\n"
                                     "  int i;\n"
+                                    "  int j;\n"
                                     "}"));
   EXPECT_EQ("inline namespace A {\n"
             "  int i;\n"
+            "  int j;\n"
             "}// namespace A",
             fixNamespaceEndComments("inline namespace A {\n"
                                     "  int i;\n"
+                                    "  int j;\n"
                                     "}"));
   EXPECT_EQ("namespace ::A {\n"
             "  int i;\n"
+            "  int j;\n"
             "}// namespace ::A",
             fixNamespaceEndComments("namespace ::A {\n"
                                     "  int i;\n"
+                                    "  int j;\n"
                                     "}"));
   EXPECT_EQ("namespace ::A::B {\n"
             "  int i;\n"
+            "  int j;\n"
             "}// namespace ::A::B",
             fixNamespaceEndComments("namespace ::A::B {\n"
                                     "  int i;\n"
+                                    "  int j;\n"
                                     "}"));
   EXPECT_EQ("namespace /**/::/**/A/**/::/**/B/**/ {\n"
             "  int i;\n"
+            "  int j;\n"
             "}// namespace ::A::B",
             fixNamespaceEndComments("namespace /**/::/**/A/**/::/**/B/**/ {\n"
                                     "  int i;\n"
+                                    "  int j;\n"
                                     "}"));
   EXPECT_EQ("namespace A {\n"
             "namespace B {\n"
             "  int i;\n"
+            "}\n"
+            "}// namespace A",
+            fixNamespaceEndComments("namespace A {\n"
+                                    "namespace B {\n"
+                                    "  int i;\n"
+                                    "}\n"
+                                    "}"));
+  EXPECT_EQ("namespace A {\n"
+            "namespace B {\n"
+            "  int i;\n"
+            "  int j;\n"
             "}// namespace B\n"
             "}// namespace A",
             fixNamespaceEndComments("namespace A {\n"
                                     "namespace B {\n"
                                     "  int i;\n"
+                                    "  int j;\n"
                                     "}\n"
                                     "}"));
   EXPECT_EQ("namespace A {\n"
             "  int a;\n"
+            "  int b;\n"
             "}// namespace A\n"
             "namespace B {\n"
             "  int b;\n"
+            "  int a;\n"
             "}// namespace B",
             fixNamespaceEndComments("namespace A {\n"
                                     "  int a;\n"
+                                    "  int b;\n"
                                     "}\n"
                                     "namespace B {\n"
                                     "  int b;\n"
+                                    "  int a;\n"
                                     "}"));
   EXPECT_EQ("namespace A {\n"
             "  int a1;\n"
+            "  int a2;\n"
             "}// namespace A\n"
             "namespace A {\n"
             "  int a2;\n"
+            "  int a1;\n"
             "}// namespace A",
             fixNamespaceEndComments("namespace A {\n"
                                     "  int a1;\n"
+                                    "  int a2;\n"
                                     "}\n"
                                     "namespace A {\n"
                                     "  int a2;\n"
+                                    "  int a1;\n"
                                     "}"));
   EXPECT_EQ("namespace A {\n"
             "  int a;\n"
+            "  int b;\n"
             "}// namespace A\n"
             "// comment about b\n"
             "int b;",
             fixNamespaceEndComments("namespace A {\n"
                                     "  int a;\n"
+                                    "  int b;\n"
                                     "}\n"
                                     "// comment about b\n"
                                     "int b;"));
@@ -136,7 +172,7 @@
             "namespace B {\n"
             "namespace C {\n"
             "namespace D {\n"
-            "}// namespace D\n"
+            "}\n"
             "}// namespace C\n"
             "}// namespace B\n"
             "}// namespace A",
@@ -153,36 +189,44 @@
 TEST_F(NamespaceEndCommentsFixerTest, AddsNewlineIfNeeded) {
   EXPECT_EQ("namespace A {\n"
             "  int i;\n"
+            "  int j;\n"
             "}// namespace A\n"
-            " int j;",
+            " int k;",
             fixNamespaceEndComments("namespace A {\n"
                                     "  int i;\n"
-                                    "} int j;"));
+                                    "  int j;\n"
+                                    "} int k;"));
   EXPECT_EQ("namespace {\n"
             "  int i;\n"
+            "  int j;\n"
             "}// namespace\n"
-            " int j;",
+            " int k;",
             fixNamespaceEndComments("namespace {\n"
                                     "  int i;\n"
-                                    "} int j;"));
+                                    "  int j;\n"
+                                    "} int k;"));
   EXPECT_EQ("namespace A {\n"
             "  int i;\n"
+            "  int j;\n"
             "}// namespace A\n"
             " namespace B {\n"
             "  int j;\n"
+            "  int k;\n"
             "}// namespace B",
             fixNamespaceEndComments("namespace A {\n"
                                     "  int i;\n"
+                                    "  int j;\n"
                                     "} namespace B {\n"
                                     "  int j;\n"
+                                    "  int k;\n"
                                     "}"));
 }
 
 TEST_F(NamespaceEndCommentsFixerTest, DoesNotAddEndCommentForShortNamespace) {
   EXPECT_EQ("namespace {}", fixNamespaceEndComments("namespace {}"));
   EXPECT_EQ("namespace A {}", fixNamespaceEndComments("namespace A {}"));
-  EXPECT_EQ("namespace A { int i; }",
-            fixNamespaceEndComments("namespace A { int i; }"));
+  EXPECT_EQ("namespace A { a }",
+            fixNamespaceEndComments("namespace A { a }"));
 }
 
 TEST_F(NamespaceEndCommentsFixerTest, DoesNotAddCommentAfterUnaffectedRBrace) {