From: Daniel Jasper Date: Mon, 11 Feb 2013 12:36:37 +0000 (+0000) Subject: Fix invalid formatting with spaces before trailing comments. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eef30490fd13fe4f460df5a18695215ddef2ace1;p=platform%2Fupstream%2Fllvm.git Fix invalid formatting with spaces before trailing comments. In google style, trailing comments are separated by two spaces. This patch fixes the counting of these spaces and prevents clang-format from creating a line with 81 columns. llvm-svn: 174879 --- diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index a78b650..ab71d59 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -489,9 +489,7 @@ private: (RootToken.is(tok::kw_for) || State.ParenLevel == 0)) State.VariablePos = State.Column - Previous.FormatTok.TokenLength; - unsigned Spaces = State.NextToken->SpaceRequiredBefore ? 1 : 0; - if (State.NextToken->Type == TT_LineComment) - Spaces = Style.SpacesBeforeTrailingComments; + unsigned Spaces = State.NextToken->SpacesRequiredBefore; if (!DryRun) Whitespaces.replaceWhitespace(Current, 0, Spaces, State.Column, Style); @@ -1099,7 +1097,7 @@ private: AnnotatedToken *Tok = &(I + 1)->First; if (Tok->Children.empty() && Tok->is(tok::r_brace) && !Tok->MustBreakBefore && Tok->TotalLength <= Limit) { - Tok->SpaceRequiredBefore = false; + Tok->SpacesRequiredBefore = 0; join(Line, *(I + 1)); I += 1; } else { diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index aecc24c..8f2e00e 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -778,7 +778,7 @@ void TokenAnnotator::annotate(AnnotatedLine &Line) { else if (Line.First.Type == TT_ObjCProperty) Line.Type = LT_ObjCProperty; - Line.First.SpaceRequiredBefore = true; + Line.First.SpacesRequiredBefore = 1; Line.First.MustBreakBefore = Line.First.FormatTok.MustBreakBefore; Line.First.CanBreakBefore = Line.First.MustBreakBefore; @@ -790,7 +790,11 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) { return; AnnotatedToken *Current = &Line.First.Children[0]; while (Current != NULL) { - Current->SpaceRequiredBefore = spaceRequiredBefore(Line, *Current); + if (Current->Type == TT_LineComment) + Current->SpacesRequiredBefore = Style.SpacesBeforeTrailingComments; + else + Current->SpacesRequiredBefore = + spaceRequiredBefore(Line, *Current) ? 1 : 0; if (Current->FormatTok.MustBreakBefore) { Current->MustBreakBefore = true; @@ -814,7 +818,7 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) { else Current->TotalLength = Current->Parent->TotalLength + Current->FormatTok.TokenLength + - (Current->SpaceRequiredBefore ? 1 : 0); + Current->SpacesRequiredBefore; // FIXME: Only calculate this if CanBreakBefore is true once static // initializers etc. are sorted out. // FIXME: Move magic numbers to a better place. diff --git a/clang/lib/Format/TokenAnnotator.h b/clang/lib/Format/TokenAnnotator.h index cc86bf8..c19b486 100644 --- a/clang/lib/Format/TokenAnnotator.h +++ b/clang/lib/Format/TokenAnnotator.h @@ -68,7 +68,7 @@ enum LineType { class AnnotatedToken { public: explicit AnnotatedToken(const FormatToken &FormatTok) - : FormatTok(FormatTok), Type(TT_Unknown), SpaceRequiredBefore(false), + : FormatTok(FormatTok), Type(TT_Unknown), SpacesRequiredBefore(0), CanBreakBefore(false), MustBreakBefore(false), ClosesTemplateDeclaration(false), MatchingParen(NULL), ParameterCount(1), BindingStrength(0), SplitPenalty(0), @@ -87,7 +87,7 @@ public: TokenType Type; - bool SpaceRequiredBefore; + unsigned SpacesRequiredBefore; bool CanBreakBefore; bool MustBreakBefore; diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 83e4fc5..97445c5 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -493,6 +493,9 @@ TEST_F(FormatTest, UnderstandsSingleLineComments) { " // B\n" " \"aaaaa\",\n" "};"); + verifyGoogleFormat( + "aaaaaaaaaaaaaaaaaaaaaaaaaa(\n" + " aaaaaaaaaaaaaaaaaaaaaa); // 81 cols with this comment"); } TEST_F(FormatTest, UnderstandsMultiLineComments) {