forked from qt-creator/qt-creator
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:
@@ -63,6 +63,7 @@ ClangdClient::ClangdClient(ProjectExplorer::Project *project, const Utils::FileP
|
||||
setClientCapabilities(caps);
|
||||
setLocatorsEnabled(false);
|
||||
setDocumentActionsEnabled(false);
|
||||
setProgressTitleForToken("backgroundIndexProgress", tr("Parsing C/C++ Files (clangd)"));
|
||||
setCurrentProject(project);
|
||||
start();
|
||||
}
|
||||
|
||||
@@ -1019,6 +1019,12 @@ void Client::setError(const QString &message)
|
||||
m_state = Error;
|
||||
}
|
||||
|
||||
void Client::setProgressTitleForToken(const LanguageServerProtocol::ProgressToken &token,
|
||||
const QString &message)
|
||||
{
|
||||
m_progressManager.setTitleForToken(token, message);
|
||||
}
|
||||
|
||||
void Client::handleMessage(const BaseMessage &message)
|
||||
{
|
||||
LanguageClientManager::logBaseMessage(LspLogMessage::ServerMessage, name(), message);
|
||||
|
||||
@@ -182,6 +182,8 @@ signals:
|
||||
|
||||
protected:
|
||||
void setError(const QString &message);
|
||||
void setProgressTitleForToken(const LanguageServerProtocol::ProgressToken &token,
|
||||
const QString &message);
|
||||
void handleMessage(const LanguageServerProtocol::BaseMessage &message);
|
||||
|
||||
private:
|
||||
|
||||
@@ -55,6 +55,12 @@ void ProgressManager::handleProgress(const LanguageServerProtocol::ProgressParam
|
||||
endProgress(token, *end);
|
||||
}
|
||||
|
||||
void ProgressManager::setTitleForToken(const LanguageServerProtocol::ProgressToken &token,
|
||||
const QString &message)
|
||||
{
|
||||
m_titles.insert(token, message);
|
||||
}
|
||||
|
||||
Utils::Id languageClientProgressId(const ProgressToken &token)
|
||||
{
|
||||
constexpr char k_LanguageClientProgressId[] = "LanguageClient.ProgressId.";
|
||||
@@ -71,8 +77,9 @@ void ProgressManager::beginProgress(const ProgressToken &token, const WorkDonePr
|
||||
auto interface = new QFutureInterface<void>();
|
||||
interface->reportStarted();
|
||||
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(
|
||||
interface->future(), begin.title(), languageClientProgressId(token));
|
||||
interface->future(), title, languageClientProgressId(token));
|
||||
m_progress[token] = {progress, interface};
|
||||
reportProgress(token, begin);
|
||||
}
|
||||
|
||||
@@ -46,6 +46,8 @@ public:
|
||||
ProgressManager();
|
||||
~ProgressManager();
|
||||
void handleProgress(const LanguageServerProtocol::ProgressParams ¶ms);
|
||||
void setTitleForToken(const LanguageServerProtocol::ProgressToken &token,
|
||||
const QString &message);
|
||||
|
||||
private:
|
||||
void beginProgress(const LanguageServerProtocol::ProgressToken &token,
|
||||
@@ -62,6 +64,7 @@ private:
|
||||
};
|
||||
|
||||
QMap<LanguageServerProtocol::ProgressToken, LanguageClientProgress> m_progress;
|
||||
QMap<LanguageServerProtocol::ProgressToken, QString> m_titles;
|
||||
};
|
||||
|
||||
} // namespace LanguageClient
|
||||
|
||||
Reference in New Issue
Block a user