diff options
| author | Yong He <yonghe@outlook.com> | 2022-06-13 16:50:35 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-13 16:50:35 -0700 |
| commit | a5422d4f8c43962147696e3b6b22d586133b9a4f (patch) | |
| tree | ac7541219ec1ea789c8a470471c8b37fbc4ac29e /source/slang/slang-language-server.cpp | |
| parent | b0c7eb885dac6b609a46a961feb71d2f983a0d76 (diff) | |
Follow up on Language Server Improvement (#2275)
* Fix typo and improve parser recovery.
* Add search path configuration.
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 | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp index 9f7329e2c..5aa8d0e14 100644 --- a/source/slang/slang-language-server.cpp +++ b/source/slang/slang-language-server.cpp @@ -150,9 +150,11 @@ SlangResult LanguageServer::parseNextMessage() if (response.result.getKind() == JSONValue::Kind::Array) { auto arr = m_connection->getContainer()->getArray(response.result); - if (arr.getCount() > 0) + if (arr.getCount() == 3) { updatePredefinedMacros(arr[0]); + updateSearchPaths(arr[1]); + updateSearchInWorkspace(arr[2]); } } break; @@ -791,14 +793,56 @@ void LanguageServer::updatePredefinedMacros(const JSONValue& macros) } } +void LanguageServer::updateSearchPaths(const JSONValue& macros) +{ + if (macros.isValid()) + { + auto container = m_connection->getContainer(); + JSONToNativeConverter converter(container, m_connection->getSink()); + List<String> searchPaths; + if (SLANG_SUCCEEDED(converter.convert(macros, &searchPaths))) + { + if (m_workspace->updateSearchPaths(searchPaths)) + { + m_connection->sendCall( + UnownedStringSlice("workspace/semanticTokens/refresh"), JSONValue::makeInt(0)); + } + } + } +} + +void LanguageServer::updateSearchInWorkspace(const JSONValue& macros) +{ + if (macros.isValid()) + { + auto container = m_connection->getContainer(); + JSONToNativeConverter converter(container, m_connection->getSink()); + bool searchPaths; + if (SLANG_SUCCEEDED(converter.convert(macros, &searchPaths))) + { + if (m_workspace->updateSearchInWorkspace(searchPaths)) + { + m_connection->sendCall( + UnownedStringSlice("workspace/semanticTokens/refresh"), JSONValue::makeInt(0)); + } + } + } +} + void LanguageServer::sendConfigRequest() { ConfigurationParams args; ConfigurationItem item; item.section = "slang.predefinedMacros"; args.items.add(item); + item.section = "slang.additionalSearchPaths"; + args.items.add(item); + item.section = "slang.searchInAllWorkspaceDirectories"; + args.items.add(item); m_connection->sendCall( - ConfigurationParams::methodName, &args, JSONValue::makeInt(kConfigResponseId)); + ConfigurationParams::methodName, + &args, + JSONValue::makeInt(kConfigResponseId)); } void LanguageServer::registerCapability(const char* methodName) |
