summaryrefslogtreecommitdiff
path: root/src/plugins/languageclient
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2022-02-24 11:42:13 +0100
committerEike Ziller <eike.ziller@qt.io>2022-02-24 11:42:57 +0100
commit41538832c36748068a514c11d0a3be7dcdea77ad (patch)
treecc0840d8afb41c0c89c358a572f25e8e44054917 /src/plugins/languageclient
parentf1e973de794e2e11f1eb92d6fa4dbad1bee1429c (diff)
parent0ce098ed878b72e4157449fb762b2d70205f3608 (diff)
downloadqt-creator-41538832c36748068a514c11d0a3be7dcdea77ad.tar.gz
Merge remote-tracking branch 'origin/7.0'
Conflicts: src/libs/utils/qtcprocess.cpp src/plugins/qmldesigner/components/curveeditor/curveeditorview.cpp src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp Change-Id: Id0c31719e46d1c44770ea89663eee321a0517ff4
Diffstat (limited to 'src/plugins/languageclient')
-rw-r--r--src/plugins/languageclient/client.cpp10
-rw-r--r--src/plugins/languageclient/diagnosticmanager.cpp33
-rw-r--r--src/plugins/languageclient/diagnosticmanager.h4
-rw-r--r--src/plugins/languageclient/languageclientcompletionassist.cpp2
4 files changed, 22 insertions, 27 deletions
diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp
index ec9bed459e..f3b9467667 100644
--- a/src/plugins/languageclient/client.cpp
+++ b/src/plugins/languageclient/client.cpp
@@ -622,7 +622,7 @@ void Client::activateDocument(TextEditor::TextDocument *document)
void Client::deactivateDocument(TextEditor::TextDocument *document)
{
- m_diagnosticManager.hideDiagnostics(document);
+ m_diagnosticManager.hideDiagnostics(document->filePath());
resetAssistProviders(document);
document->setFormatter(nullptr);
m_tokenSupport.clearHighlight(document);
@@ -1628,12 +1628,8 @@ void Client::shutDownCallback(const ShutdownRequest::Response &shutdownResponse)
m_shutdownTimer.stop();
QTC_ASSERT(m_state == ShutdownRequested, return);
QTC_ASSERT(m_clientInterface, return);
- optional<ShutdownRequest::Response::Error> errorValue = shutdownResponse.error();
- if (errorValue.has_value()) {
- ShutdownRequest::Response::Error error = errorValue.value();
- qDebug() << error;
- return;
- }
+ if (optional<ShutdownRequest::Response::Error> error = shutdownResponse.error())
+ log(*error);
// directly send message otherwise the state check of sendContent would fail
sendMessage(ExitNotification().toBaseMessage());
qCDebug(LOGLSPCLIENT) << "language server " << m_displayName << " shutdown";
diff --git a/src/plugins/languageclient/diagnosticmanager.cpp b/src/plugins/languageclient/diagnosticmanager.cpp
index 3336726a72..cdaadb7d4a 100644
--- a/src/plugins/languageclient/diagnosticmanager.cpp
+++ b/src/plugins/languageclient/diagnosticmanager.cpp
@@ -88,26 +88,19 @@ void DiagnosticManager::setDiagnostics(const LanguageServerProtocol::DocumentUri
const QList<LanguageServerProtocol::Diagnostic> &diagnostics,
const Utils::optional<int> &version)
{
- removeDiagnostics(uri);
+ hideDiagnostics(uri.toFilePath());
m_diagnostics[uri] = {version, diagnostics};
}
-void DiagnosticManager::hideDiagnostics(TextDocument *doc)
+void DiagnosticManager::hideDiagnostics(const Utils::FilePath &filePath)
{
- if (!doc)
- return;
-
if (m_hideHandler)
m_hideHandler();
- for (BaseTextEditor *editor : BaseTextEditor::textEditorsForDocument(doc))
- editor->editorWidget()->setExtraSelections(TextEditorWidget::CodeWarningsSelection, {});
- qDeleteAll(Utils::filtered(doc->marks(), Utils::equal(&TextMark::category, m_client->id())));
-}
-
-void DiagnosticManager::removeDiagnostics(const LanguageServerProtocol::DocumentUri &uri)
-{
- hideDiagnostics(TextDocument::textDocumentForFilePath(uri.toFilePath()));
- m_diagnostics.remove(uri);
+ if (auto doc = TextDocument::textDocumentForFilePath(filePath)) {
+ for (BaseTextEditor *editor : BaseTextEditor::textEditorsForDocument(doc))
+ editor->editorWidget()->setExtraSelections(TextEditorWidget::CodeWarningsSelection, {});
+ }
+ qDeleteAll(m_marks.take(filePath));
}
static QTextEdit::ExtraSelection toDiagnosticsSelections(const Diagnostic &diagnostic,
@@ -130,11 +123,11 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri, int version)
const FilePath &filePath = uri.toFilePath();
if (TextDocument *doc = TextDocument::textDocumentForFilePath(filePath)) {
QList<QTextEdit::ExtraSelection> extraSelections;
- const VersionedDiagnostics &versionedDiagnostics = m_diagnostics.value(uri);
+ const VersionedDiagnostics &versionedDiagnostics = m_diagnostics.value(uri);
if (versionedDiagnostics.version.value_or(version) == version) {
for (const Diagnostic &diagnostic : versionedDiagnostics.diagnostics) {
extraSelections << toDiagnosticsSelections(diagnostic, doc->document());
- doc->addMark(m_textMarkCreator(filePath, diagnostic));
+ m_marks[filePath].append(m_textMarkCreator(filePath, diagnostic));
}
}
@@ -164,7 +157,13 @@ TextEditor::TextMark *DiagnosticManager::createTextMark(const FilePath &filePath
void DiagnosticManager::clearDiagnostics()
{
for (const DocumentUri &uri : m_diagnostics.keys())
- removeDiagnostics(uri);
+ hideDiagnostics(uri.toFilePath());
+ m_diagnostics.clear();
+ if (!QTC_GUARD(m_marks.isEmpty())) {
+ for (const QList<TextEditor::TextMark *> &marks : qAsConst(m_marks))
+ qDeleteAll(marks);
+ m_marks.clear();
+ }
}
QList<Diagnostic> DiagnosticManager::diagnosticsAt(const DocumentUri &uri,
diff --git a/src/plugins/languageclient/diagnosticmanager.h b/src/plugins/languageclient/diagnosticmanager.h
index e3a2aefcc8..a7e2e47485 100644
--- a/src/plugins/languageclient/diagnosticmanager.h
+++ b/src/plugins/languageclient/diagnosticmanager.h
@@ -56,10 +56,9 @@ public:
void setDiagnostics(const LanguageServerProtocol::DocumentUri &uri,
const QList<LanguageServerProtocol::Diagnostic> &diagnostics,
const Utils::optional<int> &version);
- void removeDiagnostics(const LanguageServerProtocol::DocumentUri &uri);
void showDiagnostics(const LanguageServerProtocol::DocumentUri &uri, int version);
- void hideDiagnostics(TextEditor::TextDocument *doc);
+ void hideDiagnostics(const Utils::FilePath &filePath);
void clearDiagnostics();
@@ -81,6 +80,7 @@ private:
QList<LanguageServerProtocol::Diagnostic> diagnostics;
};
QMap<LanguageServerProtocol::DocumentUri, VersionedDiagnostics> m_diagnostics;
+ QMap<Utils::FilePath, QList<TextEditor::TextMark *>> m_marks;
TextMarkCreator m_textMarkCreator;
HideDiagnosticsHandler m_hideHandler;
Client *m_client;
diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp
index bce818f96a..3cec5a2e49 100644
--- a/src/plugins/languageclient/languageclientcompletionassist.cpp
+++ b/src/plugins/languageclient/languageclientcompletionassist.cpp
@@ -427,7 +427,7 @@ void LanguageClientCompletionAssistProcessor::handleCompletionResponse(
items = Utils::get<QList<CompletionItem>>(*result);
}
auto proposalItems = generateCompletionItems(items);
- if (!proposalItems.isEmpty() && !m_snippetsGroup.isEmpty()) {
+ if (!m_snippetsGroup.isEmpty()) {
proposalItems << TextEditor::SnippetAssistCollector(
m_snippetsGroup, QIcon(":/texteditor/images/snippet.png")).collect();
}