diff options
Diffstat (limited to 'lib/Format/Format.cpp')
-rw-r--r-- | lib/Format/Format.cpp | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 01813ef6c8..5fd49157bd 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -116,20 +116,30 @@ public: // Align line comments if they are trailing or if they continue other // trailing comments. - if (isTrailingComment(Tok) && (Tok.Parent != NULL || !Comments.empty())) { - if (Style.ColumnLimit >= - Spaces + WhitespaceStartColumn + Tok.FormatTok.TokenLength) { - Comments.push_back(StoredComment()); - Comments.back().Tok = Tok.FormatTok; - Comments.back().Spaces = Spaces; - Comments.back().NewLines = NewLines; - if (NewLines == 0) - Comments.back().MinColumn = WhitespaceStartColumn + Spaces; - else - Comments.back().MinColumn = Spaces; - Comments.back().MaxColumn = - Style.ColumnLimit - Tok.FormatTok.TokenLength; - return; + if (isTrailingComment(Tok)) { + // Remove the comment's trailing whitespace. + if (Tok.FormatTok.Tok.getLength() != Tok.FormatTok.TokenLength) + Replaces.insert(tooling::Replacement( + SourceMgr, Tok.FormatTok.Tok.getLocation().getLocWithOffset( + Tok.FormatTok.TokenLength), + Tok.FormatTok.Tok.getLength() - Tok.FormatTok.TokenLength, "")); + + // Align comment with other comments. + if (Tok.Parent != NULL || !Comments.empty()) { + if (Style.ColumnLimit >= + Spaces + WhitespaceStartColumn + Tok.FormatTok.TokenLength) { + Comments.push_back(StoredComment()); + Comments.back().Tok = Tok.FormatTok; + Comments.back().Spaces = Spaces; + Comments.back().NewLines = NewLines; + if (NewLines == 0) + Comments.back().MinColumn = WhitespaceStartColumn + Spaces; + else + Comments.back().MinColumn = Spaces; + Comments.back().MaxColumn = + Style.ColumnLimit - Tok.FormatTok.TokenLength; + return; + } } } @@ -1017,6 +1027,11 @@ public: GreaterStashed = true; } + // If we reformat comments, we remove trailing whitespace. Update the length + // accordingly. + if (FormatTok.Tok.is(tok::comment)) + FormatTok.TokenLength = Text.rtrim().size(); + return FormatTok; } |