]> granicus.if.org Git - clang/commitdiff
Cleanup \brief comment. Since it is a single paragraph, no need to save newlines...
authorDmitri Gribenko <gribozavr@gmail.com>
Thu, 28 Jun 2012 01:38:21 +0000 (01:38 +0000)
committerDmitri Gribenko <gribozavr@gmail.com>
Thu, 28 Jun 2012 01:38:21 +0000 (01:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159325 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/CommentBriefParser.cpp
test/Index/annotate-comments-unterminated.c
test/Index/annotate-comments.cpp

index f6473092461539c7e70d96aad87950083b285386..4040a999249bd0de85f6dbea7028997ed3b1bf00 100644 (file)
 namespace clang {
 namespace comments {
 
+namespace {
+/// Convert all whitespace into spaces, remove leading and trailing spaces,
+/// compress multiple spaces into one.
+void cleanupBrief(std::string &S) {
+  bool PrevWasSpace = true;
+  std::string::iterator O = S.begin();
+  for (std::string::iterator I = S.begin(), E = S.end();
+       I != E; ++I) {
+    const char C = *I;
+    if (C == ' ' || C == '\n' || C == '\r' ||
+        C == '\t' || C == '\v' || C == '\f') {
+      if (!PrevWasSpace) {
+        *O++ = ' ';
+        PrevWasSpace = true;
+      }
+      continue;
+    } else {
+      *O++ = C;
+      PrevWasSpace = false;
+    }
+  }
+  if (O != S.begin() && *(O - 1) == ' ')
+    --O;
+
+  S.resize(O - S.begin());
+}
+} // unnamed namespace
+
 std::string BriefParser::Parse() {
   std::string Paragraph;
   bool InFirstParagraph = true;
@@ -47,7 +75,7 @@ std::string BriefParser::Parse() {
 
     if (Tok.is(tok::newline)) {
       if (InFirstParagraph || InBrief)
-        Paragraph += '\n';
+        Paragraph += ' ';
       ConsumeToken();
 
       if (Tok.is(tok::newline)) {
@@ -66,6 +94,7 @@ std::string BriefParser::Parse() {
     ConsumeToken();
   }
 
+  cleanupBrief(Paragraph);
   return Paragraph;
 }
 
index d72822a0938bbe4f76415155eeeb6aa3f133fcb3..6bba911aac934d64f9fc8354746459d0f34acb84 100644 (file)
@@ -1,8 +1,8 @@
 // RUN: c-index-test -test-load-source all %s | FileCheck %s
 // RUN: %clang_cc1 -fsyntax-only %s 2>&1 | FileCheck -check-prefix=ERR %s
 
-// CHECK: annotate-comments-unterminated.c:9:5: VarDecl=x:{{.*}} RawComment=[/** Aaa. */]{{.*}} BriefComment=[ Aaa. \n]
-// CHECK: annotate-comments-unterminated.c:11:5: VarDecl=y:{{.*}} RawComment=[/**< Bbb. */]{{.*}} BriefComment=[ Bbb. \n]
+// CHECK: annotate-comments-unterminated.c:9:5: VarDecl=x:{{.*}} RawComment=[/** Aaa. */]{{.*}} BriefComment=[Aaa.]
+// CHECK: annotate-comments-unterminated.c:11:5: VarDecl=y:{{.*}} RawComment=[/**< Bbb. */]{{.*}} BriefComment=[Bbb.]
 // CHECK-ERR: error: unterminated
 
 /** Aaa. */
index 59ffa88348a5e8d75493c0fba34faefe3864548c..aa68defe9537e34548f72389614857ce02f1ce55 100644 (file)
@@ -268,7 +268,7 @@ void isdoxy47(int);
 // CHECK: annotate-comments.cpp:163:7: FieldDecl=isdoxy42:{{.*}} isdoxy42 IS_DOXYGEN_SINGLE
 // CHECK: annotate-comments.cpp:176:6: FunctionDecl=isdoxy43:{{.*}} IS_DOXYGEN_START{{.*}} IS_DOXYGEN_END
 
-// CHECK: annotate-comments.cpp:185:6: FunctionDecl=isdoxy44:{{.*}} BriefComment=[ IS_DOXYGEN_START Aaa bbb\n ccc.\n]
-// CHECK: annotate-comments.cpp:195:6: FunctionDecl=isdoxy45:{{.*}} BriefComment=[\n Ddd eee.\n Fff.\n]
-// CHECK: annotate-comments.cpp:204:6: FunctionDecl=isdoxy47:{{.*}} BriefComment=[ IS_DOXYGEN_START Aaa bbb\n ]
+// CHECK: annotate-comments.cpp:185:6: FunctionDecl=isdoxy44:{{.*}} BriefComment=[IS_DOXYGEN_START Aaa bbb ccc.]
+// CHECK: annotate-comments.cpp:195:6: FunctionDecl=isdoxy45:{{.*}} BriefComment=[Ddd eee. Fff.]
+// CHECK: annotate-comments.cpp:204:6: FunctionDecl=isdoxy47:{{.*}} BriefComment=[IS_DOXYGEN_START Aaa bbb]