summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-language-server.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-03-21 17:19:03 -0700
committerGitHub <noreply@github.com>2024-03-21 17:19:03 -0700
commit7a8ef896196ad0d7095412d8558dd9a2542874c8 (patch)
treedeef82a216f468fd57164f94700f2624164c7ca9 /source/slang/slang-language-server.cpp
parentdd32414bd7332c55dc37ea2972ffcca73328d834 (diff)
Support arrow operator `->` on pointers. (#3812)
Diffstat (limited to 'source/slang/slang-language-server.cpp')
-rw-r--r--source/slang/slang-language-server.cpp29
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;
+ }
}
}