summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-language-server-completion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-language-server-completion.cpp')
-rw-r--r--source/slang/slang-language-server-completion.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/source/slang/slang-language-server-completion.cpp b/source/slang/slang-language-server-completion.cpp
index 77ed33002..1e5bae4b0 100644
--- a/source/slang/slang-language-server-completion.cpp
+++ b/source/slang/slang-language-server-completion.cpp
@@ -512,11 +512,14 @@ LanguageServerResult<CompletionResult> CompletionContext::tryCompleteMemberAndSy
CompletionResult CompletionContext::collectMembersAndSymbols()
{
+ List<LanguageServerProtocol::CompletionItem> result;
+
auto linkage = version->linkage;
if (linkage->contentAssistInfo.completionSuggestions.scopeKind ==
CompletionSuggestions::ScopeKind::Swizzle)
{
- return createSwizzleCandidates(
+ createSwizzleCandidates(
+ result,
linkage->contentAssistInfo.completionSuggestions.swizzleBaseType,
linkage->contentAssistInfo.completionSuggestions.elementCount);
}
@@ -526,12 +529,12 @@ CompletionResult CompletionContext::collectMembersAndSymbols()
{
return createCapabilityCandidates();
}
- List<LanguageServerProtocol::CompletionItem> result;
bool useCommitChars = true;
bool addKeywords = false;
switch (linkage->contentAssistInfo.completionSuggestions.scopeKind)
{
case CompletionSuggestions::ScopeKind::Member:
+ case CompletionSuggestions::ScopeKind::Swizzle:
useCommitChars =
(commitCharacterBehavior == CommitCharacterBehavior::MembersOnly ||
commitCharacterBehavior == CommitCharacterBehavior::All);
@@ -698,13 +701,12 @@ CompletionResult CompletionContext::createCapabilityCandidates()
return result;
}
-CompletionResult CompletionContext::createSwizzleCandidates(
+void CompletionContext::createSwizzleCandidates(
+ List<LanguageServerProtocol::CompletionItem>& result,
Type* type,
IntegerLiteralValue elementCount[2])
{
- List<LanguageServerProtocol::CompletionItem> result;
// Hard code members for vector and matrix types.
- result.clear();
if (auto vectorType = as<VectorExpressionType>(type))
{
const char* memberNames[4] = {"x", "y", "z", "w"};
@@ -724,6 +726,17 @@ CompletionResult CompletionContext::createSwizzleCandidates(
result.add(item);
}
}
+ else if (auto scalarType = as<BasicExpressionType>(type))
+ {
+ String typeStr;
+ typeStr = scalarType->toString();
+ LanguageServerProtocol::CompletionItem item;
+ item.data = 0;
+ item.detail = typeStr;
+ item.kind = LanguageServerProtocol::kCompletionItemKindVariable;
+ item.label = "x";
+ result.add(item);
+ }
else if (auto matrixType = as<MatrixExpressionType>(type))
{
Type* elementType = nullptr;
@@ -769,12 +782,6 @@ CompletionResult CompletionContext::createSwizzleCandidates(
result.add(item);
}
}
- for (auto& item : result)
- {
- for (auto ch : getCommitChars())
- item.commitCharacters.add(ch);
- }
- return result;
}
LanguageServerProtocol::CompletionItem CompletionContext::generateGUIDCompletionItem()