Author: alexfh Date: Mon Mar 10 08:14:56 2014 New Revision: 203458 URL: http://llvm.org/viewvc/llvm-project?rev=203458&view=rev Log: Preserve hanging indent when breaking line comments.
Summary: If we need to break the second line here: // something: aaaaa aaaaa aaaaaa aaaaa aaaaa // aaaaa aaaaa aaaaaa aaaaa aaaaa aaaaa with the patch it will be turned to // something: aaaaa aaaaa aaaaaa aaaaa aaaaa // aaaaa aaaaa aaaaaa aaaaa aaaaa // aaaaa instead of // something: aaaaa aaaaa aaaaaa aaaaa aaaaa // aaaaa aaaaa aaaaaa aaaaa aaaaa // aaaaa Reviewers: djasper, klimek Reviewed By: klimek CC: cfe-commits, klimek Differential Revision: http://llvm-reviews.chandlerc.com/D2988 Modified: cfe/trunk/lib/Format/BreakableToken.cpp cfe/trunk/unittests/Format/FormatTest.cpp Modified: cfe/trunk/lib/Format/BreakableToken.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/BreakableToken.cpp?rev=203458&r1=203457&r2=203458&view=diff ============================================================================== --- cfe/trunk/lib/Format/BreakableToken.cpp (original) +++ cfe/trunk/lib/Format/BreakableToken.cpp Mon Mar 10 08:14:56 2014 @@ -184,19 +184,26 @@ void BreakableStringLiteral::insertBreak Prefix, InPPDirective, 1, IndentLevel, LeadingSpaces); } -static StringRef getLineCommentPrefix(StringRef Comment) { - static const char *const KnownPrefixes[] = { "/// ", "///", "// ", "//" }; - for (size_t i = 0, e = llvm::array_lengthof(KnownPrefixes); i != e; ++i) - if (Comment.startswith(KnownPrefixes[i])) - return KnownPrefixes[i]; - return ""; +static StringRef getLineCommentIndentPrefix(StringRef Comment) { + static const char *const KnownPrefixes[] = { "///", "//" }; + StringRef LongestPrefix; + for (StringRef KnownPrefix : KnownPrefixes) { + if (Comment.startswith(KnownPrefix)) { + size_t PrefixLength = KnownPrefix.size(); + while (PrefixLength < Comment.size() && Comment[PrefixLength] == ' ') + ++PrefixLength; + if (PrefixLength > LongestPrefix.size()) + LongestPrefix = Comment.substr(0, PrefixLength); + } + } + return LongestPrefix; } BreakableLineComment::BreakableLineComment( const FormatToken &Token, unsigned IndentLevel, unsigned StartColumn, bool InPPDirective, encoding::Encoding Encoding, const FormatStyle &Style) : BreakableSingleLineToken(Token, IndentLevel, StartColumn, - getLineCommentPrefix(Token.TokenText), "", + getLineCommentIndentPrefix(Token.TokenText), "", InPPDirective, Encoding, Style) { OriginalPrefix = Prefix; if (Token.TokenText.size() > Prefix.size() && Modified: cfe/trunk/unittests/Format/FormatTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=203458&r1=203457&r2=203458&view=diff ============================================================================== --- cfe/trunk/unittests/Format/FormatTest.cpp (original) +++ cfe/trunk/unittests/Format/FormatTest.cpp Mon Mar 10 08:14:56 2014 @@ -1026,6 +1026,21 @@ TEST_F(FormatTest, SplitsLongCxxComments format("#define XXX //q w e r t y u i", getLLVMStyleWithColumns(22))); } +TEST_F(FormatTest, PreservesHangingIndentInCxxComments) { + EXPECT_EQ("// A comment\n" + "// that doesn't\n" + "// fit on one\n" + "// line", + format("// A comment that doesn't fit on one line", + getLLVMStyleWithColumns(20))); + EXPECT_EQ("/// A comment\n" + "/// that doesn't\n" + "/// fit on one\n" + "/// line", + format("/// A comment that doesn't fit on one line", + getLLVMStyleWithColumns(20))); +} + TEST_F(FormatTest, DontSplitLineCommentsWithEscapedNewlines) { EXPECT_EQ("// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n" "// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n" _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
