[PATCH] D73056: [clangd] Fix DocumentOutline for concepts
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 20 10:08:00 PST 2020
kadircet created this revision.
kadircet added a reviewer: kbobyrev.
Herald added subscribers: cfe-commits, usaxena95, arphaman, jkorous, MaskRay, ilya-biryukov.
Herald added a project: clang.
Fixes https://github.com/clangd/clangd/issues/256
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D73056
Files:
clang-tools-extra/clangd/FindSymbols.cpp
clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
Index: clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
+++ clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
@@ -449,6 +449,15 @@
SymNameRange(Main.range("def")))));
}
+TEST_F(DocumentSymbolsTest, Concepts) {
+ CDB.ExtraClangFlags = {"-std=c++2a"};
+ std::string FilePath = testPath("foo.cpp");
+ addFile(FilePath,
+ "template <typename T> concept C = requires(T t) { t.foo(); };");
+
+ EXPECT_THAT(getSymbols(FilePath), ElementsAre(WithName("C")));
+}
+
TEST_F(DocumentSymbolsTest, ExternSymbol) {
std::string FilePath = testPath("foo.cpp");
addFile(testPath("foo.h"), R"cpp(
Index: clang-tools-extra/clangd/FindSymbols.cpp
===================================================================
--- clang-tools-extra/clangd/FindSymbols.cpp
+++ clang-tools-extra/clangd/FindSymbols.cpp
@@ -193,8 +193,11 @@
enum class VisitKind { No, OnlyDecl, DeclAndChildren };
void traverseDecl(Decl *D, std::vector<DocumentSymbol> &Results) {
- if (auto *Templ = llvm::dyn_cast<TemplateDecl>(D))
- D = Templ->getTemplatedDecl();
+ if (auto *Templ = llvm::dyn_cast<TemplateDecl>(D)) {
+ // TemplatedDecl might be null, e.g. concepts.
+ if (auto *TD = Templ->getTemplatedDecl())
+ D = TD;
+ }
auto *ND = llvm::dyn_cast<NamedDecl>(D);
if (!ND)
return;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D73056.239161.patch
Type: text/x-patch
Size: 1471 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200120/4f8c958c/attachment.bin>
More information about the cfe-commits
mailing list