From 7a8ef896196ad0d7095412d8558dd9a2542874c8 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 21 Mar 2024 17:19:03 -0700 Subject: Support arrow operator `->` on pointers. (#3812) --- source/slang/slang-language-server.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (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 b8ebf8e08..9cfef50a0 100644 --- a/source/slang/slang-language-server.cpp +++ b/source/slang/slang-language-server.cpp @@ -125,6 +125,7 @@ SlangResult LanguageServer::parseNextMessage() caps.documentOnTypeFormattingProvider.moreTriggerCharacter.add("{"); caps.documentRangeFormattingProvider = true; caps.completionProvider.triggerCharacters.add("."); + caps.completionProvider.triggerCharacters.add(">"); caps.completionProvider.triggerCharacters.add(":"); caps.completionProvider.triggerCharacters.add("["); caps.completionProvider.triggerCharacters.add(" "); @@ -931,17 +932,25 @@ SlangResult LanguageServer::completion( return SLANG_OK; } - // Don't show completion at case label. + // Don't show completion at case label or after single '>' operator. if (args.context.triggerKind == - LanguageServerProtocol::kCompletionTriggerKindTriggerCharacter && - args.context.triggerCharacter == ":") - { - auto line = doc->getLine((Int)args.position.line + 1); - auto prevCharPos = args.position.character - 2; - if (prevCharPos >= 0 && prevCharPos < line.getLength() && line[prevCharPos] != ':') - { - m_connection->sendResult(NullResponse::get(), responseId); - return SLANG_OK; + LanguageServerProtocol::kCompletionTriggerKindTriggerCharacter) + { + char requiredPrevChar = 0; + if (args.context.triggerCharacter == ":") + requiredPrevChar = ':'; + else if (args.context.triggerCharacter == ">") + requiredPrevChar = '-'; + if (requiredPrevChar != 0) + { + // Check if the previous character is the required character (':' or '-' + auto line = doc->getLine((Int)args.position.line + 1); + auto prevCharPos = args.position.character - 2; + if (prevCharPos >= 0 && prevCharPos < line.getLength() && line[prevCharPos] != requiredPrevChar) + { + m_connection->sendResult(NullResponse::get(), responseId); + return SLANG_OK; + } } } -- cgit v1.2.3