[PATCH] D71533: [clangd] Show template arguments in type hierarchy when possible
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 18 01:34:42 PST 2019
kadircet added inline comments.
================
Comment at: clang-tools-extra/clangd/XRefs.cpp:687
- const Decl *D = Decls[0];
+ const Decl *D = nullptr;
+ for (const Decl *Candidate : Decls) {
----------------
maybe just
```
const Decl *D = Decls.front()
for(const auto *C : Decls) {
if(isa<ClassTempl...>(C)) {
D = C;
break;
}
}
```
================
Comment at: clang-tools-extra/clangd/XRefs.cpp:773
+ // specializations, so if we have one, use the template pattern instead.
+ if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(CXXRD)) {
+ CXXRD = CTSD->getTemplateInstantiationPattern();
----------------
nit: no need for braces
================
Comment at: clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp:418
+ EXPECT_THAT(*Result,
+ AllOf(WithName("S<0>"), WithKind(SymbolKind::Struct), Parents()));
}
----------------
what about making use of template pattern in case of invalid instantiations?
as type hierarchy tries to provide information regarding `bases` and `children`, I think it is more important to show those instead of template instantiation arguments.
================
Comment at: clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp:464
+TEST(TypeHierarchy, DeriveFromImplicitSpec) {
+ Annotations Source(R"cpp(
----------------
can you also add a case for deriving from explicit (partial) specialization and type hierarchy on instantiation of a different pattern?
e.g.
```
template <typename T> class X {};
template <typename T> class X<T*> {};
struct Child : X<int*> {};
X<int> fo^o;
```
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D71533/new/
https://reviews.llvm.org/D71533
More information about the cfe-commits
mailing list