From: Daniel Jasper Date: Mon, 2 Nov 2015 20:02:49 +0000 (+0000) Subject: clang-format: Simplify and improve stop condition for formatting X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d2809eac2a3f384be5727e8effbf99810f7d5d66;p=clang clang-format: Simplify and improve stop condition for formatting unaffected lines with incorrect initial indent. Starting from: namespace { int i; // There shouldn't be indentation here. int j; // <- call clang-format on this line. } Before: namespace { int i; int j; } After: namespace { int i; int j; } git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251824 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/UnwrappedLineFormatter.cpp b/lib/Format/UnwrappedLineFormatter.cpp index 5b4f5d5b09..04087e8487 100644 --- a/lib/Format/UnwrappedLineFormatter.cpp +++ b/lib/Format/UnwrappedLineFormatter.cpp @@ -815,8 +815,6 @@ UnwrappedLineFormatter::format(const SmallVectorImpl &Lines, // The minimum level of consecutive lines that have been formatted. unsigned RangeMinLevel = UINT_MAX; - // The level of the previous line. - unsigned PreviousLineLevel = Lines.front()->Level; for (const AnnotatedLine *Line = Joiner.getNextMergedLine(DryRun, IndentTracker); @@ -830,8 +828,7 @@ UnwrappedLineFormatter::format(const SmallVectorImpl &Lines, // remaining file if it currently missing a closing brace. bool ContinueFormatting = TheLine.Level > RangeMinLevel || - (TheLine.Level == RangeMinLevel && PreviousLineLevel <= TheLine.Level); - PreviousLineLevel = TheLine.Level; + (TheLine.Level == RangeMinLevel && !TheLine.startsWith(tok::r_brace)); bool FixIndentation = (FixBadIndentation || ContinueFormatting) && Indent != TheLine.First->OriginalColumn; diff --git a/unittests/Format/FormatTestSelective.cpp b/unittests/Format/FormatTestSelective.cpp index 9c4d1c3d2b..d53d1c0429 100644 --- a/unittests/Format/FormatTestSelective.cpp +++ b/unittests/Format/FormatTestSelective.cpp @@ -273,6 +273,27 @@ TEST_F(FormatTestSelective, IndividualStatementsOfNestedBlocks) { 0, 0)); } +TEST_F(FormatTestSelective, WrongIndent) { + EXPECT_EQ("namespace {\n" + "int i;\n" + "int j;\n" + "}", + format("namespace {\n" + " int i;\n" // Format here. + " int j;\n" + "}", + 15, 0)); + EXPECT_EQ("namespace {\n" + " int i;\n" + " int j;\n" + "}", + format("namespace {\n" + " int i;\n" + " int j;\n" // Format here. + "}", + 24, 0)); +} + TEST_F(FormatTestSelective, AlwaysFormatsEntireMacroDefinitions) { Style.AlignEscapedNewlinesLeft = true; EXPECT_EQ("int i;\n"