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_switchSourceHeader(TextDocumentIdentifier &, ReplyOnce &);
void textDocument_typeDefinition(TextDocumentPositionParam &, ReplyOnce &);
void workspace_didChangeConfiguration(EmptyParam &);
void workspace_didChangeConfiguration(JsonReader &);
void workspace_didChangeWatchedFiles(DidChangeWatchedFilesParam &);
void workspace_didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParam &);
void workspace_executeCommand(JsonReader &, ReplyOnce &);

View File

@ -13,6 +13,9 @@
#include <llvm/ADT/StringRef.h>
#include <llvm/Support/Path.h>
#include <rapidjson/document.h>
#include <rapidjson/writer.h>
#include <algorithm>
#include <ctype.h>
#include <functional>
@ -22,13 +25,29 @@ using namespace llvm;
namespace ccls {
REFLECT_STRUCT(SymbolInformation, name, kind, location, containerName);
void MessageHandler::workspace_didChangeConfiguration(EmptyParam &) {
for (auto &[folder, _] : g_config->workspaceFolders)
project->load(folder);
project->index(wfiles, RequestId());
void MessageHandler::workspace_didChangeConfiguration(JsonReader &reader) {
auto it = reader.m->FindMember("settings");
if (it != reader.m->MemberEnd() && it->value.IsObject()) {
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(
DidChangeWatchedFilesParam &param) {