diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index a78b650dfad08401537863ba8e7cf4fd2396eb32..ab71d593599b03ab98bf497c1f8dc851799d595b 100644 --- a/lib/Format/Format.cpp +++ b/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/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index aecc24ca9c3eec323116d384072c1fbe65c753ef..8f2e00ebfd1afe47b16b14c30b8b5cecce20418c 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/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/lib/Format/TokenAnnotator.h b/lib/Format/TokenAnnotator.h index cc86bf8b85c3b2d9ac68d038e893727b4d01b244..c19b486c1c2306e57398ce4829373564e1ae8d9e 100644 --- a/lib/Format/TokenAnnotator.h +++ b/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/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 83e4fc54e394d3c329f4810f57c779b0f2984428..97445c56b105fdc26a5e3e24a9287a6d7a946199 100644 --- a/unittests/Format/FormatTest.cpp +++ b/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) {