diff options
Diffstat (limited to 'source/slang/slang-language-server.cpp')
| -rw-r--r-- | source/slang/slang-language-server.cpp | 42 |
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); |
