summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-language-server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-language-server.cpp')
-rw-r--r--source/slang/slang-language-server.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp
index 81c7d24cf..9588e7284 100644
--- a/source/slang/slang-language-server.cpp
+++ b/source/slang/slang-language-server.cpp
@@ -701,6 +701,40 @@ SlangResult LanguageServer::hover(
}
fillLoc(expr->loc);
}
+ else if (auto swizzleExpr = as<SwizzleExpr>(expr))
+ {
+ if (expr->type && swizzleExpr->base && swizzleExpr->base->type)
+ {
+ bool isTupleType = as<TupleType>(swizzleExpr->base->type) != nullptr;
+ sb << "```\n";
+ swizzleExpr->type->toText(sb);
+ sb << " ";
+ swizzleExpr->base->type->toText(sb);
+ sb << ".";
+ for (auto index : swizzleExpr->elementIndices)
+ {
+ if (isTupleType || index > 4)
+ sb << "_" << index;
+ else
+ sb << "xyzw"[index];
+ }
+ sb << "\n```\n";
+ fillLoc(expr->loc);
+ }
+ }
+ else if (auto countOfExpr = as<CountOfExpr>(expr))
+ {
+ if (countOfExpr->sizedType)
+ {
+ if (auto foldedVal = as<ConstantIntVal>(CountOfIntVal::tryFoldOrNull(version->linkage->getASTBuilder(), expr->type.type, countOfExpr->sizedType)))
+ {
+ sb << "```\n" << "countof(";
+ countOfExpr->sizedType->toText(sb);
+ sb << ") = " << foldedVal->getValue() << "\n```\n";
+ fillLoc(expr->loc);
+ }
+ }
+ }
if (const auto higherOrderExpr = as<HigherOrderInvokeExpr>(expr))
{
String documentation;
@@ -740,6 +774,14 @@ SlangResult LanguageServer::hover(
{
fillExprHoverInfo(thisExprExpr);
}
+ else if (auto countOfExpr = as<CountOfExpr>(leafNode))
+ {
+ fillExprHoverInfo(countOfExpr);
+ }
+ else if (auto swizzleExpr = as<SwizzleExpr>(leafNode))
+ {
+ fillExprHoverInfo(swizzleExpr);
+ }
else if (auto importDecl = as<ImportDecl>(leafNode))
{
auto moduleLoc = getModuleLoc(version->linkage->getSourceManager(), importDecl->importedModuleDecl);