diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-language-server.cpp | 47 | ||||
| -rw-r--r-- | source/slang/slang-language-server.h | 3 |
2 files changed, 46 insertions, 4 deletions
diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp index 59a9854f0..cd9818f65 100644 --- a/source/slang/slang-language-server.cpp +++ b/source/slang/slang-language-server.cpp @@ -252,7 +252,18 @@ SlangResult LanguageServerCore::didOpenTextDocument(const DidOpenTextDocumentPar SlangResult LanguageServer::didOpenTextDocument(const DidOpenTextDocumentParams& args) { - return m_core.didOpenTextDocument(args); + // When periodic diagnostic updates are disabled (e.g., for testing), + // the main server loop will not automatically publish diagnostics. + // In this case, we must manually trigger a diagnostic publication + // after any action that could affect the results, such as opening a document. + // The same logic applies to didChange and didClose handlers. + resetDiagnosticUpdateTime(); + auto result = m_core.didOpenTextDocument(args); + if (!m_core.m_options.periodicDiagnosticUpdate) + { + publishDiagnostics(); + } + return result; } static bool isBoolType(Type* t) @@ -2541,7 +2552,12 @@ void LanguageServer::processCommands() SlangResult LanguageServer::didCloseTextDocument(const DidCloseTextDocumentParams& args) { resetDiagnosticUpdateTime(); - return m_core.didCloseTextDocument(args); + auto result = m_core.didCloseTextDocument(args); + if (!m_core.m_options.periodicDiagnosticUpdate) + { + publishDiagnostics(); + } + return result; } SlangResult LanguageServerCore::didCloseTextDocument(const DidCloseTextDocumentParams& args) @@ -2554,7 +2570,12 @@ SlangResult LanguageServerCore::didCloseTextDocument(const DidCloseTextDocumentP SlangResult LanguageServer::didChangeTextDocument(const DidChangeTextDocumentParams& args) { resetDiagnosticUpdateTime(); - return m_core.didChangeTextDocument(args); + auto result = m_core.didChangeTextDocument(args); + if (!m_core.m_options.periodicDiagnosticUpdate) + { + publishDiagnostics(); + } + return result; } SlangResult LanguageServerCore::didChangeTextDocument(const DidChangeTextDocumentParams& args) @@ -2583,7 +2604,8 @@ void LanguageServer::update() { if (!m_core.m_workspace) return; - publishDiagnostics(); + if (m_core.m_options.periodicDiagnosticUpdate) + publishDiagnostics(); } void LanguageServer::updateConfigFromJSON(const JSONValue& jsonVal) @@ -2689,7 +2711,24 @@ SLANG_API void LanguageServerStartupOptions::parse(int argc, const char* const* for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "-vs") == 0) + { isVisualStudio = true; + } + else if (strcmp(argv[i], "-periodic-diagnostic-update") == 0) + { + periodicDiagnosticUpdate = true; + if (i + 1 < argc) + { + const char* value = argv[i + 1]; + if (value[0] == 'f' || value[0] == 'F' || value[0] == 'n' || value[0] == 'N' || + value[0] == '0' || + ((value[0] == 'o' || value[0] == 'O') && (value[1] == 'f' || value[1] == 'F'))) + { + periodicDiagnosticUpdate = false; + } + i++; + } + } } } diff --git a/source/slang/slang-language-server.h b/source/slang/slang-language-server.h index 4b0abe3f2..e31e77acb 100644 --- a/source/slang/slang-language-server.h +++ b/source/slang/slang-language-server.h @@ -83,6 +83,9 @@ struct LanguageServerStartupOptions // Are we working with Visual Studio client? bool isVisualStudio = false; + // A flag to control periodic diagnostic update. Defaults to true. + bool periodicDiagnosticUpdate = true; + SLANG_API void parse(int argc, const char* const* argv); }; |
