diff options
author | Daniel Jasper <djasper@google.com> | 2013-03-07 20:50:00 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2013-03-07 20:50:00 +0000 |
commit | f302354a7d1a63186fb0d9aa600ce3257be1f690 (patch) | |
tree | 8796a9931027a170f05f930ae1d41de9cb307fa7 /lib/Format/Format.cpp | |
parent | f4b48042724d2253d0426cadcb93e24eeb47e264 (diff) |
Remove unncessary whitespace when triggered on empty line.
With the cursor located at "I", clang-format would not do anything to:
int a;
I
int b;
With this patch, it reduces the number of empty lines as necessary, and
removes unnecessary whitespace. It does not change/reformat "int a;" or
"int b;".
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176650 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Format/Format.cpp')
-rw-r--r-- | lib/Format/Format.cpp | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 2b82410cf8..e738a5c3f3 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -1143,7 +1143,7 @@ public: /*WhitespaceStartColumn*/ 0, Style); } } else if (TheLine.Type != LT_Invalid && - (WasMoved || touchesRanges(TheLine))) { + (WasMoved || touchesLine(TheLine))) { unsigned LevelIndent = getIndent(IndentForLevel, TheLine.Level); unsigned Indent = LevelIndent; if (static_cast<int>(Indent) + Offset >= 0) @@ -1175,7 +1175,7 @@ public: IndentForLevel[TheLine.Level] = LevelIndent; // Remove trailing whitespace of the previous line if it was touched. - if (PreviousLineWasTouched) + if (PreviousLineWasTouched || touchesEmptyLineBefore(TheLine)) formatFirstToken(TheLine.First, Indent, TheLine.InPPDirective, PreviousEndOfLineColumn); } @@ -1370,22 +1370,34 @@ private: } } - bool touchesRanges(const AnnotatedLine &TheLine) { - const FormatToken *First = &TheLine.First.FormatTok; - const FormatToken *Last = &TheLine.Last->FormatTok; - CharSourceRange LineRange = CharSourceRange::getTokenRange( - First->WhiteSpaceStart.getLocWithOffset(First->LastNewlineOffset), - Last->Tok.getLocation()); + bool touchesRanges(const CharSourceRange& Range) { for (unsigned i = 0, e = Ranges.size(); i != e; ++i) { - if (!SourceMgr.isBeforeInTranslationUnit(LineRange.getEnd(), + if (!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(), Ranges[i].getBegin()) && !SourceMgr.isBeforeInTranslationUnit(Ranges[i].getEnd(), - LineRange.getBegin())) + Range.getBegin())) return true; } return false; } + bool touchesLine(const AnnotatedLine &TheLine) { + const FormatToken *First = &TheLine.First.FormatTok; + const FormatToken *Last = &TheLine.Last->FormatTok; + CharSourceRange LineRange = CharSourceRange::getTokenRange( + First->WhiteSpaceStart.getLocWithOffset(First->LastNewlineOffset), + Last->Tok.getLocation()); + return touchesRanges(LineRange); + } + + bool touchesEmptyLineBefore(const AnnotatedLine &TheLine) { + const FormatToken *First = &TheLine.First.FormatTok; + CharSourceRange LineRange = CharSourceRange::getCharRange( + First->WhiteSpaceStart, + First->WhiteSpaceStart.getLocWithOffset(First->LastNewlineOffset)); + return touchesRanges(LineRange); + } + virtual void consumeUnwrappedLine(const UnwrappedLine &TheLine) { AnnotatedLines.push_back(AnnotatedLine(TheLine)); } |