aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Format/WhitespaceManager.cpp
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2013-09-27 09:45:40 +0000
committerAlexander Kornienko <alexfh@google.com>2013-09-27 09:45:40 +0000
commitdb4c21f9945283f2e8d29c7a8a898512ebf37b52 (patch)
treec97127d07f6704390ca9dd17aba464bdf12ed645 /clang/lib/Format/WhitespaceManager.cpp
parent36c671e2c7b2eeec111cc7625b36d08f15ce4dd2 (diff)
downloadllvm-db4c21f9945283f2e8d29c7a8a898512ebf37b52.zip
llvm-db4c21f9945283f2e8d29c7a8a898512ebf37b52.tar.gz
llvm-db4c21f9945283f2e8d29c7a8a898512ebf37b52.tar.bz2
Correctly indent with tabs when whitespace starts from the column not divisible by TabWidth.
Summary: The width of the first inserted tab character depends on the initial column, so we need to handle the first tab in a special manner. Reviewers: klimek, djasper Reviewed By: klimek CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D1763 llvm-svn: 191497
Diffstat (limited to 'clang/lib/Format/WhitespaceManager.cpp')
-rw-r--r--clang/lib/Format/WhitespaceManager.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Format/WhitespaceManager.cpp b/clang/lib/Format/WhitespaceManager.cpp
index c0a3f5d..50ff858 100644
--- a/clang/lib/Format/WhitespaceManager.cpp
+++ b/clang/lib/Format/WhitespaceManager.cpp
@@ -225,7 +225,7 @@ void WhitespaceManager::generateChanges() {
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);
}
@@ -264,10 +264,18 @@ void WhitespaceManager::appendNewlineText(std::string &Text, unsigned Newlines,
}
}
-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, ' '));
}