From ea22a3f1331fbee7656ad9bb33fbc763c3627436 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Tue, 12 May 2015 10:16:02 +0000 Subject: [PATCH] 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; \ }) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@237108 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Format/UnwrappedLineFormatter.cpp | 6 ++++-- unittests/Format/FormatTest.cpp | 12 ++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/Format/UnwrappedLineFormatter.cpp b/lib/Format/UnwrappedLineFormatter.cpp index b01d989f88..43f65dd04b 100644 --- a/lib/Format/UnwrappedLineFormatter.cpp +++ b/lib/Format/UnwrappedLineFormatter.cpp @@ -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 IndentForLevel; diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 22217c06f4..e6dee38fb0 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -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" -- 2.50.1