LSP: Add setting to provide initializationOptions to the language server

When the language server is initialized, the Initialize request can contain
user provided data in initializationOptions field.

Allow the user to set data inside. This can be required to let the
language server have some context.

Change-Id: Ib057fdb940c21b3fd032853fb84253d42ad1e321
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Alexis Murzeau
2020-05-09 02:51:19 +02:00
parent 5868e15c30
commit 3268e5f0bc
4 changed files with 65 additions and 1 deletions

View File

@@ -250,6 +250,7 @@ void Client::initialize()
InitializeRequest initRequest;
auto params = initRequest.params().value_or(InitializeParams());
params.setCapabilities(generateClientCapabilities());
params.setInitializationOptions(m_initializationOptions);
if (m_project) {
params.setRootUri(DocumentUri::fromFilePath(m_project->projectDirectory()));
params.setWorkSpaceFolders(Utils::transform(SessionManager::projects(), [](Project *pro){
@@ -879,6 +880,11 @@ void Client::setSupportedLanguage(const LanguageFilter &filter)
m_languagFilter = filter;
}
void Client::setInitializationOptions(const QJsonObject &initializationOptions)
{
m_initializationOptions = initializationOptions;
}
bool Client::isSupportedDocument(const TextEditor::TextDocument *document) const
{
QTC_ASSERT(document, return false);
@@ -900,7 +906,8 @@ bool Client::needsRestart(const BaseSettings *settings) const
{
QTC_ASSERT(settings, return false);
return m_languagFilter.mimeTypes != settings->m_languageFilter.mimeTypes
|| m_languagFilter.filePattern != settings->m_languageFilter.filePattern;
|| m_languagFilter.filePattern != settings->m_languageFilter.filePattern
|| m_initializationOptions != settings->initializationOptions();
}
QList<Diagnostic> Client::diagnosticsAt(const DocumentUri &uri, const Range &range) const