[clang] c1b209c - [Format] Don't treat compound extension headers (foo.proto.h) as foo.cc main-file header.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 1 10:58:12 PDT 2020
Author: Haojian Wu
Date: 2020-10-01T19:57:57+02:00
New Revision: c1b209cc61290f1ce1243470b825e0994645cb7d
URL: https://github.com/llvm/llvm-project/commit/c1b209cc61290f1ce1243470b825e0994645cb7d
DIFF: https://github.com/llvm/llvm-project/commit/c1b209cc61290f1ce1243470b825e0994645cb7d.diff
LOG: [Format] Don't treat compound extension headers (foo.proto.h) as foo.cc main-file header.
We receive internal bugs about this false positives after D86597.
Differential Revision: https://reviews.llvm.org/D88640.
Added:
Modified:
clang/lib/Tooling/Inclusions/HeaderIncludes.cpp
clang/unittests/Format/SortIncludesTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp b/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp
index e0368975ea3e..0cc4afa4ade6 100644
--- a/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp
+++ b/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp
@@ -233,7 +233,12 @@ int IncludeCategoryManager::getSortIncludePriority(StringRef IncludeName,
bool IncludeCategoryManager::isMainHeader(StringRef IncludeName) const {
if (!IncludeName.startswith("\""))
return false;
- StringRef HeaderStem = matchingStem(IncludeName.drop_front(1).drop_back(1));
+
+ // Not matchingStem: implementation files may have compound extensions but
+ // headers may not.
+ StringRef HeaderStem =
+ llvm::sys::path::stem(IncludeName.drop_front(1).drop_back(
+ 1) /* remove the surrounding "" or <> */);
if (FileStem.startswith(HeaderStem) ||
FileStem.startswith_lower(HeaderStem)) {
llvm::Regex MainIncludeRegex(HeaderStem.str() + Style.IncludeIsMainRegex,
diff --git a/clang/unittests/Format/SortIncludesTest.cpp b/clang/unittests/Format/SortIncludesTest.cpp
index db3ed65d443b..c327be5e6b0b 100644
--- a/clang/unittests/Format/SortIncludesTest.cpp
+++ b/clang/unittests/Format/SortIncludesTest.cpp
@@ -151,6 +151,16 @@ TEST_F(SortIncludesTest, NoReplacementsForValidIncludes) {
EXPECT_TRUE(sortIncludes(FmtStyle, Code, GetCodeRange(Code), "a.cc").empty());
}
+TEST_F(SortIncludesTest, NoMainFileHeader) {
+ std::string Code = "#include <string>\n"
+ "\n"
+ "#include \"a/extra_action.proto.h\"\n";
+ FmtStyle = getGoogleStyle(FormatStyle::LK_Cpp);
+ EXPECT_TRUE(
+ sortIncludes(FmtStyle, Code, GetCodeRange(Code), "a/extra_action.cc")
+ .empty());
+}
+
TEST_F(SortIncludesTest, SortedIncludesInMultipleBlocksAreMerged) {
Style.IncludeBlocks = tooling::IncludeStyle::IBS_Merge;
EXPECT_EQ("#include \"a.h\"\n"
More information about the cfe-commits
mailing list