diff options
Diffstat (limited to 'lib/Format')
-rw-r--r-- | lib/Format/Format.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 40e980f67d..4e2298071c 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -141,6 +141,7 @@ public: Comment.MinColumn = NewLines > 0 ? Spaces : WhitespaceStartColumn + Spaces; Comment.MaxColumn = Style.ColumnLimit - Tok.FormatTok.TokenLength; + Comment.Untouchable = false; Comments.push_back(Comment); return; } @@ -199,6 +200,14 @@ public: return Replaces; } + void addUntouchableComment(unsigned Column) { + StoredComment Comment; + Comment.MinColumn = Column; + Comment.MaxColumn = Column; + Comment.Untouchable = true; + Comments.push_back(Comment); + } + private: /// \brief Finds a common prefix of lines of a block comment to properly /// indent (and possibly decorate with '*'s) added lines. @@ -350,6 +359,7 @@ private: unsigned MaxColumn; unsigned NewLines; unsigned Spaces; + bool Untouchable; }; SmallVector<StoredComment, 16> Comments; typedef SmallVector<StoredComment, 16>::iterator comment_iterator; @@ -377,9 +387,11 @@ private: /// \brief Put all the comments between \p I and \p E into \p Column. void alignComments(comment_iterator I, comment_iterator E, unsigned Column) { while (I != E) { - unsigned Spaces = I->Spaces + Column - I->MinColumn; - storeReplacement( - I->Tok, std::string(I->NewLines, '\n') + std::string(Spaces, ' ')); + if (!I->Untouchable) { + unsigned Spaces = I->Spaces + Column - I->MinColumn; + storeReplacement( + I->Tok, std::string(I->NewLines, '\n') + std::string(Spaces, ' ')); + } ++I; } } @@ -1345,6 +1357,9 @@ public: SourceMgr.getSpellingColumnNumber(LastLoc) + Lex.MeasureTokenLength(LastLoc, SourceMgr, Lex.getLangOpts()) - 1; PreviousLineWasTouched = false; + if (TheLine.Last->is(tok::comment)) + Whitespaces.addUntouchableComment(SourceMgr.getSpellingColumnNumber( + TheLine.Last->FormatTok.Tok.getLocation()) - 1); } } return Whitespaces.generateReplacements(); |