forked from qt-creator/qt-creator
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:
@@ -511,11 +511,13 @@ void Client::initialize()
|
|||||||
if (d->m_project)
|
if (d->m_project)
|
||||||
params.setRootUri(hostPathToServerUri(d->m_project->projectDirectory()));
|
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
|
const QList<WorkSpaceFolder> workspaces
|
||||||
= Utils::transform(ProjectManager::projects(), [this](Project *pro) {
|
= Utils::transform(Utils::filtered(ProjectManager::projects(), projectFilter),
|
||||||
return WorkSpaceFolder(hostPathToServerUri(pro->projectDirectory()),
|
toWorkSpaceFolder);
|
||||||
pro->displayName());
|
|
||||||
});
|
|
||||||
if (workspaces.isEmpty())
|
if (workspaces.isEmpty())
|
||||||
params.setWorkSpaceFolders(nullptr);
|
params.setWorkSpaceFolders(nullptr);
|
||||||
else
|
else
|
||||||
@@ -1353,6 +1355,7 @@ ProjectExplorer::Project *Client::project() const
|
|||||||
|
|
||||||
void Client::setCurrentProject(ProjectExplorer::Project *project)
|
void Client::setCurrentProject(ProjectExplorer::Project *project)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(canOpenProject(project), return);
|
||||||
if (d->m_project == project)
|
if (d->m_project == project)
|
||||||
return;
|
return;
|
||||||
if (d->m_project)
|
if (d->m_project)
|
||||||
@@ -1369,7 +1372,7 @@ void Client::setCurrentProject(ProjectExplorer::Project *project)
|
|||||||
|
|
||||||
void Client::projectOpened(ProjectExplorer::Project *project)
|
void Client::projectOpened(ProjectExplorer::Project *project)
|
||||||
{
|
{
|
||||||
if (!d->sendWorkspceFolderChanges())
|
if (!d->sendWorkspceFolderChanges() || !canOpenProject(project))
|
||||||
return;
|
return;
|
||||||
WorkspaceFoldersChangeEvent event;
|
WorkspaceFoldersChangeEvent event;
|
||||||
event.setAdded({WorkSpaceFolder(hostPathToServerUri(project->projectDirectory()),
|
event.setAdded({WorkSpaceFolder(hostPathToServerUri(project->projectDirectory()),
|
||||||
@@ -1382,7 +1385,7 @@ void Client::projectOpened(ProjectExplorer::Project *project)
|
|||||||
|
|
||||||
void Client::projectClosed(ProjectExplorer::Project *project)
|
void Client::projectClosed(ProjectExplorer::Project *project)
|
||||||
{
|
{
|
||||||
if (d->sendWorkspceFolderChanges()) {
|
if (d->sendWorkspceFolderChanges() && canOpenProject(project)) {
|
||||||
WorkspaceFoldersChangeEvent event;
|
WorkspaceFoldersChangeEvent event;
|
||||||
event.setRemoved({WorkSpaceFolder(hostPathToServerUri(project->projectDirectory()),
|
event.setRemoved({WorkSpaceFolder(hostPathToServerUri(project->projectDirectory()),
|
||||||
project->displayName())});
|
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)
|
void Client::updateConfiguration(const QJsonValue &configuration)
|
||||||
{
|
{
|
||||||
d->m_configuration = configuration;
|
d->m_configuration = configuration;
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ public:
|
|||||||
ProjectExplorer::Project *project() const;
|
ProjectExplorer::Project *project() const;
|
||||||
virtual void projectOpened(ProjectExplorer::Project *project);
|
virtual void projectOpened(ProjectExplorer::Project *project);
|
||||||
virtual void projectClosed(ProjectExplorer::Project *project);
|
virtual void projectClosed(ProjectExplorer::Project *project);
|
||||||
|
virtual bool canOpenProject(ProjectExplorer::Project *project);
|
||||||
void updateConfiguration(const QJsonValue &configuration);
|
void updateConfiguration(const QJsonValue &configuration);
|
||||||
|
|
||||||
// commands
|
// commands
|
||||||
|
|||||||
Reference in New Issue
Block a user