diff --git a/src/plugins/languageclient/lspinspector.cpp b/src/plugins/languageclient/lspinspector.cpp index c01b5061cea..1d5cba622c7 100644 --- a/src/plugins/languageclient/lspinspector.cpp +++ b/src/plugins/languageclient/lspinspector.cpp @@ -5,6 +5,7 @@ #include "client.h" #include "languageclientmanager.h" +#include "languageclientsettings.h" #include "languageclienttr.h" #include @@ -13,11 +14,17 @@ #include #include +#include + #include +#include #include +#include +#include #include #include +#include #include #include #include @@ -28,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -331,10 +337,12 @@ private: LspLogWidget *log() const; LspCapabilitiesWidget *capabilities() const; - LspInspector * const m_inspector = nullptr; - QTabWidget * const m_tabWidget; + LspInspector *const m_inspector = nullptr; + LspLogWidget *m_logWidget = nullptr; + LspCapabilitiesWidget *m_capWidget = nullptr; + QTabWidget *m_tabWidget = nullptr; + const int m_numFixedTabs = 2; - enum class TabIndex { Log, Capabilities, Custom }; QComboBox *m_clients = nullptr; }; @@ -399,8 +407,37 @@ void LspInspector::onInspectorClosed() m_currentWidget = nullptr; } +static QString sendMessage(Client *client, const QString &msg) +{ + if (!client) + return Tr::tr("No client selected"); + + QString parseError; + BaseMessage baseMsg; + QByteArray asUtf8 = msg.toUtf8(); + QBuffer buf; + buf.open(QIODevice::WriteOnly); + buf.write(QString("Content-Length: %1\r\n\r\n").arg(asUtf8.size()).toUtf8()); + buf.write(asUtf8); + buf.close(); + + buf.open(QIODevice::ReadOnly); + BaseMessage::parse(&buf, parseError, baseMsg); + + if (!parseError.isEmpty()) + return parseError; + + auto rpcMessage = JsonRpcMessage(baseMsg); + if (!rpcMessage.parseError().isEmpty()) + return rpcMessage.parseError(); + + client->sendMessage(rpcMessage, Client::SendDocUpdates::Send, LanguageClient::Schedule::Delayed); + + return {}; +} + LspInspectorWidget::LspInspectorWidget(LspInspector *inspector) - : m_inspector(inspector), m_tabWidget(new QTabWidget(this)) + : m_inspector(inspector) { setWindowTitle(Tr::tr("Language Client Inspector")); @@ -409,22 +446,14 @@ LspInspectorWidget::LspInspectorWidget(LspInspector *inspector) this, &LspInspectorWidget::updateCapabilities); connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose, this, &QWidget::close); - auto mainLayout = new QVBoxLayout; - m_clients = new QComboBox; m_clients->addItem(Tr::tr("