[clang-format] Skip block commented out includes when sorting them (#97787)

Fixes #97539.
This commit is contained in:
Owen Pan 2024-07-05 15:28:16 -07:00 committed by GitHub
parent 34855405b0
commit ceade83ad5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 4 deletions

View File

@ -3222,10 +3222,16 @@ tooling::Replacements sortCppIncludes(const FormatStyle &Style, StringRef Code,
if (Trimmed.contains(RawStringTermination))
FormattingOff = false;
if (isClangFormatOff(Trimmed))
bool IsBlockComment = false;
if (isClangFormatOff(Trimmed)) {
FormattingOff = true;
else if (isClangFormatOn(Trimmed))
} else if (isClangFormatOn(Trimmed)) {
FormattingOff = false;
} else if (Trimmed.starts_with("/*")) {
IsBlockComment = true;
Pos = Code.find("*/", SearchFrom + 2);
}
const bool EmptyLineSkipped =
Trimmed.empty() &&
@ -3235,9 +3241,10 @@ tooling::Replacements sortCppIncludes(const FormatStyle &Style, StringRef Code,
bool MergeWithNextLine = Trimmed.ends_with("\\");
if (!FormattingOff && !MergeWithNextLine) {
if (tooling::HeaderIncludes::IncludeRegex.match(Line, &Matches)) {
if (!IsBlockComment &&
tooling::HeaderIncludes::IncludeRegex.match(Trimmed, &Matches)) {
StringRef IncludeName = Matches[2];
if (Line.contains("/*") && !Line.contains("*/")) {
if (Trimmed.contains("/*") && !Trimmed.contains("*/")) {
// #include with a start of a block comment, but without the end.
// Need to keep all the lines until the end of the comment together.
// FIXME: This is somehow simplified check that probably does not work

View File

@ -1455,6 +1455,15 @@ TEST_F(SortIncludesTest, DisableRawStringLiteralSorting) {
#undef X
}
TEST_F(SortIncludesTest, BlockCommentedOutIncludes) {
StringRef Code{"/* #include \"foo.h\"\n"
"#include \"bar.h\" */\n"
"#include <chrono>"};
FmtStyle = getGoogleStyle(FormatStyle::LK_Cpp);
verifyFormat(Code, sort(Code, "input.cpp", 0));
}
} // end namespace
} // end namespace format
} // end namespace clang