diff options
| author | Yong He <yonghe@outlook.com> | 2024-03-21 17:19:03 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-21 17:19:03 -0700 |
| commit | 7a8ef896196ad0d7095412d8558dd9a2542874c8 (patch) | |
| tree | deef82a216f468fd57164f94700f2624164c7ca9 /source/slang/slang-language-server.cpp | |
| parent | dd32414bd7332c55dc37ea2972ffcca73328d834 (diff) | |
Support arrow operator `->` on pointers. (#3812)
Diffstat (limited to 'source/slang/slang-language-server.cpp')
| -rw-r--r-- | source/slang/slang-language-server.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
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; + } } } |
