C.PreviousEndOfTokenColumn, C.EscapedNewlineColumn);
else
appendNewlineText(ReplacementText, C.NewlinesBefore);
- appendIndentText(ReplacementText, C.Spaces);
+ appendIndentText(ReplacementText, C.Spaces, C.StartOfTokenColumn - C.Spaces);
ReplacementText.append(C.CurrentLinePrefix);
storeReplacement(C.OriginalWhitespaceRange, ReplacementText);
}
}
}
-void WhitespaceManager::appendIndentText(std::string &Text, unsigned Spaces) {
+void WhitespaceManager::appendIndentText(std::string &Text, unsigned Spaces,
+ unsigned WhitespaceStartColumn) {
if (!Style.UseTab) {
Text.append(std::string(Spaces, ' '));
} else {
+ unsigned FirstTabWidth =
+ Style.TabWidth - WhitespaceStartColumn % Style.TabWidth;
+ // Indent with tabs only when there's at least one full tab.
+ if (FirstTabWidth + Style.TabWidth <= Spaces) {
+ Spaces -= FirstTabWidth;
+ Text.append("\t");
+ }
Text.append(std::string(Spaces / Style.TabWidth, '\t'));
Text.append(std::string(Spaces % Style.TabWidth, ' '));
}
void appendNewlineText(std::string &Text, unsigned Newlines,
unsigned PreviousEndOfTokenColumn,
unsigned EscapedNewlineColumn);
- void appendIndentText(std::string &Text, unsigned Spaces);
+ void appendIndentText(std::string &Text, unsigned Spaces,
+ unsigned WhitespaceStartColumn);
SmallVector<Change, 16> Changes;
SourceManager &SourceMgr;
Tab.IndentWidth = 8;
Tab.UseTab = true;
Tab.AlignEscapedNewlinesLeft = true;
+
+ EXPECT_EQ("if (aaaaaaaa && // q\n"
+ " bb)\t\t// w\n"
+ "\t;",
+ format("if (aaaaaaaa &&// q\n"
+ "bb)// w\n"
+ ";",
+ Tab));
+ EXPECT_EQ("if (aaa && bbb) // w\n"
+ "\t;",
+ format("if(aaa&&bbb)// w\n"
+ ";",
+ Tab));
+
verifyFormat("class X {\n"
"\tvoid f() {\n"
"\t\tsomeFunction(parameter1,\n"
" \t \t in multiple lines\t\n"
" \t */",
Tab));
+
Tab.UseTab = false;
EXPECT_EQ("/*\n"
" a\t\tcomment\n"