owenpan created this revision. Herald added projects: All, clang, clang-format. Herald added a subscriber: cfe-commits. Herald added reviewers: rymiel, HazardyKnusperkeks, MyDeveloperDay. owenpan requested review of this revision.
Fixes https://github.com/llvm/llvm-project/issues/63393. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D156971 Files: clang/lib/Format/DefinitionBlockSeparator.cpp clang/unittests/Format/DefinitionBlockSeparatorTest.cpp Index: clang/unittests/Format/DefinitionBlockSeparatorTest.cpp =================================================================== --- clang/unittests/Format/DefinitionBlockSeparatorTest.cpp +++ clang/unittests/Format/DefinitionBlockSeparatorTest.cpp @@ -283,6 +283,15 @@ TEST_F(DefinitionBlockSeparatorTest, Always) { FormatStyle Style = getLLVMStyle(); Style.SeparateDefinitionBlocks = FormatStyle::SDS_Always; + + verifyFormat("// clang-format off\n" + "template<class T>\n" + "concept C = not A<S<T>>;\n" + "// clang-format on\n" + "\n" + "struct E {};", + Style); + std::string Prefix = "namespace {\n"; std::string Infix = "\n" "// Enum test1\n" Index: clang/lib/Format/DefinitionBlockSeparator.cpp =================================================================== --- clang/lib/Format/DefinitionBlockSeparator.cpp +++ clang/lib/Format/DefinitionBlockSeparator.cpp @@ -143,8 +143,10 @@ if (LikelyDefinition(OperateLine)) return false; - if (OperateLine->First->is(tok::comment)) + if (const auto *Tok = OperateLine->First; + Tok->is(tok::comment) && !isClangFormatOn(Tok->TokenText)) { return true; + } // A single line identifier that is not in the last line. if (OperateLine->First->is(tok::identifier) &&
Index: clang/unittests/Format/DefinitionBlockSeparatorTest.cpp =================================================================== --- clang/unittests/Format/DefinitionBlockSeparatorTest.cpp +++ clang/unittests/Format/DefinitionBlockSeparatorTest.cpp @@ -283,6 +283,15 @@ TEST_F(DefinitionBlockSeparatorTest, Always) { FormatStyle Style = getLLVMStyle(); Style.SeparateDefinitionBlocks = FormatStyle::SDS_Always; + + verifyFormat("// clang-format off\n" + "template<class T>\n" + "concept C = not A<S<T>>;\n" + "// clang-format on\n" + "\n" + "struct E {};", + Style); + std::string Prefix = "namespace {\n"; std::string Infix = "\n" "// Enum test1\n" Index: clang/lib/Format/DefinitionBlockSeparator.cpp =================================================================== --- clang/lib/Format/DefinitionBlockSeparator.cpp +++ clang/lib/Format/DefinitionBlockSeparator.cpp @@ -143,8 +143,10 @@ if (LikelyDefinition(OperateLine)) return false; - if (OperateLine->First->is(tok::comment)) + if (const auto *Tok = OperateLine->First; + Tok->is(tok::comment) && !isClangFormatOn(Tok->TokenText)) { return true; + } // A single line identifier that is not in the last line. if (OperateLine->First->is(tok::identifier) &&
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits