aboutsummaryrefslogtreecommitdiffstats
path: root/src/tools/clangbackend/source/clangtooltipinfocollector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/clangbackend/source/clangtooltipinfocollector.cpp')
-rw-r--r--src/tools/clangbackend/source/clangtooltipinfocollector.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/tools/clangbackend/source/clangtooltipinfocollector.cpp b/src/tools/clangbackend/source/clangtooltipinfocollector.cpp
index 36281674f7..af28c7a5a9 100644
--- a/src/tools/clangbackend/source/clangtooltipinfocollector.cpp
+++ b/src/tools/clangbackend/source/clangtooltipinfocollector.cpp
@@ -149,6 +149,28 @@ Utf8String sizeInBytes(const Cursor &cursor)
return Utf8String();
}
+QVariant value(const Cursor &cursor)
+{
+ if (!clang_isDeclaration(cursor.cx().kind) && !clang_isExpression(cursor.cx().kind))
+ return {};
+ const CXEvalResult evalResult = clang_Cursor_Evaluate(cursor.cx());
+ QVariant v;
+ switch (clang_EvalResult_getKind(evalResult)) {
+ case CXEval_Int:
+ v = clang_EvalResult_isUnsignedInt(evalResult)
+ ? QVariant::fromValue(clang_EvalResult_getAsUnsigned(evalResult))
+ : QVariant::fromValue(clang_EvalResult_getAsLongLong(evalResult));
+ break;
+ case CXEval_Float:
+ v = QVariant::fromValue(clang_EvalResult_getAsDouble(evalResult));
+ break;
+ default:
+ break;
+ }
+ clang_EvalResult_dispose(evalResult);
+ return v;
+}
+
Cursor referencedCursor(const Cursor &cursor)
{
// Query the referenced cursor directly instead of first testing with cursor.isReference().
@@ -230,9 +252,6 @@ Utf8String ToolTipInfoCollector::text(const Cursor &cursor, const Cursor &refere
if (referenced.isFunctionLike() || referenced.kind() == CXCursor_Constructor)
return textForFunctionLike(referenced);
- if (referenced.type().canonical().isBuiltinType())
- return referenced.type().canonical().builtinTypeToString();
-
if (referenced.kind() == CXCursor_VarDecl)
return referenced.type().spelling(); // e.g. "Zii<int>"
@@ -503,6 +522,7 @@ ToolTipInfo ToolTipInfoCollector::collect(uint line, uint column) const
ToolTipInfo info;
info.text = text(cursor, referenced);
info.briefComment = referenced.briefComment();
+ info.value = value(cursor);
{
ToolTipInfo qDocToolTipInfo = qDocInfo(referenced);