From 6cf15f4ea1fe044d8227440dcc30ac712334568e Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 27 Feb 2025 10:32:14 -0800 Subject: Allow `.member` syntax on vector and scalars. (#6424) * Allow `.member` syntax on vector and scalars. * Fix. * fix. * Fix. * update comment. * Fix tests. * Fix warning. * Add more tests. --- source/slang/slang-language-server-completion.cpp | 29 ++++++++++++++--------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'source/slang/slang-language-server-completion.cpp') 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 CompletionContext::tryCompleteMemberAndSy CompletionResult CompletionContext::collectMembersAndSymbols() { + List 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 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& result, Type* type, IntegerLiteralValue elementCount[2]) { - List result; // Hard code members for vector and matrix types. - result.clear(); if (auto vectorType = as(type)) { const char* memberNames[4] = {"x", "y", "z", "w"}; @@ -724,6 +726,17 @@ CompletionResult CompletionContext::createSwizzleCandidates( result.add(item); } } + else if (auto scalarType = as(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(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() -- cgit v1.2.3