diff options
Diffstat (limited to 'src/tools/clangbackend/source/clangtooltipinfocollector.cpp')
-rw-r--r-- | src/tools/clangbackend/source/clangtooltipinfocollector.cpp | 26 |
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); |