forked from OSchip/llvm-project
[clangd] Suppress IncludeCleaner warnings for headers behind pragma keep
D114072 allows filtering out the warnings for headers behind `// IWYU pragma: keep`. This is the first step towards more useful IWYU pragmas support and fine-grained control over the IncludeCleaner warnings. Reviewed By: kadircet Differential Revision: https://reviews.llvm.org/D115345
This commit is contained in:
parent
3257f63bbd
commit
b673bc36ea
|
@ -223,7 +223,7 @@ bool mayConsiderUnused(const Inclusion &Inc, ParsedAST &AST) {
|
|||
// headers are likely to be the Standard Library headers. Until we have a
|
||||
// good support for umbrella headers and Standard Library headers, don't warn
|
||||
// about them.
|
||||
if (Inc.Written.front() == '<')
|
||||
if (Inc.Written.front() == '<' || Inc.BehindPragmaKeep)
|
||||
return false;
|
||||
// Headers without include guards have side effects and are not
|
||||
// self-contained, skip them.
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "Annotations.h"
|
||||
#include "IncludeCleaner.h"
|
||||
#include "TestTU.h"
|
||||
#include "llvm/Testing/Support/SupportHelpers.h"
|
||||
#include "gmock/gmock.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
|
@ -17,6 +18,7 @@ namespace clangd {
|
|||
namespace {
|
||||
|
||||
using ::testing::ElementsAre;
|
||||
using ::testing::IsEmpty;
|
||||
using ::testing::UnorderedElementsAre;
|
||||
|
||||
std::string guard(llvm::StringRef Code) {
|
||||
|
@ -320,7 +322,7 @@ TEST(IncludeCleaner, VirtualBuffers) {
|
|||
EXPECT_THAT(ReferencedHeaderNames, ElementsAre(testPath("macros.h")));
|
||||
|
||||
// Sanity check.
|
||||
EXPECT_THAT(getUnused(AST, ReferencedHeaders), ::testing::IsEmpty());
|
||||
EXPECT_THAT(getUnused(AST, ReferencedHeaders), IsEmpty());
|
||||
}
|
||||
|
||||
TEST(IncludeCleaner, DistinctUnguardedInclusions) {
|
||||
|
@ -397,6 +399,21 @@ TEST(IncludeCleaner, NonSelfContainedHeaders) {
|
|||
UnorderedElementsAre(testPath("foo.h")));
|
||||
}
|
||||
|
||||
TEST(IncludeCleaner, IWYUPragmas) {
|
||||
TestTU TU;
|
||||
TU.Code = R"cpp(
|
||||
#include "behind_keep.h" // IWYU pragma: keep
|
||||
)cpp";
|
||||
TU.AdditionalFiles["behind_keep.h"] = guard("");
|
||||
ParsedAST AST = TU.build();
|
||||
|
||||
auto ReferencedFiles =
|
||||
findReferencedFiles(findReferencedLocations(AST),
|
||||
AST.getIncludeStructure(), AST.getSourceManager());
|
||||
EXPECT_TRUE(ReferencedFiles.empty());
|
||||
EXPECT_THAT(AST.getDiagnostics(), llvm::ValueIs(IsEmpty()));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace clangd
|
||||
} // namespace clang
|
||||
|
|
Loading…
Reference in New Issue