forked from qt-creator/qt-creator
Python: automatically disable outdated pyls settings
Change-Id: I301c6df3fdd9cf634a1abff20c6f24b9bc5fc23b Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -349,10 +349,10 @@ void LanguageClientManager::registerClientSettings(BaseSettings *settings)
|
||||
managerInstance->applySettings();
|
||||
}
|
||||
|
||||
void LanguageClientManager::enableClientSettings(const QString &settingsId)
|
||||
void LanguageClientManager::enableClientSettings(const QString &settingsId, bool enable)
|
||||
{
|
||||
QTC_ASSERT(managerInstance, return);
|
||||
LanguageClientSettings::enableSettings(settingsId);
|
||||
LanguageClientSettings::enableSettings(settingsId, enable);
|
||||
managerInstance->applySettings();
|
||||
}
|
||||
|
||||
|
@@ -80,7 +80,7 @@ public:
|
||||
static void applySettings();
|
||||
static QList<BaseSettings *> currentSettings();
|
||||
static void registerClientSettings(BaseSettings *settings);
|
||||
static void enableClientSettings(const QString &settingsId);
|
||||
static void enableClientSettings(const QString &settingsId, bool enable = true);
|
||||
static QList<Client *> clientsForSetting(const BaseSettings *setting);
|
||||
static const BaseSettings *settingForClient(Client *setting);
|
||||
static Client *clientForDocument(TextEditor::TextDocument *document);
|
||||
|
@@ -114,7 +114,7 @@ public:
|
||||
void reset(const QList<BaseSettings *> &settings);
|
||||
QList<BaseSettings *> settings() const { return m_settings; }
|
||||
int insertSettings(BaseSettings *settings);
|
||||
void enableSetting(const QString &id);
|
||||
void enableSetting(const QString &id, bool enable = true);
|
||||
QList<BaseSettings *> removed() const { return m_removed; }
|
||||
BaseSettings *settingForIndex(const QModelIndex &index) const;
|
||||
QModelIndex indexForSetting(BaseSettings *setting) const;
|
||||
@@ -163,7 +163,7 @@ public:
|
||||
QList<BaseSettings *> settings() const;
|
||||
QList<BaseSettings *> changedSettings() const;
|
||||
void addSettings(BaseSettings *settings);
|
||||
void enableSettings(const QString &id);
|
||||
void enableSettings(const QString &id, bool enable = true);
|
||||
|
||||
private:
|
||||
LanguageClientSettingsModel m_model;
|
||||
@@ -368,9 +368,9 @@ void LanguageClientSettingsPage::addSettings(BaseSettings *settings)
|
||||
m_changedSettings << settings->m_id;
|
||||
}
|
||||
|
||||
void LanguageClientSettingsPage::enableSettings(const QString &id)
|
||||
void LanguageClientSettingsPage::enableSettings(const QString &id, bool enable)
|
||||
{
|
||||
m_model.enableSetting(id);
|
||||
m_model.enableSetting(id, enable);
|
||||
}
|
||||
|
||||
LanguageClientSettingsModel::~LanguageClientSettingsModel()
|
||||
@@ -498,12 +498,14 @@ int LanguageClientSettingsModel::insertSettings(BaseSettings *settings)
|
||||
return row;
|
||||
}
|
||||
|
||||
void LanguageClientSettingsModel::enableSetting(const QString &id)
|
||||
void LanguageClientSettingsModel::enableSetting(const QString &id, bool enable)
|
||||
{
|
||||
BaseSettings *setting = Utils::findOrDefault(m_settings, Utils::equal(&BaseSettings::m_id, id));
|
||||
if (!setting)
|
||||
return;
|
||||
setting->m_enabled = true;
|
||||
if (setting->m_enabled == enable)
|
||||
return;
|
||||
setting->m_enabled = enable;
|
||||
const QModelIndex &index = indexForSetting(setting);
|
||||
if (index.isValid())
|
||||
emit dataChanged(index, index, {Qt::CheckStateRole});
|
||||
@@ -687,9 +689,9 @@ void LanguageClientSettings::addSettings(BaseSettings *settings)
|
||||
settingsPage().addSettings(settings);
|
||||
}
|
||||
|
||||
void LanguageClientSettings::enableSettings(const QString &id)
|
||||
void LanguageClientSettings::enableSettings(const QString &id, bool enable)
|
||||
{
|
||||
settingsPage().enableSettings(id);
|
||||
settingsPage().enableSettings(id, enable);
|
||||
}
|
||||
|
||||
void LanguageClientSettings::toSettings(QSettings *settings,
|
||||
|
@@ -166,7 +166,7 @@ public:
|
||||
*/
|
||||
static void registerClientType(const ClientType &type);
|
||||
static void addSettings(BaseSettings *settings);
|
||||
static void enableSettings(const QString &id);
|
||||
static void enableSettings(const QString &id, bool enable = true);
|
||||
static void toSettings(QSettings *settings, const QList<BaseSettings *> &languageClientSettings);
|
||||
|
||||
static bool outlineComboBoxIsSorted();
|
||||
|
@@ -26,10 +26,14 @@
|
||||
#include "pythonsettings.h"
|
||||
|
||||
#include "pythonconstants.h"
|
||||
#include "pythonplugin.h"
|
||||
|
||||
#include <coreplugin/dialogs/ioptionspage.h>
|
||||
#include <coreplugin/icore.h>
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
#include <languageclient/languageclient_global.h>
|
||||
#include <languageclient/languageclientsettings.h>
|
||||
#include <languageclient/languageclientmanager.h>
|
||||
#include <texteditor/textdocument.h>
|
||||
#include <texteditor/texteditor.h>
|
||||
#include <utils/algorithm.h>
|
||||
@@ -643,6 +647,33 @@ static QString defaultPylsConfiguration()
|
||||
return QString::fromUtf8(QJsonDocument(configuration).toJson());
|
||||
}
|
||||
|
||||
static void disableOutdatedPylsNow()
|
||||
{
|
||||
using namespace LanguageClient;
|
||||
const QList<BaseSettings *>
|
||||
settings = LanguageClientSettings::pageSettings();
|
||||
for (const BaseSettings *setting : settings) {
|
||||
if (setting->m_settingsTypeId != LanguageClient::Constants::LANGUAGECLIENT_STDIO_SETTINGS_ID)
|
||||
continue;
|
||||
auto stdioSetting = static_cast<const StdIOSettings *>(setting);
|
||||
if (stdioSetting->arguments().startsWith("-m pyls")
|
||||
&& stdioSetting->m_languageFilter.isSupported("foo.py", Constants::C_PY_MIMETYPE)) {
|
||||
LanguageClientManager::enableClientSettings(stdioSetting->m_id, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void disableOutdatedPyls()
|
||||
{
|
||||
using namespace ExtensionSystem;
|
||||
if (PluginManager::isInitializationDone()) {
|
||||
disableOutdatedPylsNow();
|
||||
} else {
|
||||
QObject::connect(PluginManager::instance(), &PluginManager::initializationDone,
|
||||
PythonPlugin::instance(), &disableOutdatedPylsNow);
|
||||
}
|
||||
}
|
||||
|
||||
static SavedSettings fromSettings(QSettings *settings)
|
||||
{
|
||||
SavedSettings result;
|
||||
@@ -674,7 +705,9 @@ static SavedSettings fromSettings(QSettings *settings)
|
||||
result.defaultId = settings->value(defaultKey).toString();
|
||||
|
||||
QVariant pylsEnabled = settings->value(pylsEnabledKey);
|
||||
if (!pylsEnabled.isNull())
|
||||
if (pylsEnabled.isNull())
|
||||
disableOutdatedPyls();
|
||||
else
|
||||
result.pylsEnabled = pylsEnabled.toBool();
|
||||
const QVariant pylsConfiguration = settings->value(pylsConfigurationKey);
|
||||
if (!pylsConfiguration.isNull())
|
||||
|
Reference in New Issue
Block a user