diff options
| author | Yong He <yonghe@outlook.com> | 2024-08-19 15:03:56 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-19 15:03:56 -0700 |
| commit | 453683bf44f2112719802eaac2b332d49eebd640 (patch) | |
| tree | d399db4c9cba90c11980186d3df1ffcc4d423b5a /source/slang/slang-language-server.cpp | |
| parent | ecf85df6eee3da76ef54b14e4ab083f22da89e46 (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.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); |
