LanguageClient: add projects filter function

Can be used to filter projects get reported to the language client on
server startup and when a project gets opened.

Change-Id: I8cfbc45ecb5251fcaecf2c331a9f1eff966c8db1
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
David Schulz
2023-05-24 10:09:22 +02:00
parent beea9ec157
commit bc9e90f8b6
2 changed files with 16 additions and 6 deletions

View File

@@ -511,11 +511,13 @@ void Client::initialize()
if (d->m_project)
params.setRootUri(hostPathToServerUri(d->m_project->projectDirectory()));
auto projectFilter = [this](Project *project) { return canOpenProject(project); };
auto toWorkSpaceFolder = [this](Project *pro) {
return WorkSpaceFolder(hostPathToServerUri(pro->projectDirectory()), pro->displayName());
};
const QList<WorkSpaceFolder> workspaces
= Utils::transform(ProjectManager::projects(), [this](Project *pro) {
return WorkSpaceFolder(hostPathToServerUri(pro->projectDirectory()),
pro->displayName());
});
= Utils::transform(Utils::filtered(ProjectManager::projects(), projectFilter),
toWorkSpaceFolder);
if (workspaces.isEmpty())
params.setWorkSpaceFolders(nullptr);
else
@@ -1353,6 +1355,7 @@ ProjectExplorer::Project *Client::project() const
void Client::setCurrentProject(ProjectExplorer::Project *project)
{
QTC_ASSERT(canOpenProject(project), return);
if (d->m_project == project)
return;
if (d->m_project)
@@ -1369,7 +1372,7 @@ void Client::setCurrentProject(ProjectExplorer::Project *project)
void Client::projectOpened(ProjectExplorer::Project *project)
{
if (!d->sendWorkspceFolderChanges())
if (!d->sendWorkspceFolderChanges() || !canOpenProject(project))
return;
WorkspaceFoldersChangeEvent event;
event.setAdded({WorkSpaceFolder(hostPathToServerUri(project->projectDirectory()),
@@ -1382,7 +1385,7 @@ void Client::projectOpened(ProjectExplorer::Project *project)
void Client::projectClosed(ProjectExplorer::Project *project)
{
if (d->sendWorkspceFolderChanges()) {
if (d->sendWorkspceFolderChanges() && canOpenProject(project)) {
WorkspaceFoldersChangeEvent event;
event.setRemoved({WorkSpaceFolder(hostPathToServerUri(project->projectDirectory()),
project->displayName())});
@@ -1402,6 +1405,12 @@ void Client::projectClosed(ProjectExplorer::Project *project)
}
}
bool Client::canOpenProject(ProjectExplorer::Project *project)
{
Q_UNUSED(project);
return true;
}
void Client::updateConfiguration(const QJsonValue &configuration)
{
d->m_configuration = configuration;