20void WorkspaceHandlers::registerHandlers(QLanguageServer *server, QLanguageServerProtocol *protocol)
22 QObject::connect(server->notifySignals(),
23 &QLspNotifySignals::receivedDidChangeWorkspaceFoldersNotification,
this,
24 [
this](
const DidChangeWorkspaceFoldersParams ¶ms) {
25 const WorkspaceFoldersChangeEvent &event = params.event;
27 const QList<WorkspaceFolder> &removed = event.removed;
28 QList<QByteArray> toRemove;
29 for (
const WorkspaceFolder &folder : removed) {
30 toRemove.append(QQmlLSUtils::lspUriToQmlUrl(folder.uri));
31 m_codeModelManager->removeDirectory(
32 QQmlLSUtils::lspUriToQmlUrl(folder.uri));
34 m_codeModelManager->removeRootUrls(toRemove);
35 const QList<WorkspaceFolder> &added = event.added;
36 QList<QByteArray> toAdd;
37 for (
const WorkspaceFolder &folder : added) {
38 toAdd.append(QQmlLSUtils::lspUriToQmlUrl(folder.uri));
40 m_codeModelManager->addRootUrls(toAdd);
43 QObject::connect(server, &QLanguageServer::clientInitialized,
this,
44 &WorkspaceHandlers::clientInitialized, Qt::SingleShotConnection);
49 for (
const auto &buildDirs : params.buildDirsToSet) {
51 dirPaths.resize(buildDirs.buildDirs.size());
52 std::transform(buildDirs.buildDirs.begin(), buildDirs.buildDirs.end(),
53 dirPaths.begin(), [](
const QByteArray &utf8Str) {
54 return QString::fromUtf8(utf8Str);
56 m_codeModelManager->setBuildPathsForRootUrl(buildDirs.baseUri, dirPaths);
63 WorkspaceFoldersServerCapabilities folders;
64 folders.supported =
true;
65 folders.changeNotifications =
true;
67 caps.workspace = QJsonObject();
68 caps.workspace->insert(u"workspaceFolders"_s, QTypedJson::toJsonValue(folders));
71 if (caps.experimental.has_value() && caps.experimental->isObject())
72 expCap = caps.experimental->toObject();
73 expCap.insert(u"addBuildDirs"_s, QJsonObject({ { u"supported"_s,
true } }));
74 caps.experimental = expCap;
114 const auto &clientInfo = server->clientInfo();
116 if (clientInfo.capabilities.workspace
117 && clientInfo.capabilities.workspace->value(u"workspaceFolders"_s).toBool(
false)) {
118 openInitialWorkspace(clientInfo);