[clang-tools-extra] 31b7f0e - [clangd] Extend findTarget()'s dependent name heuristic to handle enumerators
Nathan Ridge via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 17 15:13:40 PDT 2020
Author: Nathan Ridge
Date: 2020-03-17T18:13:07-04:00
New Revision: 31b7f0ed6a93c0f2601ef856cf68e9cc2f83d8a8
URL: https://github.com/llvm/llvm-project/commit/31b7f0ed6a93c0f2601ef856cf68e9cc2f83d8a8
DIFF: https://github.com/llvm/llvm-project/commit/31b7f0ed6a93c0f2601ef856cf68e9cc2f83d8a8.diff
LOG: [clangd] Extend findTarget()'s dependent name heuristic to handle enumerators
Fixes https://github.com/clangd/clangd/issues/296
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D76103
Added:
Modified:
clang-tools-extra/clangd/FindTarget.cpp
clang-tools-extra/clangd/unittests/XRefsTests.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/FindTarget.cpp b/clang-tools-extra/clangd/FindTarget.cpp
index 4528e2a77164..3757f4da97f9 100644
--- a/clang-tools-extra/clangd/FindTarget.cpp
+++ b/clang-tools-extra/clangd/FindTarget.cpp
@@ -37,6 +37,7 @@
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/raw_ostream.h"
+#include <iterator>
#include <utility>
#include <vector>
@@ -76,6 +77,11 @@ std::vector<const NamedDecl *> getMembersReferencedViaDependentName(
bool IsNonstaticMember) {
if (!T)
return {};
+ if (auto *ET = T->getAs<EnumType>()) {
+ auto Result =
+ ET->getDecl()->lookup(NameFactory(ET->getDecl()->getASTContext()));
+ return {Result.begin(), Result.end()};
+ }
if (auto *ICNT = T->getAs<InjectedClassNameType>()) {
T = ICNT->getInjectedSpecializationType().getTypePtrOrNull();
}
diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp
index 1e687fd109e3..32a89df424e4 100644
--- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp
+++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp
@@ -529,6 +529,14 @@ TEST(LocateSymbol, All) {
void test(unique_ptr<S<T>>& V) {
V->fo^o();
}
+ )cpp",
+
+ R"cpp(// Heuristic resolution of dependent enumerator
+ template <typename T>
+ struct Foo {
+ enum class E { [[A]], B };
+ E e = E::A^;
+ };
)cpp"};
for (const char *Test : Tests) {
Annotations T(Test);
More information about the cfe-commits
mailing list