aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Klimek <klimek@google.com>2013-01-16 14:55:28 +0000
committerManuel Klimek <klimek@google.com>2013-01-16 14:55:28 +0000
commitca547dbbb1e10c801158f2eecaf3d49e1071b0e3 (patch)
tree55b8bf41c4f5dbe1da3e27bb6892b240e3edad43
parent8fa37999164844a926448ef4656bbf7c42070235 (diff)
Add debugging support for split penalties.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172616 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Format/Format.cpp42
-rw-r--r--lib/Format/UnwrappedLineParser.cpp1
-rw-r--r--unittests/Format/FormatTest.cpp10
3 files changed, 50 insertions, 3 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp
index 4b5c2b8f66..ee9b463e90 100644
--- a/lib/Format/Format.cpp
+++ b/lib/Format/Format.cpp
@@ -16,15 +16,21 @@
///
//===----------------------------------------------------------------------===//
-#include "clang/Format/Format.h"
+#define DEBUG_TYPE "format-formatter"
+
#include "UnwrappedLineParser.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/OperatorPrecedence.h"
#include "clang/Basic/SourceManager.h"
+#include "clang/Format/Format.h"
#include "clang/Frontend/TextDiagnosticPrinter.h"
#include "clang/Lex/Lexer.h"
+#include "llvm/Support/Debug.h"
#include <string>
+// Uncomment to get debug output from tests:
+// #define DEBUG_WITH_TYPE(T, X) do { X; } while(0)
+
namespace clang {
namespace format {
@@ -246,6 +252,10 @@ public:
State.LineContainsContinuedForLoopSection = false;
State.StartOfLineLevel = 1;
+ DEBUG({
+ DebugTokenState(*State.NextToken);
+ });
+
// The first token has already been indented and thus consumed.
moveStateToNextToken(State);
@@ -262,6 +272,18 @@ public:
} else {
unsigned NoBreak = calcPenalty(State, false, UINT_MAX);
unsigned Break = calcPenalty(State, true, NoBreak);
+ DEBUG({
+ if (Break < NoBreak)
+ llvm::errs() << "\n";
+ else
+ llvm::errs() << " ";
+ llvm::errs() << "<";
+ DebugPenalty(Break, Break < NoBreak);
+ llvm::errs() << "/";
+ DebugPenalty(NoBreak, !(Break < NoBreak));
+ llvm::errs() << "> ";
+ DebugTokenState(*State.NextToken);
+ });
addTokenToState(Break < NoBreak, false, State);
if (State.NextToken != NULL &&
State.NextToken->Parent->Type == TT_CtorInitializerColon) {
@@ -271,10 +293,28 @@ public:
}
}
}
+ DEBUG(llvm::errs() << "\n");
return State.Column;
}
private:
+ void DebugTokenState(const AnnotatedToken &AnnotatedTok) {
+ const Token &Tok = AnnotatedTok.FormatTok.Tok;
+ llvm::errs()
+ << StringRef(SourceMgr.getCharacterData(Tok.getLocation()),
+ Tok.getLength());
+ llvm::errs();
+ }
+
+ void DebugPenalty(unsigned Penalty, bool Winner) {
+ llvm::errs().changeColor(Winner ? raw_ostream::GREEN : raw_ostream::RED);
+ if (Penalty == UINT_MAX)
+ llvm::errs() << "MAX";
+ else
+ llvm::errs() << Penalty;
+ llvm::errs().resetColor();
+ }
+
struct ParenState {
ParenState(unsigned Indent, unsigned LastSpace)
: Indent(Indent), LastSpace(LastSpace), FirstLessLess(0),
diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp
index e8b334bb3d..89ab0ed169 100644
--- a/lib/Format/UnwrappedLineParser.cpp
+++ b/lib/Format/UnwrappedLineParser.cpp
@@ -20,7 +20,6 @@
#include "clang/Basic/Diagnostic.h"
#include "llvm/Support/Debug.h"
-#include "llvm/Support/raw_ostream.h"
#include "UnwrappedLineParser.h"
// Uncomment to get debug output from tests:
diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp
index e75d61e662..efea545d32 100644
--- a/unittests/Format/FormatTest.cpp
+++ b/unittests/Format/FormatTest.cpp
@@ -7,10 +7,16 @@
//
//===----------------------------------------------------------------------===//
+#define DEBUG_TYPE "format-test"
+
#include "clang/Format/Format.h"
-#include "../Tooling/RewriterTestContext.h"
#include "clang/Lex/Lexer.h"
#include "gtest/gtest.h"
+#include "llvm/Support/Debug.h"
+#include "../Tooling/RewriterTestContext.h"
+
+// Uncomment to get debug output from tests:
+// #define DEBUG_WITH_TYPE(T, X) do { X; } while(0)
namespace clang {
namespace format {
@@ -19,6 +25,7 @@ class FormatTest : public ::testing::Test {
protected:
std::string format(llvm::StringRef Code, unsigned Offset, unsigned Length,
const FormatStyle &Style) {
+ DEBUG(llvm::errs() << "---\n");
RewriterTestContext Context;
FileID ID = Context.createInMemoryFile("input.cc", Code);
SourceLocation Start =
@@ -32,6 +39,7 @@ protected:
Ranges,
new IgnoringDiagConsumer());
EXPECT_TRUE(applyAllReplacements(Replace, Context.Rewrite));
+ DEBUG(llvm::errs() << "\n" << Context.getRewrittenText(ID) << "\n\n");
return Context.getRewrittenText(ID);
}