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);
|
setClientCapabilities(caps);
|
||||||
setLocatorsEnabled(false);
|
setLocatorsEnabled(false);
|
||||||
setDocumentActionsEnabled(false);
|
setDocumentActionsEnabled(false);
|
||||||
|
setProgressTitleForToken("backgroundIndexProgress", tr("Parsing C/C++ Files (clangd)"));
|
||||||
setCurrentProject(project);
|
setCurrentProject(project);
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ public:
|
|||||||
ProgressManager();
|
ProgressManager();
|
||||||
~ProgressManager();
|
~ProgressManager();
|
||||||
void handleProgress(const LanguageServerProtocol::ProgressParams ¶ms);
|
void handleProgress(const LanguageServerProtocol::ProgressParams ¶ms);
|
||||||
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user