clang-format: Fix hanging nested blocks in macros.

Before:
  #define MACRO()                     \
    Debug(aaa, /* force line break */ \
          {                           \
      int i;                          \
      int j;                          \
          })

After:
  #define MACRO()                     \
    Debug(aaa, /* force line break */ \
          {                           \
            int i;                    \
            int j;                    \
          })

llvm-svn: 237108
This commit is contained in:
Daniel Jasper 2015-05-12 10:16:02 +00:00
parent 6f30dc18d3
commit 5fc133e71e
2 changed files with 16 additions and 2 deletions

View File

@ -39,7 +39,7 @@ public:
LevelIndentTracker(const FormatStyle &Style,
const AdditionalKeywords &Keywords, unsigned StartLevel,
int AdditionalIndent)
: Style(Style), Keywords(Keywords) {
: Style(Style), Keywords(Keywords), AdditionalIndent(AdditionalIndent) {
for (unsigned i = 0; i != StartLevel; ++i)
IndentForLevel.push_back(Style.IndentWidth * i + AdditionalIndent);
}
@ -52,7 +52,7 @@ public:
void nextLine(const AnnotatedLine &Line) {
Offset = getIndentOffset(*Line.First);
if (Line.InPPDirective) {
Indent = Line.Level * Style.IndentWidth;
Indent = Line.Level * Style.IndentWidth + AdditionalIndent;
} else {
while (IndentForLevel.size() <= Line.Level)
IndentForLevel.push_back(-1);
@ -110,6 +110,8 @@ private:
const FormatStyle &Style;
const AdditionalKeywords &Keywords;
unsigned AdditionalIndent;
/// \brief The indent in characters for each level.
std::vector<int> IndentForLevel;

View File

@ -3284,6 +3284,18 @@ TEST_F(FormatTest, LayoutNestedBlocks) {
verifyNoCrash("^{v^{a}}");
}
TEST_F(FormatTest, FormatNestedBlocksInMacros) {
EXPECT_EQ("#define MACRO() \\\n"
" Debug(aaa, /* force line break */ \\\n"
" { \\\n"
" int i; \\\n"
" int j; \\\n"
" })",
format("#define MACRO() Debug(aaa, /* force line break */ \\\n"
" { int i; int j; })",
getGoogleStyle()));
}
TEST_F(FormatTest, IndividualStatementsOfNestedBlocks) {
EXPECT_EQ("DEBUG({\n"
" int i;\n"