workspace: Make didChangeConfiguration use its parameter

to update the configuration settings.
This commit is contained in:
Rémi Hérilier 2024-10-24 18:39:18 +02:00
parent 3640f899f1
commit e55cc6865c
2 changed files with 26 additions and 7 deletions

View File

@ -313,7 +313,7 @@ private:
void textDocument_signatureHelp(TextDocumentPositionParam &, ReplyOnce &); void textDocument_signatureHelp(TextDocumentPositionParam &, ReplyOnce &);
void textDocument_switchSourceHeader(TextDocumentIdentifier &, ReplyOnce &); void textDocument_switchSourceHeader(TextDocumentIdentifier &, ReplyOnce &);
void textDocument_typeDefinition(TextDocumentPositionParam &, ReplyOnce &); void textDocument_typeDefinition(TextDocumentPositionParam &, ReplyOnce &);
void workspace_didChangeConfiguration(EmptyParam &); void workspace_didChangeConfiguration(JsonReader &);
void workspace_didChangeWatchedFiles(DidChangeWatchedFilesParam &); void workspace_didChangeWatchedFiles(DidChangeWatchedFilesParam &);
void workspace_didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParam &); void workspace_didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParam &);
void workspace_executeCommand(JsonReader &, ReplyOnce &); void workspace_executeCommand(JsonReader &, ReplyOnce &);

View File

@ -13,6 +13,9 @@
#include <llvm/ADT/StringRef.h> #include <llvm/ADT/StringRef.h>
#include <llvm/Support/Path.h> #include <llvm/Support/Path.h>
#include <rapidjson/document.h>
#include <rapidjson/writer.h>
#include <algorithm> #include <algorithm>
#include <ctype.h> #include <ctype.h>
#include <functional> #include <functional>
@ -22,13 +25,29 @@ using namespace llvm;
namespace ccls { namespace ccls {
REFLECT_STRUCT(SymbolInformation, name, kind, location, containerName); REFLECT_STRUCT(SymbolInformation, name, kind, location, containerName);
void MessageHandler::workspace_didChangeConfiguration(EmptyParam &) { void MessageHandler::workspace_didChangeConfiguration(JsonReader &reader) {
for (auto &[folder, _] : g_config->workspaceFolders) auto it = reader.m->FindMember("settings");
project->load(folder); if (it != reader.m->MemberEnd() && it->value.IsObject()) {
project->index(wfiles, RequestId()); rapidjson::StringBuffer output;
rapidjson::Writer<rapidjson::StringBuffer> writer(output);
JsonReader m1(&it->value);
it->value.Accept(writer);
LOG_S(INFO) << "didChangeConfiguration: " << output.GetString();
try {
reflect(m1, *g_config);
} catch (std::invalid_argument &) {
reader.path_.push_back("settings");
reader.path_.insert(reader.path_.end(), m1.path_.begin(), m1.path_.end());
throw;
}
manager->clear(); for (auto &[folder, _] : g_config->workspaceFolders)
}; project->load(folder);
project->index(wfiles, RequestId());
manager->clear();
}
}
void MessageHandler::workspace_didChangeWatchedFiles( void MessageHandler::workspace_didChangeWatchedFiles(
DidChangeWatchedFilesParam &param) { DidChangeWatchedFilesParam &param) {