summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-language-server.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-11-01 21:42:12 -0700
committerGitHub <noreply@github.com>2023-11-01 21:42:12 -0700
commit6aca3813c4ccc496c0f9b2db293acb546aa11d2d (patch)
tree5281f0ac62946787db90409c1ab3da5ed3f0fc5c /source/slang/slang-language-server.cpp
parent532c4322c9d9ab2c95a5bb573c89062456b59236 (diff)
Parameter binding and gfx fixes. (#3302)
* Parameter binding and gfx fixes. * Add diagnostics on entry point parameters. * Fix. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-language-server.cpp')
-rw-r--r--source/slang/slang-language-server.cpp139
1 files changed, 77 insertions, 62 deletions
diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp
index cea5d0151..7f8338b1b 100644
--- a/source/slang/slang-language-server.cpp
+++ b/source/slang/slang-language-server.cpp
@@ -1986,76 +1986,91 @@ SlangResult LanguageServer::queueJSONCall(JSONRPCCall call)
SlangResult LanguageServer::runCommand(Command& call)
{
- // Do different things
- if (call.method == DidOpenTextDocumentParams::methodName)
- {
- return didOpenTextDocument(call.openDocArgs.get());
- }
- else if (call.method == DidCloseTextDocumentParams::methodName)
- {
- return didCloseTextDocument(call.closeDocArgs.get());
- }
- else if (call.method == DidChangeTextDocumentParams::methodName)
- {
- return didChangeTextDocument(call.changeDocArgs.get());
- }
- else if (call.method == HoverParams::methodName)
- {
- return hover(call.hoverArgs.get(), call.id);
- }
- else if (call.method == DefinitionParams::methodName)
- {
- return gotoDefinition(call.definitionArgs.get(), call.id);
- }
- else if (call.method == CompletionParams::methodName)
- {
- return completion(call.completionArgs.get(), call.id);
- }
- else if (call.method == SemanticTokensParams::methodName)
- {
- return semanticTokens(call.semanticTokenArgs.get(), call.id);
- }
- else if (call.method == SignatureHelpParams::methodName)
- {
- return signatureHelp(call.signatureHelpArgs.get(), call.id);
- }
- else if (call.method == "completionItem/resolve")
- {
- return completionResolve(call.completionResolveArgs.get(), call.textEditCompletionResolveArgs.get(), call.id);
- }
- else if (call.method == DocumentSymbolParams::methodName)
- {
- return documentSymbol(call.documentSymbolArgs.get(), call.id);
- }
- else if (call.method == DidChangeConfigurationParams::methodName)
- {
- return didChangeConfiguration(call.changeConfigArgs.get());
- }
- else if (call.method == InlayHintParams::methodName)
- {
- return inlayHint(call.inlayHintArgs.get(), call.id);
- }
- else if (call.method == DocumentOnTypeFormattingParams::methodName)
- {
- return onTypeFormatting(call.onTypeFormattingArgs.get(), call.id);
- }
- else if (call.method == DocumentRangeFormattingParams::methodName)
+ try
{
- return rangeFormatting(call.rangeFormattingArgs.get(), call.id);
+ // Do different things
+ if (call.method == DidOpenTextDocumentParams::methodName)
+ {
+ return didOpenTextDocument(call.openDocArgs.get());
+ }
+ else if (call.method == DidCloseTextDocumentParams::methodName)
+ {
+ return didCloseTextDocument(call.closeDocArgs.get());
+ }
+ else if (call.method == DidChangeTextDocumentParams::methodName)
+ {
+ return didChangeTextDocument(call.changeDocArgs.get());
+ }
+ else if (call.method.startsWith("$/"))
+ {
+ // Ignore.
+ return SLANG_OK;
+ }
}
- else if (call.method == DocumentFormattingParams::methodName)
+ catch (...)
{
- return formatting(call.formattingArgs.get(), call.id);
+ return SLANG_FAIL;
}
- else if (call.method.startsWith("$/"))
+
+ try
{
- // Ignore.
- return SLANG_OK;
+ if (call.method == HoverParams::methodName)
+ {
+ return hover(call.hoverArgs.get(), call.id);
+ }
+ else if (call.method == DefinitionParams::methodName)
+ {
+ return gotoDefinition(call.definitionArgs.get(), call.id);
+ }
+ else if (call.method == CompletionParams::methodName)
+ {
+ return completion(call.completionArgs.get(), call.id);
+ }
+ else if (call.method == SemanticTokensParams::methodName)
+ {
+ return semanticTokens(call.semanticTokenArgs.get(), call.id);
+ }
+ else if (call.method == SignatureHelpParams::methodName)
+ {
+ return signatureHelp(call.signatureHelpArgs.get(), call.id);
+ }
+ else if (call.method == "completionItem/resolve")
+ {
+ return completionResolve(call.completionResolveArgs.get(), call.textEditCompletionResolveArgs.get(), call.id);
+ }
+ else if (call.method == DocumentSymbolParams::methodName)
+ {
+ return documentSymbol(call.documentSymbolArgs.get(), call.id);
+ }
+ else if (call.method == DidChangeConfigurationParams::methodName)
+ {
+ return didChangeConfiguration(call.changeConfigArgs.get());
+ }
+ else if (call.method == InlayHintParams::methodName)
+ {
+ return inlayHint(call.inlayHintArgs.get(), call.id);
+ }
+ else if (call.method == DocumentOnTypeFormattingParams::methodName)
+ {
+ return onTypeFormatting(call.onTypeFormattingArgs.get(), call.id);
+ }
+ else if (call.method == DocumentRangeFormattingParams::methodName)
+ {
+ return rangeFormatting(call.rangeFormattingArgs.get(), call.id);
+ }
+ else if (call.method == DocumentFormattingParams::methodName)
+ {
+ return formatting(call.formattingArgs.get(), call.id);
+ }
}
- else
+ catch (...)
{
- return m_connection->sendError(JSONRPC::ErrorCode::MethodNotFound, call.id);
+ // If we encountered an internal compiler error, don't crash the language server.
+ // Instead we just return a null response.
+ return m_connection->sendResult(NullResponse::get(), call.id);
}
+
+ return m_connection->sendError(JSONRPC::ErrorCode::MethodNotFound, call.id);
}
void LanguageServer::processCommands()