From 3c071a425e07ebd96f7a87cae30dc844a3e3b063 Mon Sep 17 00:00:00 2001 From: Owen Pan Date: Sun, 19 Nov 2023 14:59:53 -0800 Subject: [PATCH] [clang-format] Fix a bug in aligning comments above PPDirective (#72791) Fixed #72785. --- clang/lib/Format/TokenAnnotator.cpp | 4 ++-- clang/unittests/Format/FormatTestComments.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index a6cd3c68e30bca..1cc198ceec708d 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -3123,8 +3123,8 @@ void TokenAnnotator::setCommentLineLevels( // If the comment is currently aligned with the line immediately following // it, that's probably intentional and we should keep it. - if (NextNonCommentLine && !NextNonCommentLine->First->Finalized && - Line->isComment() && NextNonCommentLine->First->NewlinesBefore <= 1 && + if (NextNonCommentLine && NextNonCommentLine->First->NewlinesBefore < 2 && + Line->isComment() && !isClangFormatOff(Line->First->TokenText) && NextNonCommentLine->First->OriginalColumn == Line->First->OriginalColumn) { const bool PPDirectiveOrImportStmt = diff --git a/clang/unittests/Format/FormatTestComments.cpp b/clang/unittests/Format/FormatTestComments.cpp index 967ffa32db79c7..9770d5090703c7 100644 --- a/clang/unittests/Format/FormatTestComments.cpp +++ b/clang/unittests/Format/FormatTestComments.cpp @@ -1069,6 +1069,17 @@ TEST_F(FormatTestComments, KeepsLevelOfCommentBeforePPDirective) { " // clang-format on\n" "}"); verifyNoChange(Code); + + auto Style = getLLVMStyle(); + Style.IndentPPDirectives = FormatStyle::PPDIS_BeforeHash; + verifyFormat("#ifdef FOO\n" + " // Foo\n" + " #define Foo foo\n" + "#else\n" + " // Bar\n" + " #define Bar bar\n" + "#endif", + Style); } TEST_F(FormatTestComments, SplitsLongLinesInComments) {