[PATCH] D21323: [clang-format] do not add existing includes.
Eric Liu via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 14 06:42:37 PDT 2016
ioeric updated this revision to Diff 60675.
ioeric marked an inline comment as done.
ioeric added a comment.
- Addressed reviewer's comments: test case added.
http://reviews.llvm.org/D21323
Files:
lib/Format/Format.cpp
unittests/Format/CleanupTest.cpp
Index: unittests/Format/CleanupTest.cpp
===================================================================
--- unittests/Format/CleanupTest.cpp
+++ unittests/Format/CleanupTest.cpp
@@ -688,6 +688,23 @@
EXPECT_EQ(Expected, apply(Code, Replaces));
}
+TEST_F(CleanUpReplacementsTest, SkipExistingHeaders) {
+ std::string Code = "#include \"a.h\"\n#include <vector>\n";
+ std::string Expected = "#include \"a.h\"\n#include <vector>\n";
+ tooling::Replacements Replaces = {createInsertion("#include <vector>"),
+ createInsertion("#include \"a.h\"")};
+ EXPECT_EQ(Expected, apply(Code, Replaces));
+}
+
+TEST_F(CleanUpReplacementsTest, AddIncludesWithDifferentForms) {
+ std::string Code = "#include \"a.h\"\n#include <vector>\n";
+ std::string Expected = "#include \"a.h\"\n#include \"vector\"\n"
+ "#include <vector>\n#include <a.h>\n";
+ tooling::Replacements Replaces = {createInsertion("#include \"vector\""),
+ createInsertion("#include <a.h>")};
+ EXPECT_EQ(Expected, apply(Code, Replaces));
+}
+
} // end namespace
} // end namespace format
} // end namespace clang
Index: lib/Format/Format.cpp
===================================================================
--- lib/Format/Format.cpp
+++ lib/Format/Format.cpp
@@ -1486,7 +1486,6 @@
// code.
// FIXME: do not insert headers into conditional #include blocks, e.g. #includes
// surrounded by compile condition "#if...".
-// FIXME: do not insert existing headers.
// FIXME: insert empty lines between newly created blocks.
tooling::Replacements
fixCppIncludeInsertions(StringRef Code, const tooling::Replacements &Replaces,
@@ -1533,10 +1532,12 @@
TrimmedCode.split(Lines, '\n');
unsigned Offset = MinInsertOffset;
unsigned NextLineOffset;
+ std::set<StringRef> ExistingIncludes;
for (auto Line : Lines) {
NextLineOffset = std::min(Code.size(), Offset + Line.size() + 1);
if (IncludeRegex.match(Line, &Matches)) {
StringRef IncludeName = Matches[2];
+ ExistingIncludes.insert(IncludeName);
int Category = Categories.getIncludePriority(
IncludeName, /*CheckMainHeader=*/FirstIncludeOffset < 0);
CategoryEndOffsets[Category] = NextLineOffset;
@@ -1572,6 +1573,11 @@
"'#include ...'");
(void)Matched;
auto IncludeName = Matches[2];
+ if (ExistingIncludes.find(IncludeName) != ExistingIncludes.end()) {
+ DEBUG(llvm::dbgs() << "Skip adding existing include : " << IncludeName
+ << "\n");
+ continue;
+ }
int Category =
Categories.getIncludePriority(IncludeName, /*CheckMainHeader=*/true);
Offset = CategoryEndOffsets[Category];
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D21323.60675.patch
Type: text/x-patch
Size: 2747 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160614/6555a3fd/attachment-0001.bin>
More information about the cfe-commits
mailing list