https://github.com/owenca updated https://github.com/llvm/llvm-project/pull/120680
>From 8821857ea4d10c4122b5b9d7fefd005169f8852a Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Thu, 19 Dec 2024 19:59:23 -0800 Subject: [PATCH] [clang-format] Skip line splices when sorting C++ includes Fixes #109864. --- clang/lib/Format/Format.cpp | 11 +++++++++-- clang/unittests/Format/SortIncludesTest.cpp | 12 ++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index dcaac4b0d42cc5..95129a8fe9240c 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -3246,8 +3246,15 @@ tooling::Replacements sortCppIncludes(const FormatStyle &Style, StringRef Code, SmallVector<StringRef, 2> RawStringMatches; std::string RawStringTermination = ")\""; - for (;;) { - auto Pos = Code.find('\n', SearchFrom); + for (const auto Size = Code.size(); SearchFrom < Size;) { + size_t Pos = SearchFrom; + if (Code[SearchFrom] != '\n') { + do { // Search for the first newline while skipping line splices. + ++Pos; + Pos = Code.find('\n', Pos); + } while (Pos != StringRef::npos && Code[Pos - 1] == '\\'); + } + StringRef Line = Code.substr(Prev, (Pos != StringRef::npos ? Pos : Code.size()) - Prev); diff --git a/clang/unittests/Format/SortIncludesTest.cpp b/clang/unittests/Format/SortIncludesTest.cpp index 31753825646373..cb3f8c73a04871 100644 --- a/clang/unittests/Format/SortIncludesTest.cpp +++ b/clang/unittests/Format/SortIncludesTest.cpp @@ -984,6 +984,18 @@ TEST_F(SortIncludesTest, SortAndDeduplicateIncludes) { "#include <c>\n" "#include <b>")); + verifyFormat("/* COPYRIGHT *\\\n" + "\\* (C) 2024 */\n" + "\n" + "#include <a>\n" + "#include <b>", + sort("/* COPYRIGHT *\\\n" + "\\* (C) 2024 */\n" + "\n" + "#include <b>\n" + "#include <a>\n" + "#include <b>")); + Style.IncludeBlocks = tooling::IncludeStyle::IBS_Merge; verifyFormat("#include <a>\n" "#include <b>\n" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits