diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 8d08c3d2622734961d0342c2d11f7b9834e05f17..2f1aae39344d65b33f01c59be4bb10f55af06c17 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -1876,7 +1876,12 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line, bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line, const FormatToken &Right) { const FormatToken &Left = *Right.Previous; - if (Style.Language == FormatStyle::LK_Proto) { + if (Right.Tok.getIdentifierInfo() && Left.Tok.getIdentifierInfo()) + return true; // Never ever merge two identifiers. + if (Style.Language == FormatStyle::LK_Cpp) { + if (Left.is(tok::kw_operator)) + return Right.is(tok::coloncolon); + } else if (Style.Language == FormatStyle::LK_Proto) { if (Right.is(tok::period) && Left.isOneOf(Keywords.kw_optional, Keywords.kw_required, Keywords.kw_repeated)) @@ -1913,8 +1918,6 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line, Right.is(TT_TemplateOpener)) return true; } - if (Right.Tok.getIdentifierInfo() && Left.Tok.getIdentifierInfo()) - return true; // Never ever merge two identifiers. if (Left.is(TT_ImplicitStringLiteral)) return Right.WhitespaceRange.getBegin() != Right.WhitespaceRange.getEnd(); if (Line.Type == LT_ObjCMethodDecl) { @@ -1937,8 +1940,6 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line, return false; if (Right.isOneOf(TT_CtorInitializerColon, TT_ObjCBlockLParen)) return true; - if (Left.is(tok::kw_operator)) - return Right.is(tok::coloncolon); if (Right.is(TT_OverloadedOperatorLParen)) return false; if (Right.is(tok::colon)) { diff --git a/unittests/Format/FormatTestProto.cpp b/unittests/Format/FormatTestProto.cpp index ac8fcbdda4fcf3a36d5f8ca44b4ab981fa75f9ba..74f7005b219fb428e63b43e9ae210c3ed87fe015 100644 --- a/unittests/Format/FormatTestProto.cpp +++ b/unittests/Format/FormatTestProto.cpp @@ -63,6 +63,10 @@ TEST_F(FormatTestProto, FormatsMessages) { "}"); } +TEST_F(FormatTestProto, KeywordsInOtherLanguages) { + verifyFormat("optional string operator = 1;"); +} + TEST_F(FormatTestProto, FormatsEnums) { verifyFormat("enum Type {\n" " UNKNOWN = 0;\n"