diff options
| author | Yong He <yonghe@outlook.com> | 2023-11-01 21:42:12 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-01 21:42:12 -0700 |
| commit | 6aca3813c4ccc496c0f9b2db293acb546aa11d2d (patch) | |
| tree | 5281f0ac62946787db90409c1ab3da5ed3f0fc5c /source/slang/slang-language-server.cpp | |
| parent | 532c4322c9d9ab2c95a5bb573c89062456b59236 (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.cpp | 139 |
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() |
