diff options
| author | David Schulz <david.schulz@qt.io> | 2022-05-16 14:36:06 +0200 |
|---|---|---|
| committer | David Schulz <david.schulz@qt.io> | 2022-05-23 07:59:02 +0000 |
| commit | 94e2fa7df0864ec20fbb033bbf68f5e62bfbdbf3 (patch) | |
| tree | 0abbe56f12e9cdf2b748fd5c5196f076fe067b54 /src/plugins/languageclient/languageclienthoverhandler.cpp | |
| parent | a802a633f6dbeae04e77b545762c8a76457283d0 (diff) | |
| download | qt-creator-94e2fa7df0864ec20fbb033bbf68f5e62bfbdbf3.tar.gz | |
LanguageClient: Add option to always send hover requests
Even if we already have a diangostic visible at this location. This is
used in the coco server to display additional information inside the
coverage browser.
Change-Id: I0d75f2e9f469ebdf6df7d6948a8e3e6b0cc58969
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient/languageclienthoverhandler.cpp')
| -rw-r--r-- | src/plugins/languageclient/languageclienthoverhandler.cpp | 42 |
1 files changed, 28 insertions, 14 deletions
diff --git a/src/plugins/languageclient/languageclienthoverhandler.cpp b/src/plugins/languageclient/languageclienthoverhandler.cpp index 5f601a55c8..a326a689ae 100644 --- a/src/plugins/languageclient/languageclienthoverhandler.cpp +++ b/src/plugins/languageclient/languageclienthoverhandler.cpp @@ -54,6 +54,11 @@ void HoverHandler::abort() m_response = {}; } +void HoverHandler::setPreferDiagnosticts(bool prefer) +{ + m_preferDiagnostics = prefer; +} + void HoverHandler::setHelpItem(const LanguageServerProtocol::MessageId &msgId, const Core::HelpItem &help) { @@ -68,6 +73,18 @@ void HoverHandler::setHelpItem(const LanguageServerProtocol::MessageId &msgId, } } +bool HoverHandler::reportDiagnostics(const QTextCursor &cursor) +{ + const QList<Diagnostic> &diagnostics = m_client->diagnosticsAt(m_uri, cursor); + if (diagnostics.isEmpty()) + return false; + + const QStringList messages = Utils::transform(diagnostics, &Diagnostic::message); + setToolTip(messages.join('\n')); + m_report(Priority_Diagnostic); + return true; +} + void HoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos, TextEditor::BaseHoverHandler::ReportPriority report) @@ -81,15 +98,12 @@ void HoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget, } m_uri = DocumentUri::fromFilePath(editorWidget->textDocument()->filePath()); m_response = {}; - QTextCursor tc = editorWidget->textCursor(); - tc.setPosition(pos); - const QList<Diagnostic> &diagnostics = m_client->diagnosticsAt(m_uri, tc); - if (!diagnostics.isEmpty()) { - const QStringList messages = Utils::transform(diagnostics, &Diagnostic::message); - setToolTip(messages.join('\n')); - report(Priority_Diagnostic); + m_report = report; + + QTextCursor cursor = editorWidget->textCursor(); + cursor.setPosition(pos); + if (m_preferDiagnostics && reportDiagnostics(cursor)) return; - } const Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> &provider = m_client->capabilities().hoverProvider(); @@ -114,17 +128,15 @@ void HoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget, return; } - m_report = report; - QTextCursor cursor = editorWidget->textCursor(); - cursor.setPosition(pos); - HoverRequest request((TextDocumentPositionParams(TextDocumentIdentifier(m_uri), Position(cursor)))); + HoverRequest request{TextDocumentPositionParams(TextDocumentIdentifier(m_uri), + Position(cursor))}; m_currentRequest = request.id(); request.setResponseCallback( - [this](const HoverRequest::Response &response) { handleResponse(response); }); + [this, cursor](const HoverRequest::Response &response) { handleResponse(response, cursor); }); m_client->sendMessage(request); } -void HoverHandler::handleResponse(const HoverRequest::Response &response) +void HoverHandler::handleResponse(const HoverRequest::Response &response, const QTextCursor &cursor) { m_currentRequest.reset(); if (Utils::optional<HoverRequest::Response::Error> error = response.error()) { @@ -139,6 +151,8 @@ void HoverHandler::handleResponse(const HoverRequest::Response &response) return; } setContent(hover->content()); + } else if (!m_preferDiagnostics && reportDiagnostics(cursor)) { + return; } } m_report(priority()); |
