Author: alexfh Date: Thu Jan 2 09:13:14 2014 New Revision: 198310 URL: http://llvm.org/viewvc/llvm-project?rev=198310&view=rev Log: Added an option to avoid splitting certain kinds of comments into lines.
Summary: Added CommentPragmas option for this. Reviewers: djasper, klimek Reviewed By: klimek CC: cfe-commits, klimek Differential Revision: http://llvm-reviews.chandlerc.com/D2460 Modified: cfe/trunk/include/clang/Format/Format.h cfe/trunk/lib/Format/ContinuationIndenter.cpp cfe/trunk/lib/Format/ContinuationIndenter.h cfe/trunk/lib/Format/Format.cpp cfe/trunk/unittests/Format/FormatTest.cpp Modified: cfe/trunk/include/clang/Format/Format.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=198310&r1=198309&r2=198310&view=diff ============================================================================== --- cfe/trunk/include/clang/Format/Format.h (original) +++ cfe/trunk/include/clang/Format/Format.h Thu Jan 2 09:13:14 2014 @@ -283,6 +283,10 @@ struct FormatStyle { /// \brief Indent width for line continuations. unsigned ContinuationIndentWidth; + /// \brief A regular expression that describes comments with special meaning, + /// which should not be split into lines or otherwise changed. + std::string CommentPragmas; + bool operator==(const FormatStyle &R) const { return AccessModifierOffset == R.AccessModifierOffset && ConstructorInitializerIndentWidth == @@ -334,7 +338,8 @@ struct FormatStyle { SpacesInCStyleCastParentheses == R.SpacesInCStyleCastParentheses && SpaceBeforeParens == R.SpaceBeforeParens && SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators && - ContinuationIndentWidth == R.ContinuationIndentWidth; + ContinuationIndentWidth == R.ContinuationIndentWidth && + CommentPragmas == R.CommentPragmas; } }; Modified: cfe/trunk/lib/Format/ContinuationIndenter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/ContinuationIndenter.cpp?rev=198310&r1=198309&r2=198310&view=diff ============================================================================== --- cfe/trunk/lib/Format/ContinuationIndenter.cpp (original) +++ cfe/trunk/lib/Format/ContinuationIndenter.cpp Thu Jan 2 09:13:14 2014 @@ -63,7 +63,8 @@ ContinuationIndenter::ContinuationIndent bool BinPackInconclusiveFunctions) : Style(Style), SourceMgr(SourceMgr), Whitespaces(Whitespaces), Encoding(Encoding), - BinPackInconclusiveFunctions(BinPackInconclusiveFunctions) {} + BinPackInconclusiveFunctions(BinPackInconclusiveFunctions), + CommentPragmasRegex(Style.CommentPragmas) {} LineState ContinuationIndenter::getInitialState(unsigned FirstIndent, const AnnotatedLine *Line, @@ -810,12 +811,16 @@ unsigned ContinuationIndenter::breakProt return 0; } } else if (Current.Type == TT_BlockComment && Current.isTrailingComment()) { + if (CommentPragmasRegex.match(Current.TokenText.substr(2))) + return 0; Token.reset(new BreakableBlockComment( Current, State.Line->Level, StartColumn, Current.OriginalColumn, !Current.Previous, State.Line->InPPDirective, Encoding, Style)); } else if (Current.Type == TT_LineComment && (Current.Previous == NULL || Current.Previous->Type != TT_ImplicitStringLiteral)) { + if (CommentPragmasRegex.match(Current.TokenText.substr(2))) + return 0; Token.reset(new BreakableLineComment(Current, State.Line->Level, StartColumn, /*InPPDirective=*/false, Encoding, Style)); Modified: cfe/trunk/lib/Format/ContinuationIndenter.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/ContinuationIndenter.h?rev=198310&r1=198309&r2=198310&view=diff ============================================================================== --- cfe/trunk/lib/Format/ContinuationIndenter.h (original) +++ cfe/trunk/lib/Format/ContinuationIndenter.h Thu Jan 2 09:13:14 2014 @@ -18,6 +18,7 @@ #include "Encoding.h" #include "clang/Format/Format.h" +#include "llvm/Support/Regex.h" namespace clang { class SourceManager; @@ -122,6 +123,7 @@ private: WhitespaceManager &Whitespaces; encoding::Encoding Encoding; bool BinPackInconclusiveFunctions; + llvm::Regex CommentPragmasRegex; }; struct ParenState { Modified: cfe/trunk/lib/Format/Format.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=198310&r1=198309&r2=198310&view=diff ============================================================================== --- cfe/trunk/lib/Format/Format.cpp (original) +++ cfe/trunk/lib/Format/Format.cpp Thu Jan 2 09:13:14 2014 @@ -193,6 +193,7 @@ template <> struct MappingTraits<FormatS IO.mapOptional("SpaceBeforeAssignmentOperators", Style.SpaceBeforeAssignmentOperators); IO.mapOptional("ContinuationIndentWidth", Style.ContinuationIndentWidth); + IO.mapOptional("CommentPragmas", Style.CommentPragmas); // For backward compatibility. if (!IO.outputting()) { @@ -275,6 +276,7 @@ FormatStyle getLLVMStyle() { LLVMStyle.SpaceBeforeAssignmentOperators = true; LLVMStyle.ContinuationIndentWidth = 4; LLVMStyle.SpacesInAngles = false; + LLVMStyle.CommentPragmas = "^ IWYU pragma:"; LLVMStyle.PenaltyBreakComment = 300; LLVMStyle.PenaltyBreakFirstLessLess = 120; Modified: cfe/trunk/unittests/Format/FormatTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=198310&r1=198309&r2=198310&view=diff ============================================================================== --- cfe/trunk/unittests/Format/FormatTest.cpp (original) +++ cfe/trunk/unittests/Format/FormatTest.cpp Thu Jan 2 09:13:14 2014 @@ -1045,6 +1045,17 @@ TEST_F(FormatTest, DontSplitLineComments getLLVMStyleWithColumns(49))); } +TEST_F(FormatTest, DontSplitLineCommentsWithPragmas) { + FormatStyle Pragmas = getLLVMStyleWithColumns(30); + Pragmas.CommentPragmas = "^ IWYU pragma:"; + EXPECT_EQ( + "// IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb", + format("// IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb", Pragmas)); + EXPECT_EQ( + "/* IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb */", + format("/* IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb */", Pragmas)); +} + TEST_F(FormatTest, PriorityOfCommentBreaking) { EXPECT_EQ("if (xxx ==\n" " yyy && // aaaaaaaaaaaa bbbbbbbbb\n" _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
