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;
  }

llvm-svn: 251824
This commit is contained in:
Daniel Jasper 2015-11-02 20:02:49 +00:00
parent 2297a9142e
commit f83834feb1
2 changed files with 22 additions and 4 deletions

View File

@ -815,8 +815,6 @@ UnwrappedLineFormatter::format(const SmallVectorImpl<AnnotatedLine *> &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<AnnotatedLine *> &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;

View File

@ -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"