[PATCH] D72500: [clangd] Show hower info for expressions
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 10 04:21:56 PST 2020
kadircet created this revision.
kadircet added a reviewer: sammccall.
Herald added subscribers: cfe-commits, usaxena95, arphaman, jkorous, MaskRay, ilya-biryukov.
Herald added a project: clang.
This currently populates only the Name with the expression's type and
Value if expression is evaluatable.
Fixes https://github.com/clangd/clangd/issues/56
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D72500
Files:
clang-tools-extra/clangd/Hover.cpp
clang-tools-extra/clangd/unittests/HoverTests.cpp
Index: clang-tools-extra/clangd/unittests/HoverTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/HoverTests.cpp
+++ clang-tools-extra/clangd/unittests/HoverTests.cpp
@@ -1512,6 +1512,30 @@
HI.Name = "b";
HI.Type = "int";
}},
+ {
+ R"cpp(// sizeof expr
+ void foo() {
+ (void)[[size^of]](char);
+ })cpp",
+ [](HoverInfo &HI) {
+ HI.Name = "unsigned long";
+ HI.Value = "1";
+ }},
+ {
+ R"cpp(// alignof expr
+ void foo() {
+ (void)[[align^of]](char);
+ })cpp",
+ [](HoverInfo &HI) {
+ HI.Name = "unsigned long";
+ HI.Value = "1";
+ }},
+ {
+ R"cpp(// non-evaluatable expr
+ template <typename T> void foo() {
+ (void)[[size^of]](T);
+ })cpp",
+ [](HoverInfo &HI) { HI.Name = "unsigned long"; }},
};
// Create a tiny index, so tests above can verify documentation is fetched.
Index: clang-tools-extra/clangd/Hover.cpp
===================================================================
--- clang-tools-extra/clangd/Hover.cpp
+++ clang-tools-extra/clangd/Hover.cpp
@@ -21,6 +21,7 @@
#include "clang/AST/Decl.h"
#include "clang/AST/DeclBase.h"
#include "clang/AST/DeclTemplate.h"
+#include "clang/AST/Expr.h"
#include "clang/AST/PrettyPrinter.h"
#include "clang/AST/Type.h"
#include "clang/Index/IndexSymbol.h"
@@ -445,9 +446,13 @@
// Look for a close enclosing expression to show the value of.
if (!HI->Value)
HI->Value = printExprValue(N, AST.getASTContext());
+ } else if (const Expr *E = N->ASTNode.get<Expr>()) {
+ // For expressions we currently print the type and the value, if they
+ // are evaluatable.
+ HI = getHoverContents(E->getType(), AST.getASTContext(), Index);
+ HI->Value = printExprValue(E, AST.getASTContext());
}
// FIXME: support hovers for other nodes?
- // - certain expressions (sizeof etc)
// - built-in types
// - literals (esp user-defined)
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D72500.237283.patch
Type: text/x-patch
Size: 2207 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200110/d5e86d91/attachment.bin>
More information about the cfe-commits
mailing list