[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