summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-language-server.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-08-19 15:03:56 -0700
committerGitHub <noreply@github.com>2024-08-19 15:03:56 -0700
commit453683bf44f2112719802eaac2b332d49eebd640 (patch)
treed399db4c9cba90c11980186d3df1ffcc4d423b5a /source/slang/slang-language-server.cpp
parentecf85df6eee3da76ef54b14e4ab083f22da89e46 (diff)
Tuple swizzling, concat, comparison and `countof`. (#4856)
* Tuple swizzling and element access. * Update proposal status. * Cleanup. * Fix merrge error. * Address review.
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);