diff options
| author | Alexander Kornienko <alexfh@google.com> | 2013-03-15 13:42:02 +0000 |
|---|---|---|
| committer | Alexander Kornienko <alexfh@google.com> | 2013-03-15 13:42:02 +0000 |
| commit | 79d6c72e0ede4ab816c46727326985d6547f826b (patch) | |
| tree | 87fcee4d7b1eec8574335bbb4c36ea656b2954a0 /clang/lib/Format | |
| parent | b0fac42987600989a477a1e09e29ee10ca4ed5b7 (diff) | |
| download | bcm5719-llvm-79d6c72e0ede4ab816c46727326985d6547f826b.tar.gz bcm5719-llvm-79d6c72e0ede4ab816c46727326985d6547f826b.zip | |
Indent all lines in a multi-line comment by the same amount.
Summary:
Do this to avoid spoling nicely formatted multi-line comments (e.g.
with code examples or similar stuff).
Reviewers: djasper
Reviewed By: djasper
CC: cfe-commits, klimek
Differential Revision: http://llvm-reviews.chandlerc.com/D544
llvm-svn: 177153
Diffstat (limited to 'clang/lib/Format')
| -rw-r--r-- | clang/lib/Format/Format.cpp | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 777d5e8f72a..aa715e692d1 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -193,36 +193,34 @@ public: } private: - void indentBlockComment(const FormatToken &Tok, int BaseIndent) { + void indentBlockComment(const FormatToken &Tok, int Indent) { SourceLocation TokenLoc = Tok.Tok.getLocation(); + int IndentDelta = Indent - SourceMgr.getSpellingColumnNumber(TokenLoc) + 1; const char *Start = SourceMgr.getCharacterData(TokenLoc); const char *Current = Start; const char *TokEnd = Current + Tok.TokenLength; + llvm::SmallVector<SourceLocation, 16> LineStarts; while (Current < TokEnd) { if (*Current == '\n') { ++Current; - SourceLocation Loc = TokenLoc.getLocWithOffset(Current - Start); - int Indent = BaseIndent; - int Spaces = 0; - while (Current < TokEnd && *Current == ' ') { - ++Spaces; - ++Current; - } - if (Current < TokEnd && *Current == '*') - ++Indent; - else - Indent += 3; - - if (Spaces < Indent) - Replaces.insert(tooling::Replacement( - SourceMgr, Loc, 0, std::string(Indent - Spaces, ' '))); - else if (Spaces > Indent) - Replaces.insert( - tooling::Replacement(SourceMgr, Loc, Spaces - Indent, "")); + LineStarts.push_back(TokenLoc.getLocWithOffset(Current - Start)); + // If we need to outdent the line, check that it's indented enough. + for (int i = 0; i < -IndentDelta; ++i, ++Current) + if (Current >= TokEnd || *Current != ' ') + return; } else { ++Current; } } + + for (size_t i = 0; i < LineStarts.size(); ++i) { + if (IndentDelta > 0) + Replaces.insert(tooling::Replacement(SourceMgr, LineStarts[i], 0, + std::string(IndentDelta, ' '))); + else if (IndentDelta < 0) + Replaces.insert( + tooling::Replacement(SourceMgr, LineStarts[i], -IndentDelta, "")); + } } std::string getNewLineText(unsigned NewLines, unsigned Spaces) { |

