From 37abeed8145b5faf02ca9ae3ffedf46b52947f41 Mon Sep 17 00:00:00 2001 From: Sam McCall Date: Wed, 13 Nov 2019 22:24:17 +0100 Subject: [PATCH] [clangd] Expose value of enumerators to Hover API. (not UI yet) Summary: This is part of https://github.com/clangd/clangd/issues/180. Reviewers: kadircet Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D70209 --- clang-tools-extra/clangd/XRefs.cpp | 4 ++++ clang-tools-extra/clangd/unittests/XRefsTests.cpp | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/clang-tools-extra/clangd/XRefs.cpp b/clang-tools-extra/clangd/XRefs.cpp index 0cfa535..dc5d5db 100644 --- a/clang-tools-extra/clangd/XRefs.cpp +++ b/clang-tools-extra/clangd/XRefs.cpp @@ -657,6 +657,10 @@ static HoverInfo getHoverContents(const Decl *D, const SymbolIndex *Index) { Init->getType()); } } + } else if (const auto *ECD = dyn_cast(D)) { + // Dependent enums (e.g. nested in template classes) don't have values yet. + if (!ECD->getType()->isDependentType()) + HI.Value = ECD->getInitVal().toString(10); } HI.Definition = printDefinition(D); diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp index 9323dd4..c20ac29 100644 --- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -981,6 +981,19 @@ void foo())cpp"; HI.NamespaceScope = ""; HI.Value = "3"; }}, + {R"cpp( + enum Color { RED, GREEN, }; + Color x = [[GR^EEN]]; + )cpp", + [](HoverInfo &HI) { + HI.Name = "GREEN"; + HI.NamespaceScope = ""; + HI.LocalScope = "Color::"; + HI.Definition = "GREEN"; + HI.Kind = SymbolKind::EnumMember; + HI.Type = "enum Color"; + HI.Value = "1"; + }}, // FIXME: We should use the Decl referenced, even if it comes from an // implicit instantiation. {R"cpp( -- 2.7.4