LanguageClient: Add the possibility to override progress messages

... and make use of it in the clangd client.
We want the progress bar for background indexing to have a better title
than the plain (and non-translated) "indexing" that the clangd server
sends.

Change-Id: Ib75eac370e7c22f0c5bd477f4a4c423283b27e1f
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-04-20 15:13:10 +02:00
parent c1f90aeca2
commit 90a07eca28
5 changed files with 20 additions and 1 deletions

View File

@@ -63,6 +63,7 @@ ClangdClient::ClangdClient(ProjectExplorer::Project *project, const Utils::FileP
setClientCapabilities(caps); setClientCapabilities(caps);
setLocatorsEnabled(false); setLocatorsEnabled(false);
setDocumentActionsEnabled(false); setDocumentActionsEnabled(false);
setProgressTitleForToken("backgroundIndexProgress", tr("Parsing C/C++ Files (clangd)"));
setCurrentProject(project); setCurrentProject(project);
start(); start();
} }

View File

@@ -1019,6 +1019,12 @@ void Client::setError(const QString &message)
m_state = Error; m_state = Error;
} }
void Client::setProgressTitleForToken(const LanguageServerProtocol::ProgressToken &token,
const QString &message)
{
m_progressManager.setTitleForToken(token, message);
}
void Client::handleMessage(const BaseMessage &message) void Client::handleMessage(const BaseMessage &message)
{ {
LanguageClientManager::logBaseMessage(LspLogMessage::ServerMessage, name(), message); LanguageClientManager::logBaseMessage(LspLogMessage::ServerMessage, name(), message);

View File

@@ -182,6 +182,8 @@ signals:
protected: protected:
void setError(const QString &message); void setError(const QString &message);
void setProgressTitleForToken(const LanguageServerProtocol::ProgressToken &token,
const QString &message);
void handleMessage(const LanguageServerProtocol::BaseMessage &message); void handleMessage(const LanguageServerProtocol::BaseMessage &message);
private: private:

View File

@@ -55,6 +55,12 @@ void ProgressManager::handleProgress(const LanguageServerProtocol::ProgressParam
endProgress(token, *end); endProgress(token, *end);
} }
void ProgressManager::setTitleForToken(const LanguageServerProtocol::ProgressToken &token,
const QString &message)
{
m_titles.insert(token, message);
}
Utils::Id languageClientProgressId(const ProgressToken &token) Utils::Id languageClientProgressId(const ProgressToken &token)
{ {
constexpr char k_LanguageClientProgressId[] = "LanguageClient.ProgressId."; constexpr char k_LanguageClientProgressId[] = "LanguageClient.ProgressId.";
@@ -71,8 +77,9 @@ void ProgressManager::beginProgress(const ProgressToken &token, const WorkDonePr
auto interface = new QFutureInterface<void>(); auto interface = new QFutureInterface<void>();
interface->reportStarted(); interface->reportStarted();
interface->setProgressRange(0, 100); // LSP always reports percentage of the task interface->setProgressRange(0, 100); // LSP always reports percentage of the task
const QString title = m_titles.value(token, begin.title());
Core::FutureProgress *progress = Core::ProgressManager::addTask( Core::FutureProgress *progress = Core::ProgressManager::addTask(
interface->future(), begin.title(), languageClientProgressId(token)); interface->future(), title, languageClientProgressId(token));
m_progress[token] = {progress, interface}; m_progress[token] = {progress, interface};
reportProgress(token, begin); reportProgress(token, begin);
} }

View File

@@ -46,6 +46,8 @@ public:
ProgressManager(); ProgressManager();
~ProgressManager(); ~ProgressManager();
void handleProgress(const LanguageServerProtocol::ProgressParams &params); void handleProgress(const LanguageServerProtocol::ProgressParams &params);
void setTitleForToken(const LanguageServerProtocol::ProgressToken &token,
const QString &message);
private: private:
void beginProgress(const LanguageServerProtocol::ProgressToken &token, void beginProgress(const LanguageServerProtocol::ProgressToken &token,
@@ -62,6 +64,7 @@ private:
}; };
QMap<LanguageServerProtocol::ProgressToken, LanguageClientProgress> m_progress; QMap<LanguageServerProtocol::ProgressToken, LanguageClientProgress> m_progress;
QMap<LanguageServerProtocol::ProgressToken, QString> m_titles;
}; };
} // namespace LanguageClient } // namespace LanguageClient