From 453683bf44f2112719802eaac2b332d49eebd640 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 19 Aug 2024 15:03:56 -0700 Subject: Tuple swizzling, concat, comparison and `countof`. (#4856) * Tuple swizzling and element access. * Update proposal status. * Cleanup. * Fix merrge error. * Address review. --- source/slang/slang-language-server.cpp | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'source/slang/slang-language-server.cpp') 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(expr)) + { + if (expr->type && swizzleExpr->base && swizzleExpr->base->type) + { + bool isTupleType = as(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(expr)) + { + if (countOfExpr->sizedType) + { + if (auto foldedVal = as(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(expr)) { String documentation; @@ -740,6 +774,14 @@ SlangResult LanguageServer::hover( { fillExprHoverInfo(thisExprExpr); } + else if (auto countOfExpr = as(leafNode)) + { + fillExprHoverInfo(countOfExpr); + } + else if (auto swizzleExpr = as(leafNode)) + { + fillExprHoverInfo(swizzleExpr); + } else if (auto importDecl = as(leafNode)) { auto moduleLoc = getModuleLoc(version->linkage->getSourceManager(), importDecl->importedModuleDecl); -- cgit v1.2.3