[clang-tools-extra] 37abeed - [clangd] Expose value of enumerators to Hover API. (not UI yet)

Sam McCall via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 14 08:27:23 PST 2019


Author: Sam McCall
Date: 2019-11-14T17:26:59+01:00
New Revision: 37abeed8145b5faf02ca9ae3ffedf46b52947f41

URL: https://github.com/llvm/llvm-project/commit/37abeed8145b5faf02ca9ae3ffedf46b52947f41
DIFF: https://github.com/llvm/llvm-project/commit/37abeed8145b5faf02ca9ae3ffedf46b52947f41.diff

LOG: [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

Added: 
    

Modified: 
    clang-tools-extra/clangd/XRefs.cpp
    clang-tools-extra/clangd/unittests/XRefsTests.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clangd/XRefs.cpp b/clang-tools-extra/clangd/XRefs.cpp
index 0cfa53558114..dc5d5db978fc 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<EnumConstantDecl>(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 9323dd48473a..c20ac2936a42 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(


        


More information about the cfe-commits mailing list