diff options
Diffstat (limited to 'src/plugins/languageclient')
-rw-r--r-- | src/plugins/languageclient/client.cpp | 77 | ||||
-rw-r--r-- | src/plugins/languageclient/client.h | 11 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclient.pro | 6 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclient.qbs | 6 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclientcompletionassist.cpp (renamed from src/plugins/languageclient/languageclientcodeassist.cpp) | 2 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclientcompletionassist.h (renamed from src/plugins/languageclient/languageclientcodeassist.h) | 2 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclientquickfix.cpp | 166 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclientquickfix.h | 45 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclientsettings.cpp | 46 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclientutils.cpp | 18 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclientutils.h | 1 |
11 files changed, 335 insertions, 45 deletions
diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index d401f452ac..dde08c6794 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -69,6 +69,7 @@ class TextMark : public TextEditor::TextMark public: TextMark(const Utils::FileName &fileName, const Diagnostic &diag) : TextEditor::TextMark(fileName, diag.range().start().line() + 1, "lspmark") + , m_diagnostic(diag) { using namespace Utils; setLineAnnotation(diag.message()); @@ -81,11 +82,17 @@ public: setIcon(isError ? Icons::CODEMODEL_ERROR.icon() : Icons::CODEMODEL_WARNING.icon()); } + + const Diagnostic &diagnostic() const { return m_diagnostic; } + +private: + const Diagnostic m_diagnostic; }; Client::Client(BaseClientInterface *clientInterface) : m_id(Core::Id::fromString(QUuid::createUuid().toString())) , m_completionProvider(this) + , m_quickFixProvider(this) , m_clientInterface(clientInterface) { m_contentHandler.insert(JsonRpcMessageHandler::jsonRpcMimeType(), @@ -101,8 +108,10 @@ Client::~Client() using namespace TextEditor; // FIXME: instead of replacing the completion provider in the text document store the // completion provider as a prioritised list in the text document - for (TextDocument *document : m_resetCompletionProvider) + for (TextDocument *document : m_resetAssistProvider) { document->setCompletionAssistProvider(nullptr); + document->setQuickFixAssistProvider(nullptr); + } for (Core::IEditor * editor : Core::DocumentModel::editorsForOpenedDocuments()) { if (auto textEditor = qobject_cast<BaseTextEditor *>(editor)) { TextEditorWidget *widget = textEditor->editorWidget(); @@ -192,10 +201,12 @@ void Client::openDocument(Core::IDocument *document) documentContentsChanged(document); }); if (textDocument) { - m_resetCompletionProvider << textDocument; + textDocument->completionAssistProvider(); + m_resetAssistProvider << textDocument; textDocument->setCompletionAssistProvider(&m_completionProvider); + textDocument->setQuickFixAssistProvider(&m_quickFixProvider); connect(textDocument, &QObject::destroyed, this, [this, textDocument]{ - m_resetCompletionProvider.remove(textDocument); + m_resetAssistProvider.remove(textDocument); }); if (BaseTextEditor *editor = BaseTextEditor::textEditorForDocument(textDocument)) { if (QPointer<TextEditorWidget> widget = editor->editorWidget()) { @@ -543,25 +554,10 @@ void Client::cursorPositionChanged(TextEditor::TextEditorWidget *widget) void Client::requestCodeActions(const DocumentUri &uri, const QList<Diagnostic> &diagnostics) { const Utils::FileName fileName = uri.toFileName(); - TextEditor::TextDocument *doc = textDocumentForFileName(fileName); + TextEditor::TextDocument *doc = TextEditor::TextDocument::textDocumentForFileName(fileName); if (!doc) return; - const QString method(CodeActionRequest::methodName); - if (Utils::optional<bool> registered = m_dynamicCapabilities.isRegistered(method)) { - if (!registered.value()) - return; - const TextDocumentRegistrationOptions option( - m_dynamicCapabilities.option(method).toObject()); - if (option.isValid(nullptr) && !option.filterApplies(fileName)) - return; - } else { - Utils::variant<bool, CodeActionOptions> provider - = m_serverCapabilities.codeActionProvider().value_or(false); - if (!(Utils::holds_alternative<CodeActionOptions>(provider) || Utils::get<bool>(provider))) - return; - } - CodeActionParams codeActionParams; CodeActionParams::CodeActionContext context; context.setDiagnostics(diagnostics); @@ -577,6 +573,32 @@ void Client::requestCodeActions(const DocumentUri &uri, const QList<Diagnostic> if (self) self->handleCodeActionResponse(response, uri); }); + requestCodeActions(request); +} + +void Client::requestCodeActions(const CodeActionRequest &request) +{ + if (!request.isValid(nullptr)) + return; + + const Utils::FileName fileName + = request.params().value_or(CodeActionParams()).textDocument().uri().toFileName(); + + const QString method(CodeActionRequest::methodName); + if (Utils::optional<bool> registered = m_dynamicCapabilities.isRegistered(method)) { + if (!registered.value()) + return; + const TextDocumentRegistrationOptions option( + m_dynamicCapabilities.option(method).toObject()); + if (option.isValid(nullptr) && !option.filterApplies(fileName)) + return; + } else { + Utils::variant<bool, CodeActionOptions> provider + = m_serverCapabilities.codeActionProvider().value_or(false); + if (!(Utils::holds_alternative<CodeActionOptions>(provider) || Utils::get<bool>(provider))) + return; + } + sendContent(request); } @@ -682,6 +704,17 @@ bool Client::needsRestart(const BaseSettings *settings) const || m_languagFilter.filePattern != settings->m_languageFilter.filePattern; } +QList<Diagnostic> Client::diagnosticsAt(const DocumentUri &uri, const Range &range) const +{ + QList<Diagnostic> diagnostics; + for (const TextMark *mark : m_diagnostics[uri]) { + const Diagnostic diagnostic = mark->diagnostic(); + if (diagnostic.range().overlaps(range)) + diagnostics << diagnostic; + } + return diagnostics; +} + bool Client::start() { return m_clientInterface->start(); @@ -778,7 +811,8 @@ void Client::showMessageBox(const ShowMessageRequestParams &message, const Messa void Client::showDiagnostics(const DocumentUri &uri) { - if (TextEditor::TextDocument *doc = textDocumentForFileName(uri.toFileName())) { + if (TextEditor::TextDocument *doc + = TextEditor::TextDocument::textDocumentForFileName(uri.toFileName())) { for (TextMark *mark : m_diagnostics.value(uri)) doc->addMark(mark); } @@ -786,7 +820,8 @@ void Client::showDiagnostics(const DocumentUri &uri) void Client::removeDiagnostics(const DocumentUri &uri) { - TextEditor::TextDocument *doc = textDocumentForFileName(uri.toFileName()); + TextEditor::TextDocument *doc + = TextEditor::TextDocument::textDocumentForFileName(uri.toFileName()); for (TextMark *mark : m_diagnostics.take(uri)) { if (doc) diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index 3d691f2bd2..2d92424f42 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -26,7 +26,8 @@ #pragma once #include "dynamiccapabilities.h" -#include "languageclientcodeassist.h" +#include "languageclientcompletionassist.h" +#include "languageclientquickfix.h" #include "languageclientsettings.h" #include <coreplugin/id.h> @@ -104,6 +105,7 @@ public: void requestCodeActions(const LanguageServerProtocol::DocumentUri &uri, const QList<LanguageServerProtocol::Diagnostic> &diagnostics); + void requestCodeActions(const LanguageServerProtocol::CodeActionRequest &request); void handleCodeActionResponse(const LanguageServerProtocol::CodeActionRequest::Response &response, const LanguageServerProtocol::DocumentUri &uri); void executeCommand(const LanguageServerProtocol::Command &command); @@ -129,6 +131,10 @@ public: bool needsRestart(const BaseSettings *) const; + QList<LanguageServerProtocol::Diagnostic> diagnosticsAt( + const LanguageServerProtocol::DocumentUri &uri, + const LanguageServerProtocol::Range &range) const; + bool start(); bool reset(); @@ -184,7 +190,8 @@ private: LanguageServerProtocol::ServerCapabilities m_serverCapabilities; DynamicCapabilities m_dynamicCapabilities; LanguageClientCompletionAssistProvider m_completionProvider; - QSet<TextEditor::TextDocument *> m_resetCompletionProvider; + LanguageClientQuickFixProvider m_quickFixProvider; + QSet<TextEditor::TextDocument *> m_resetAssistProvider; QHash<LanguageServerProtocol::DocumentUri, LanguageServerProtocol::MessageId> m_highlightRequests; int m_restartsLeft = 5; QScopedPointer<BaseClientInterface> m_clientInterface; diff --git a/src/plugins/languageclient/languageclient.pro b/src/plugins/languageclient/languageclient.pro index 59c568a75b..dbae20e109 100644 --- a/src/plugins/languageclient/languageclient.pro +++ b/src/plugins/languageclient/languageclient.pro @@ -6,11 +6,12 @@ HEADERS += \ client.h \ dynamiccapabilities.h \ languageclient_global.h \ - languageclientcodeassist.h \ + languageclientcompletionassist.h \ languageclientinterface.h \ languageclientmanager.h \ languageclientoutline.h \ languageclientplugin.h \ + languageclientquickfix.h \ languageclientsettings.h \ languageclientutils.h @@ -18,11 +19,12 @@ HEADERS += \ SOURCES += \ client.cpp \ dynamiccapabilities.cpp \ - languageclientcodeassist.cpp \ + languageclientcompletionassist.cpp \ languageclientinterface.cpp \ languageclientmanager.cpp \ languageclientoutline.cpp \ languageclientplugin.cpp \ + languageclientquickfix.cpp \ languageclientsettings.cpp \ languageclientutils.cpp diff --git a/src/plugins/languageclient/languageclient.qbs b/src/plugins/languageclient/languageclient.qbs index 0da6a58076..0c2752ef5e 100644 --- a/src/plugins/languageclient/languageclient.qbs +++ b/src/plugins/languageclient/languageclient.qbs @@ -20,16 +20,18 @@ QtcPlugin { "dynamiccapabilities.h", "languageclient.qrc", "languageclient_global.h", - "languageclientcodeassist.cpp", - "languageclientcodeassist.h", "languageclientinterface.cpp", "languageclientinterface.h", + "languageclientcompletionassist.cpp", + "languageclientcompletionassist.h", "languageclientmanager.cpp", "languageclientmanager.h", "languageclientoutline.cpp", "languageclientoutline.h", "languageclientplugin.cpp", "languageclientplugin.h", + "languageclientquickfix.cpp", + "languageclientquickfix.h", "languageclientsettings.cpp", "languageclientsettings.h", "languageclientutils.cpp", diff --git a/src/plugins/languageclient/languageclientcodeassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index af0e9ce892..1d9a10f6e4 100644 --- a/src/plugins/languageclient/languageclientcodeassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -23,7 +23,7 @@ ** ****************************************************************************/ -#include "languageclientcodeassist.h" +#include "languageclientcompletionassist.h" #include "client.h" #include "languageclientutils.h" diff --git a/src/plugins/languageclient/languageclientcodeassist.h b/src/plugins/languageclient/languageclientcompletionassist.h index 1410e67f82..f0ad95bc88 100644 --- a/src/plugins/languageclient/languageclientcodeassist.h +++ b/src/plugins/languageclient/languageclientcompletionassist.h @@ -48,7 +48,7 @@ public: private: QList<QString> m_triggerChars; int m_activationCharSequenceLength = 0; - Client *m_client; + Client *m_client = nullptr; // not owned }; } // namespace LanguageClient diff --git a/src/plugins/languageclient/languageclientquickfix.cpp b/src/plugins/languageclient/languageclientquickfix.cpp new file mode 100644 index 0000000000..def01b17d8 --- /dev/null +++ b/src/plugins/languageclient/languageclientquickfix.cpp @@ -0,0 +1,166 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#include "languageclientquickfix.h" + +#include "client.h" +#include "languageclientutils.h" + +#include <texteditor/codeassist/assistinterface.h> +#include <texteditor/codeassist/genericproposal.h> +#include <texteditor/codeassist/iassistprocessor.h> +#include <texteditor/quickfix.h> + + +using namespace LanguageServerProtocol; +using namespace TextEditor; + +namespace LanguageClient { + +class CodeActionQuickFixOperation : public QuickFixOperation +{ +public: + CodeActionQuickFixOperation(const CodeAction &action, Client *client) + : m_action(action) + , m_client(client) + { setDescription(action.title()); } + + void perform() override + { + if (Utils::optional<WorkspaceEdit> edit = m_action.edit()) { + applyWorkspaceEdit(*edit); + } else if (Utils::optional<Command> command = m_action.command()) { + if (m_client) + m_client->executeCommand(*command); + } + } + +private: + CodeAction m_action; + QPointer<Client> m_client; +}; + +class CommandQuickFixOperation : public QuickFixOperation +{ +public: + CommandQuickFixOperation(const Command &command, Client *client) + : m_command(command) + , m_client(client) + { setDescription(command.title()); } + void perform() override + { + if (m_client) + m_client->executeCommand(m_command); + } + +private: + Command m_command; + QPointer<Client> m_client; +}; + +class LanguageClientQuickFixAssistProcessor : public IAssistProcessor +{ +public: + explicit LanguageClientQuickFixAssistProcessor(Client *client) : m_client(client) {} + bool running() override { return m_running; } + IAssistProposal *perform(const AssistInterface *interface) override; + +private: + void handleCodeActionResponse(const CodeActionRequest::Response &response); + + QSharedPointer<const AssistInterface> m_assistInterface; + Client *m_client = nullptr; // not owned + bool m_running = false; +}; + +IAssistProposal *LanguageClientQuickFixAssistProcessor::perform(const AssistInterface *interface) +{ + m_assistInterface = QSharedPointer<const AssistInterface>(interface); + + CodeActionParams params; + params.setContext({}); + QTextCursor cursor(interface->textDocument()); + cursor.setPosition(interface->position()); + if (cursor.atBlockEnd() || cursor.atBlockStart()) + cursor.select(QTextCursor::LineUnderCursor); + else + cursor.select(QTextCursor::WordUnderCursor); + if (!cursor.hasSelection()) + cursor.select(QTextCursor::LineUnderCursor); + Range range(cursor); + params.setRange(range); + auto uri = DocumentUri::fromFileName(Utils::FileName::fromString(interface->fileName())); + params.setTextDocument(uri); + CodeActionParams::CodeActionContext context; + context.setDiagnostics(m_client->diagnosticsAt(uri, range)); + params.setContext(context); + + CodeActionRequest request(params); + request.setResponseCallback([this](const CodeActionRequest::Response &response){ + handleCodeActionResponse(response); + }); + + m_client->requestCodeActions(request); + m_running = true; + return nullptr; +} + +void LanguageClientQuickFixAssistProcessor::handleCodeActionResponse( + const CodeActionRequest::Response &response) +{ + m_running = false; + if (const Utils::optional<CodeActionRequest::Response::Error> &error = response.error()) + m_client->log(*error); + QuickFixOperations ops; + if (const Utils::optional<CodeActionResult> &_result = response.result()) { + const CodeActionResult &result = _result.value(); + if (auto list = Utils::get_if<QList<Utils::variant<Command, CodeAction>>>(&result)) { + for (const Utils::variant<Command, CodeAction> &item : *list) { + if (auto action = Utils::get_if<CodeAction>(&item)) + ops << new CodeActionQuickFixOperation(*action, m_client); + else if (auto command = Utils::get_if<Command>(&item)) + ops << new CommandQuickFixOperation(*command, m_client); + } + } + } + setAsyncProposalAvailable(GenericProposal::createProposal(m_assistInterface.data(), ops)); +} + +LanguageClientQuickFixProvider::LanguageClientQuickFixProvider(Client *client) : m_client(client) +{ + QTC_CHECK(client); +} + +IAssistProvider::RunType LanguageClientQuickFixProvider::runType() const +{ + return Asynchronous; +} + +IAssistProcessor *LanguageClientQuickFixProvider::createProcessor() const +{ + return new LanguageClientQuickFixAssistProcessor(m_client); +} + +} // namespace LanguageClient diff --git a/src/plugins/languageclient/languageclientquickfix.h b/src/plugins/languageclient/languageclientquickfix.h new file mode 100644 index 0000000000..d9b322769f --- /dev/null +++ b/src/plugins/languageclient/languageclientquickfix.h @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include <texteditor/codeassist/iassistprovider.h> + +namespace LanguageClient { + +class Client; + +class LanguageClientQuickFixProvider : public TextEditor::IAssistProvider +{ +public: + explicit LanguageClientQuickFixProvider(Client *client); + IAssistProvider::RunType runType() const override; + TextEditor::IAssistProcessor *createProcessor() const override; + +private: + Client *m_client = nullptr; // not owned +}; + +} // namespace LanguageClient diff --git a/src/plugins/languageclient/languageclientsettings.cpp b/src/plugins/languageclient/languageclientsettings.cpp index e101db412c..17ea39f80e 100644 --- a/src/plugins/languageclient/languageclientsettings.cpp +++ b/src/plugins/languageclient/languageclientsettings.cpp @@ -34,9 +34,8 @@ #include <utils/algorithm.h> #include <utils/delegates.h> #include <utils/fancylineedit.h> -#include <utils/qtcprocess.h> #include <utils/mimetypes/mimedatabase.h> -#include <languageserverprotocol/lsptypes.h> +#include <utils/jsontreeitem.h> #include <QBoxLayout> #include <QCheckBox> @@ -150,7 +149,6 @@ LanguageClientSettingsPageWidget::LanguageClientSettingsPageWidget(LanguageClien connect(addButton, &QPushButton::pressed, this, &LanguageClientSettingsPageWidget::addItem); auto deleteButton = new QPushButton(LanguageClientSettingsPage::tr("&Delete")); connect(deleteButton, &QPushButton::pressed, this, &LanguageClientSettingsPageWidget::deleteItem); - mainLayout->addLayout(layout); setLayout(mainLayout); layout->addWidget(m_view); @@ -505,6 +503,24 @@ BaseClientInterface *StdIOSettings::createInterface() const return new StdIOClientInterface(m_executable, m_arguments); } +static QWidget *createCapabilitiesView( + const LanguageServerProtocol::ServerCapabilities &capabilities) +{ + auto root = new Utils::JsonTreeItem("Capabilities", QJsonValue(capabilities)); + if (root->canFetchMore()) + root->fetchMore(); + + auto capabilitiesModel = new Utils::TreeModel<Utils::JsonTreeItem>(root); + capabilitiesModel->setHeader({BaseSettingsWidget::tr("Name"), + BaseSettingsWidget::tr("Value"), + BaseSettingsWidget::tr("Type")}); + auto capabilitiesView = new QTreeView(); + capabilitiesView->setModel(capabilitiesModel); + capabilitiesView->setAlternatingRowColors(true); + capabilitiesView->header()->setSectionResizeMode(QHeaderView::ResizeToContents); + return capabilitiesView; +} + BaseSettingsWidget::BaseSettingsWidget(const BaseSettings *settings, QWidget *parent) : QWidget(parent) , m_name(new QLineEdit(settings->m_name, this)) @@ -528,6 +544,30 @@ BaseSettingsWidget::BaseSettingsWidget(const BaseSettings *settings, QWidget *pa connect(addMimeTypeButton, &QPushButton::pressed, this, &BaseSettingsWidget::showAddMimeTypeDialog); + auto createInfoLabel = []() { + return new QLabel(tr("Available after server was initialized")); + }; + + mainLayout->addWidget(new QLabel(tr("Capabilities:")), ++row, 0, Qt::AlignTop); + if (Client *client = settings->m_client.data()) { + if (client->state() == Client::Initialized) + mainLayout->addWidget(createCapabilitiesView(client->capabilities())); + else + mainLayout->addWidget(createInfoLabel(), row, 1); + connect(client, &Client::finished, mainLayout, [mainLayout, row, createInfoLabel]() { + delete mainLayout->itemAtPosition(row, 1)->widget(); + mainLayout->addWidget(createInfoLabel(), row, 1); + }); + connect(client, &Client::initialized, mainLayout, + [mainLayout, row]( + const LanguageServerProtocol::ServerCapabilities &capabilities) { + delete mainLayout->itemAtPosition(row, 1)->widget(); + mainLayout->addWidget(createCapabilitiesView(capabilities), row, 1); + }); + } else { + mainLayout->addWidget(createInfoLabel()); + } + setLayout(mainLayout); } diff --git a/src/plugins/languageclient/languageclientutils.cpp b/src/plugins/languageclient/languageclientutils.cpp index 5f3f8e0672..f81be2427c 100644 --- a/src/plugins/languageclient/languageclientutils.cpp +++ b/src/plugins/languageclient/languageclientutils.cpp @@ -40,6 +40,7 @@ using namespace LanguageServerProtocol; using namespace Utils; +using namespace TextEditor; namespace LanguageClient { @@ -72,7 +73,7 @@ bool applyTextDocumentEdit(const TextDocumentEdit &edit) if (edits.isEmpty()) return true; const DocumentUri &uri = edit.id().uri(); - if (TextEditor::TextDocument* doc = textDocumentForFileName(uri.toFileName())) { + if (TextDocument* doc = TextDocument::textDocumentForFileName(uri.toFileName())) { LanguageClientValue<int> version = edit.id().version(); if (!version.isNull() && version.value(0) < doc->document()->revision()) return false; @@ -84,14 +85,14 @@ bool applyTextEdits(const DocumentUri &uri, const QList<TextEdit> &edits) { if (edits.isEmpty()) return true; - TextEditor::RefactoringChanges changes; - TextEditor::RefactoringFilePtr file; + RefactoringChanges changes; + RefactoringFilePtr file; file = changes.file(uri.toFileName().toString()); file->setChangeSet(editsToChangeSet(edits, file->document())); return file->apply(); } -void applyTextEdit(TextEditor::TextDocumentManipulatorInterface &manipulator, const TextEdit &edit) +void applyTextEdit(TextDocumentManipulatorInterface &manipulator, const TextEdit &edit) { using namespace Utils::Text; const Range range = edit.range(); @@ -118,12 +119,6 @@ bool applyWorkspaceEdit(const WorkspaceEdit &edit) return result; } -TextEditor::TextDocument *textDocumentForFileName(const FileName &fileName) -{ - return qobject_cast<TextEditor::TextDocument *>( - Core::DocumentModel::documentForFilePath(fileName.toString())); -} - QTextCursor endOfLineCursor(const QTextCursor &cursor) { QTextCursor ret = cursor; @@ -135,8 +130,7 @@ void updateCodeActionRefactoringMarker(Client *client, const CodeAction &action, const DocumentUri &uri) { - using namespace TextEditor; - TextDocument* doc = textDocumentForFileName(uri.toFileName()); + TextDocument* doc = TextDocument::textDocumentForFileName(uri.toFileName()); if (!doc) return; BaseTextEditor *editor = BaseTextEditor::textEditorForDocument(doc); diff --git a/src/plugins/languageclient/languageclientutils.h b/src/plugins/languageclient/languageclientutils.h index 2891c2d303..f07b6e18bf 100644 --- a/src/plugins/languageclient/languageclientutils.h +++ b/src/plugins/languageclient/languageclientutils.h @@ -45,7 +45,6 @@ bool applyTextEdits(const LanguageServerProtocol::DocumentUri &uri, const QList<LanguageServerProtocol::TextEdit> &edits); void applyTextEdit(TextEditor::TextDocumentManipulatorInterface &manipulator, const LanguageServerProtocol::TextEdit &edit); -TextEditor::TextDocument *textDocumentForFileName(const Utils::FileName &fileName); void updateCodeActionRefactoringMarker(Client *client, const LanguageServerProtocol::CodeAction &action, const LanguageServerProtocol::DocumentUri &uri); |