Author: Björn Schäpers Date: 2021-03-01T21:28:14+01:00 New Revision: 418b4a7b3158b47043c4c8891eb2e27966a55fa2
URL: https://github.com/llvm/llvm-project/commit/418b4a7b3158b47043c4c8891eb2e27966a55fa2 DIFF: https://github.com/llvm/llvm-project/commit/418b4a7b3158b47043c4c8891eb2e27966a55fa2.diff LOG: [clang-format] Respect spaces in line comment section... ... without an active column limit. Before line comments were not touched at all with ColumnLimit == 0. Differential Revision: https://reviews.llvm.org/D96896 Added: Modified: clang/lib/Format/ContinuationIndenter.cpp clang/unittests/Format/FormatTest.cpp clang/unittests/Format/FormatTestComments.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 7198671901f3..ffb328f7de13 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -1993,6 +1993,11 @@ ContinuationIndenter::breakProtrudingToken(const FormatToken &Current, // We don't insert backslashes when breaking line comments. ColumnLimit = Style.ColumnLimit; } + if (ColumnLimit == 0) { + // To make the rest of the function easier set the column limit to the + // maximum, if there should be no limit. + ColumnLimit = std::numeric_limits<decltype(ColumnLimit)>::max(); + } if (Current.UnbreakableTailLength >= ColumnLimit) return {0, false}; // ColumnWidth was already accounted into State.Column before calling diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 8bb90e0d6e61..d8bf3567e38e 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -19253,6 +19253,33 @@ TEST_F(FormatTest, IndentAccessModifiers) { "};\n", Style); } + +TEST_F(FormatTest, LimitlessStringsAndComments) { + auto Style = getLLVMStyleWithColumns(0); + constexpr StringRef Code = + "/**\n" + " * This is a multiline comment with quite some long lines, at least for " + "the LLVM Style.\n" + " * We will redo this with strings and line comments. Just to check if " + "everything is working.\n" + " */\n" + "bool foo() {\n" + " /* Single line multi line comment. */\n" + " const std::string String = \"This is a multiline string with quite " + "some long lines, at least for the LLVM Style.\"\n" + " \"We already did it with multi line " + "comments, and we will do it with line comments. Just to check if " + "everything is working.\";\n" + " // This is a line comment (block) with quite some long lines, at " + "least for the LLVM Style.\n" + " // We already did this with multi line comments and strings. Just to " + "check if everything is working.\n" + " const std::string SmallString = \"Hello World\";\n" + " // Small line comment\n" + " return String.size() > SmallString.size();\n" + "}"; + EXPECT_EQ(Code, format(Code, Style)); +} } // namespace } // namespace format } // namespace clang diff --git a/clang/unittests/Format/FormatTestComments.cpp b/clang/unittests/Format/FormatTestComments.cpp index 108028e396a1..2a7ead62ba5b 100644 --- a/clang/unittests/Format/FormatTestComments.cpp +++ b/clang/unittests/Format/FormatTestComments.cpp @@ -3793,6 +3793,189 @@ TEST_F(FormatTestComments, SpaceAtLineCommentBegin) { "int i;// A Comment to be moved\n" " // with indent\n", Style)); + + Style = getLLVMStyleWithColumns(0); + EXPECT_EQ("// Free comment without space\n" + "\n" + "// Free comment with 3 spaces\n" + "\n" + "/// Free Doxygen without space\n" + "\n" + "/// Free Doxygen with 3 spaces\n" + "\n" + "/// A Doxygen Comment with a nested list:\n" + "/// - Foo\n" + "/// - Bar\n" + "/// - Baz\n" + "/// - End\n" + "/// of the inner list\n" + "/// .\n" + "/// .\n" + "\n" + "namespace Foo {\n" + "bool bar(bool b) {\n" + " bool ret1 = true; ///< Doxygenstyle without space\n" + " bool ret2 = true; ///< Doxygenstyle with 3 spaces\n" + " if (b) {\n" + " // Foo\n" + "\n" + " // In function comment\n" + " ret2 = false;\n" + " } // End of if\n" + "\n" + " // if (ret1) {\n" + " // return ret2;\n" + " // }\n" + "\n" + " // if (ret1) {\n" + " // return ret2;\n" + " // }\n" + "\n" + " return ret1 && ret2;\n" + "}\n" + "} // namespace Foo\n" + "\n" + "namespace Bar {\n" + "int foo();\n" + "} // namespace Bar\n" + "//@Nothing added because of the non ascii char\n" + "\n" + "//@ Nothing removed because of the non ascii char\n" + "\n" + "// Comment to move to the left\n" + "// But not this?\n" + "// @but this\n" + "\n" + "// Comment to move to the right\n" + "//@ this stays\n" + "\n" + "//} will not move\n" + "\n" + "// vv will only move\n" + "// } if the line above does\n", + format(Code, Style)); + + Style.SpacesInLineCommentPrefix = {0, 0}; + EXPECT_EQ("//Free comment without space\n" + "\n" + "//Free comment with 3 spaces\n" + "\n" + "///Free Doxygen without space\n" + "\n" + "///Free Doxygen with 3 spaces\n" + "\n" + "///A Doxygen Comment with a nested list:\n" + "///- Foo\n" + "///- Bar\n" + "/// - Baz\n" // Here we keep the relative indentation + "/// - End\n" + "/// of the inner list\n" + "/// .\n" + "///.\n" + "\n" + "namespace Foo {\n" + "bool bar(bool b) {\n" + " bool ret1 = true; ///<Doxygenstyle without space\n" + " bool ret2 = true; ///<Doxygenstyle with 3 spaces\n" + " if (b) {\n" + " //Foo\n" + "\n" + " //In function comment\n" + " ret2 = false;\n" + " } //End of if\n" + "\n" + " //if (ret1) {\n" + " // return ret2;\n" + " //}\n" + "\n" + " //if (ret1) {\n" + " // return ret2;\n" + " //}\n" + "\n" + " return ret1 && ret2;\n" + "}\n" + "} //namespace Foo\n" + "\n" + "namespace Bar {\n" + "int foo();\n" + "} //namespace Bar\n" + "//@Nothing added because of the non ascii char\n" + "\n" + "//@ Nothing removed because of the non ascii char\n" + "\n" + "//Comment to move to the left\n" + "//But not this?\n" + "//@but this\n" + "\n" + "//Comment to move to the right\n" + "//@ this stays\n" + "\n" + "//} will not move\n" + "\n" + "//vv will only move\n" + "//} if the line above does\n", + format(Code, Style)); + + Style.SpacesInLineCommentPrefix = {2, -1u}; + EXPECT_EQ("// Free comment without space\n" + "\n" + "// Free comment with 3 spaces\n" + "\n" + "/// Free Doxygen without space\n" + "\n" + "/// Free Doxygen with 3 spaces\n" + "\n" + "/// A Doxygen Comment with a nested list:\n" + "/// - Foo\n" + "/// - Bar\n" + "/// - Baz\n" + "/// - End\n" + "/// of the inner list\n" + "/// .\n" + "/// .\n" + "\n" + "namespace Foo {\n" + "bool bar(bool b) {\n" + " bool ret1 = true; ///< Doxygenstyle without space\n" + " bool ret2 = true; ///< Doxygenstyle with 3 spaces\n" + " if (b) {\n" + " // Foo\n" + "\n" + " // In function comment\n" + " ret2 = false;\n" + " } // End of if\n" + "\n" + " // if (ret1) {\n" + " // return ret2;\n" + " // }\n" + "\n" + " // if (ret1) {\n" + " // return ret2;\n" + " // }\n" + "\n" + " return ret1 && ret2;\n" + "}\n" + "} // namespace Foo\n" + "\n" + "namespace Bar {\n" + "int foo();\n" + "} // namespace Bar\n" + "//@Nothing added because of the non ascii char\n" + "\n" + "//@ Nothing removed because of the non ascii char\n" + "\n" + "// Comment to move to the left\n" + "// But not this?\n" + "// @but this\n" + "\n" + "// Comment to move to the right\n" + "//@ this stays\n" + "\n" + "//} will not move\n" + "\n" + "// vv will only move\n" + "// } if the line above does\n", + format(Code, Style)); } } // end namespace _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits