]> granicus.if.org Git - clang/commitdiff
Custom DiagnosticConsumer parameter of reformat() + silence diagnostics in unit tests.
authorAlexander Kornienko <alexfh@google.com>
Mon, 14 Jan 2013 11:34:14 +0000 (11:34 +0000)
committerAlexander Kornienko <alexfh@google.com>
Mon, 14 Jan 2013 11:34:14 +0000 (11:34 +0000)
Summary:
Added tests for clang-format diagnostics. Added DiagnosticConsumer
argument to clang::format::reformat().

Reviewers: klimek, djasper

Reviewed By: djasper

CC: cfe-commits, thakis, rafael.espindola
Differential Revision: http://llvm-reviews.chandlerc.com/D290

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172399 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Format/Format.h
lib/Format/Format.cpp
unittests/Format/FormatTest.cpp

index e3a066e9d83a5688b6d6d07b1f4707eb54d868c7..aac552b602eee94ae7c627e4c220e73cb88e04b3 100644 (file)
@@ -25,6 +25,7 @@ namespace clang {
 
 class Lexer;
 class SourceManager;
+class DiagnosticConsumer;
 
 namespace format {
 
@@ -57,7 +58,7 @@ struct FormatStyle {
   unsigned SpacesBeforeTrailingComments;
 
   /// \brief If the constructor initializers don't fit on a line, put each
-  /// initializer on its own line. 
+  /// initializer on its own line.
   bool ConstructorInitializerAllOnOneLineOrOnePerLine;
 
   /// \brief Add a space in front of an Objective-C protocol list, i.e. use
@@ -84,11 +85,15 @@ FormatStyle getGoogleStyle();
 /// everything that might influence its formatting or might be influenced by its
 /// formatting.
 ///
+/// \param DiagClient A custom DiagnosticConsumer. Can be 0, in this case
+/// diagnostic is output to llvm::errs().
+///
 /// Returns the \c Replacements necessary to make all \p Ranges comply with
 /// \p Style.
 tooling::Replacements reformat(const FormatStyle &Style, Lexer &Lex,
                                SourceManager &SourceMgr,
-                               std::vector<CharSourceRange> Ranges);
+                               std::vector<CharSourceRange> Ranges,
+                               DiagnosticConsumer *DiagClient = 0);
 
 /// \brief Returns the \c LangOpts that the formatter expects you to set.
 LangOptions getFormattingLangOpts();
index 67a5b8c4cd6a27fd40e38948618e41d08e780b93..548bdee2b2d4727eca14935b37ec421f580aab9e 100644 (file)
@@ -1331,7 +1331,7 @@ private:
 
 class Formatter : public UnwrappedLineConsumer {
 public:
-  Formatter(clang::DiagnosticsEngine &Diag, const FormatStyle &Style,
+  Formatter(DiagnosticsEngine &Diag, const FormatStyle &Style,
             Lexer &Lex, SourceManager &SourceMgr,
             const std::vector<CharSourceRange> &Ranges)
       : Diag(Diag), Style(Style), Lex(Lex), SourceMgr(SourceMgr),
@@ -1517,7 +1517,7 @@ private:
     return Indent;
   }
 
-  clang::DiagnosticsEngine &Diag;
+  DiagnosticsEngine &Diag;
   FormatStyle Style;
   Lexer &Lex;
   SourceManager &SourceMgr;
@@ -1529,13 +1529,18 @@ private:
 
 tooling::Replacements reformat(const FormatStyle &Style, Lexer &Lex,
                                SourceManager &SourceMgr,
-                               std::vector<CharSourceRange> Ranges) {
+                               std::vector<CharSourceRange> Ranges,
+                               DiagnosticConsumer *DiagClient) {
   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
-  TextDiagnosticPrinter DiagnosticPrinter(llvm::errs(), &*DiagOpts);
-  DiagnosticPrinter.BeginSourceFile(Lex.getLangOpts(), Lex.getPP());
+  OwningPtr<DiagnosticConsumer> DiagPrinter;
+  if (DiagClient == 0) {
+    DiagPrinter.reset(new TextDiagnosticPrinter(llvm::errs(), &*DiagOpts));
+    DiagPrinter->BeginSourceFile(Lex.getLangOpts(), Lex.getPP());
+    DiagClient = DiagPrinter.get();
+  }
   DiagnosticsEngine Diagnostics(
       IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()), &*DiagOpts,
-      &DiagnosticPrinter, false);
+      DiagClient, false);
   Diagnostics.setSourceManager(&SourceMgr);
   Formatter formatter(Diagnostics, Style, Lex, SourceMgr, Ranges);
   return formatter.format();
index 2f66e5454cb3b4d8f23ef78ff525c5a2a3de0328..eb87a3b965717d1f9e73272df4eea4a8e7dec392 100644 (file)
@@ -29,7 +29,8 @@ protected:
     Lexer Lex(ID, Context.Sources.getBuffer(ID), Context.Sources,
               getFormattingLangOpts());
     tooling::Replacements Replace = reformat(Style, Lex, Context.Sources,
-                                             Ranges);
+                                             Ranges,
+                                             new IgnoringDiagConsumer());
     EXPECT_TRUE(applyAllReplacements(Replace, Context.Rewrite));
     return Context.getRewrittenText(ID);
   }
@@ -1206,8 +1207,6 @@ TEST_F(FormatTest, IncorrectCodeErrorDetection) {
   EXPECT_EQ("{\n  {}\n", format("{\n  {\n  }\n"));
   EXPECT_EQ("{\n  {}\n  }\n}\n", format("{\n  {\n    }\n  }\n}\n"));
 
-  FormatStyle Style = getLLVMStyle();
-  Style.ColumnLimit = 10;
   EXPECT_EQ("{\n"
             "    {\n"
             " breakme(\n"
@@ -1215,8 +1214,7 @@ TEST_F(FormatTest, IncorrectCodeErrorDetection) {
             "}\n", format("{\n"
                           "    {\n"
                           " breakme(qwe);\n"
-                          "}\n", Style));
-
+                          "}\n", getLLVMStyleWithColumns(10)));
 }
 
 TEST_F(FormatTest, LayoutCallsInsideBraceInitializers) {