[clangd] Don't index template specializations.
Summary: These have different USRs than the underlying entity, but are not typically interesting in their own right and can be numerous (e.g. generated traits). Reviewers: ioeric Subscribers: klimek, ilya-biryukov, jkorous-apple, cfe-commits Differential Revision: https://reviews.llvm.org/D44298 llvm-svn: 327127
This commit is contained in:
parent
3e77b20dba
commit
824913bdb7
|
@ -115,10 +115,16 @@ bool shouldFilterDecl(const NamedDecl *ND, ASTContext *ASTCtx,
|
|||
// * enum constants in unscoped enum decl (e.g. "red" in "enum {red};")
|
||||
auto InTopLevelScope = hasDeclContext(
|
||||
anyOf(namespaceDecl(), translationUnitDecl(), linkageSpecDecl()));
|
||||
// Don't index template specializations.
|
||||
auto IsSpecialization =
|
||||
anyOf(functionDecl(isExplicitTemplateSpecialization()),
|
||||
cxxRecordDecl(isExplicitTemplateSpecialization()),
|
||||
varDecl(isExplicitTemplateSpecialization()));
|
||||
if (match(decl(allOf(unless(isExpansionInMainFile()),
|
||||
anyOf(InTopLevelScope,
|
||||
hasDeclContext(enumDecl(InTopLevelScope,
|
||||
unless(isScoped())))))),
|
||||
unless(isScoped())))),
|
||||
unless(IsSpecialization))),
|
||||
*ND, *ASTCtx)
|
||||
.empty())
|
||||
return true;
|
||||
|
|
|
@ -198,6 +198,19 @@ TEST_F(SymbolCollectorTest, CollectSymbols) {
|
|||
QName("foo::bar::v2"), QName("foo::baz")}));
|
||||
}
|
||||
|
||||
TEST_F(SymbolCollectorTest, Template) {
|
||||
Annotations Header(R"(
|
||||
// Template is indexed, specialization and instantiation is not.
|
||||
template <class T> struct [[Tmpl]] {T x = 0};
|
||||
template <> struct Tmpl<int> {};
|
||||
extern template struct Tmpl<float>;
|
||||
template struct Tmpl<double>;
|
||||
)");
|
||||
runSymbolCollector(Header.code(), /*Main=*/"");
|
||||
EXPECT_THAT(Symbols, UnorderedElementsAreArray({AllOf(
|
||||
QName("Tmpl"), DeclRange(Header.offsetRange()))}));
|
||||
}
|
||||
|
||||
TEST_F(SymbolCollectorTest, Locations) {
|
||||
Annotations Header(R"cpp(
|
||||
// Declared in header, defined in main.
|
||||
|
|
Loading…
Reference in New Issue