зеркало из https://github.com/microsoft/clang-1.git
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
This commit is contained in:
Родитель
f4b4804272
Коммит
f302354a7d
|
@ -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,20 +1370,32 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
bool touchesRanges(const AnnotatedLine &TheLine) {
|
||||
bool touchesRanges(const CharSourceRange& Range) {
|
||||
for (unsigned i = 0, e = Ranges.size(); i != e; ++i) {
|
||||
if (!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),
|
||||
Ranges[i].getBegin()) &&
|
||||
!SourceMgr.isBeforeInTranslationUnit(Ranges[i].getEnd(),
|
||||
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());
|
||||
for (unsigned i = 0, e = Ranges.size(); i != e; ++i) {
|
||||
if (!SourceMgr.isBeforeInTranslationUnit(LineRange.getEnd(),
|
||||
Ranges[i].getBegin()) &&
|
||||
!SourceMgr.isBeforeInTranslationUnit(Ranges[i].getEnd(),
|
||||
LineRange.getBegin()))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
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) {
|
||||
|
|
|
@ -194,6 +194,13 @@ TEST_F(FormatTest, FormatsCorrectRegionForLeadingWhitespace) {
|
|||
25, 0, getLLVMStyleWithColumns(12)));
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, RemovesWhitespaceWhenTriggeredOnEmptyLine) {
|
||||
EXPECT_EQ("int a;\n\n int b;",
|
||||
format("int a;\n \n\n int b;", 7, 0, getLLVMStyle()));
|
||||
EXPECT_EQ("int a;\n\n int b;",
|
||||
format("int a;\n \n\n int b;", 9, 0, getLLVMStyle()));
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, ReformatsMovedLines) {
|
||||
EXPECT_EQ(
|
||||
"template <typename T> T *getFETokenInfo() const {\n"
|
||||
|
|
Загрузка…
Ссылка в новой задаче