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)
|
||||
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;
|
||||
|
||||
@@ -132,6 +132,7 @@ public:
|
||||
ProjectExplorer::Project *project() const;
|
||||
virtual void projectOpened(ProjectExplorer::Project *project);
|
||||
virtual void projectClosed(ProjectExplorer::Project *project);
|
||||
virtual bool canOpenProject(ProjectExplorer::Project *project);
|
||||
void updateConfiguration(const QJsonValue &configuration);
|
||||
|
||||
// commands
|
||||
|
||||
Reference in New Issue
Block a user