[include-fixer] Don't add missing header if the unindentified symbol isn't from the main file.
Summary: The further solution is to add the missing header to the file where the symbol comes from. Reviewers: bkramer Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D20950 llvm-svn: 271660
This commit is contained in:
parent
a6022c9a63
commit
9c6cb035f3
|
@ -86,6 +86,29 @@ public:
|
|||
if (getCompilerInstance().getSema().isSFINAEContext())
|
||||
return clang::TypoCorrection();
|
||||
|
||||
// We currently ignore the unidentified symbol which is not from the
|
||||
// main file.
|
||||
//
|
||||
// However, this is not always true due to templates in a non-self contained
|
||||
// header, consider the case:
|
||||
//
|
||||
// // header.h
|
||||
// template <typename T>
|
||||
// class Foo {
|
||||
// T t;
|
||||
// };
|
||||
//
|
||||
// // test.cc
|
||||
// // We need to add <bar.h> in test.cc instead of header.h.
|
||||
// class Bar;
|
||||
// Foo<Bar> foo;
|
||||
//
|
||||
// FIXME: Add the missing header to the header file where the symbol comes
|
||||
// from.
|
||||
if (!getCompilerInstance().getSourceManager().isWrittenInMainFile(
|
||||
Typo.getLoc()))
|
||||
return clang::TypoCorrection();
|
||||
|
||||
std::string TypoScopeString;
|
||||
if (S) {
|
||||
// FIXME: Currently we only use namespace contexts. Use other context
|
||||
|
|
|
@ -44,6 +44,8 @@ static bool runOnCode(tooling::ToolAction *ToolAction, StringRef Code,
|
|||
llvm::MemoryBuffer::getMemBuffer("\n"));
|
||||
InMemoryFileSystem->addFile("dir/otherdir/qux.h", 0,
|
||||
llvm::MemoryBuffer::getMemBuffer("\n"));
|
||||
InMemoryFileSystem->addFile("header.h", 0,
|
||||
llvm::MemoryBuffer::getMemBuffer("bar b;"));
|
||||
return Invocation.run();
|
||||
}
|
||||
|
||||
|
@ -186,6 +188,11 @@ TEST(IncludeFixer, EnumConstantSymbols) {
|
|||
runIncludeFixer("int test = a::b::Green;\n"));
|
||||
}
|
||||
|
||||
TEST(IncludeFixer, IgnoreSymbolFromHeader) {
|
||||
std::string Code = "#include \"header.h\"";
|
||||
EXPECT_EQ(Code, runIncludeFixer(Code));
|
||||
}
|
||||
|
||||
// FIXME: add test cases for inserting and sorting multiple headers when
|
||||
// include-fixer supports multiple headers insertion.
|
||||
TEST(IncludeFixer, InsertAndSortSingleHeader) {
|
||||
|
|
Loading…
Reference in New Issue