forked from qt-creator/qt-creator
CppEditor: Add settings for clangd session mode
Complete with (hidden) UI. Doesn't do anything yet, because some assumptions about projects need to be adapted on the LanguageClient side first. Task-number: QTCREATORBUG-26526 Change-Id: I34c92555e34c3d3ed98462261d47b35dfc015ce0 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -31,6 +31,7 @@
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
#include <projectexplorer/project.h>
|
||||
#include <projectexplorer/session.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/qtcassert.h>
|
||||
@@ -77,6 +78,7 @@ static QString clangdHeaderInsertionKey() { return QLatin1String("ClangdHeaderIn
|
||||
static QString clangdThreadLimitKey() { return QLatin1String("ClangdThreadLimit"); }
|
||||
static QString clangdDocumentThresholdKey() { return QLatin1String("ClangdDocumentThreshold"); }
|
||||
static QString clangdUseGlobalSettingsKey() { return QLatin1String("useGlobalSettings"); }
|
||||
static QString sessionsWithOneClangdKey() { return QLatin1String("SessionsWithOneClangd"); }
|
||||
|
||||
static FilePath g_defaultClangdFilePath;
|
||||
static FilePath fallbackClangdFilePath()
|
||||
@@ -316,6 +318,20 @@ ClangdSettings &ClangdSettings::instance()
|
||||
return settings;
|
||||
}
|
||||
|
||||
ClangdSettings::ClangdSettings()
|
||||
{
|
||||
loadSettings();
|
||||
const auto sessionMgr = ProjectExplorer::SessionManager::instance();
|
||||
connect(sessionMgr, &ProjectExplorer::SessionManager::sessionRemoved,
|
||||
this, [this](const QString &name) { m_data.sessionsWithOneClangd.removeOne(name); });
|
||||
connect(sessionMgr, &ProjectExplorer::SessionManager::sessionRenamed,
|
||||
this, [this](const QString &oldName, const QString &newName) {
|
||||
const auto index = m_data.sessionsWithOneClangd.indexOf(oldName);
|
||||
if (index != -1)
|
||||
m_data.sessionsWithOneClangd[index] = newName;
|
||||
});
|
||||
}
|
||||
|
||||
bool ClangdSettings::useClangd() const
|
||||
{
|
||||
return m_data.useClangd && clangdVersion(clangdFilePath()) >= QVersionNumber(13);
|
||||
@@ -333,6 +349,13 @@ FilePath ClangdSettings::clangdFilePath() const
|
||||
return fallbackClangdFilePath();
|
||||
}
|
||||
|
||||
ClangdSettings::Granularity ClangdSettings::granularity() const
|
||||
{
|
||||
if (m_data.sessionsWithOneClangd.contains(ProjectExplorer::SessionManager::activeSession()))
|
||||
return Granularity::Session;
|
||||
return Granularity::Project;
|
||||
}
|
||||
|
||||
void ClangdSettings::setData(const Data &data)
|
||||
{
|
||||
if (this == &instance() && data != m_data) {
|
||||
@@ -402,7 +425,12 @@ ClangdSettings::Data ClangdProjectSettings::settings() const
|
||||
{
|
||||
if (m_useGlobalSettings)
|
||||
return ClangdSettings::instance().data();
|
||||
return m_customSettings;
|
||||
ClangdSettings::Data data = m_customSettings;
|
||||
|
||||
// This property is global by definition.
|
||||
data.sessionsWithOneClangd = ClangdSettings::instance().data().sessionsWithOneClangd;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void ClangdProjectSettings::setSettings(const ClangdSettings::Data &data)
|
||||
@@ -450,6 +478,7 @@ QVariantMap ClangdSettings::Data::toMap() const
|
||||
map.insert(clangdHeaderInsertionKey(), autoIncludeHeaders);
|
||||
map.insert(clangdThreadLimitKey(), workerThreadLimit);
|
||||
map.insert(clangdDocumentThresholdKey(), documentUpdateThreshold);
|
||||
map.insert(sessionsWithOneClangdKey(), sessionsWithOneClangd);
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -461,6 +490,7 @@ void ClangdSettings::Data::fromMap(const QVariantMap &map)
|
||||
autoIncludeHeaders = map.value(clangdHeaderInsertionKey(), false).toBool();
|
||||
workerThreadLimit = map.value(clangdThreadLimitKey(), 0).toInt();
|
||||
documentUpdateThreshold = map.value(clangdDocumentThresholdKey(), 500).toInt();
|
||||
sessionsWithOneClangd = map.value(sessionsWithOneClangdKey()).toStringList();
|
||||
}
|
||||
|
||||
} // namespace CppEditor
|
||||
|
||||
Reference in New Issue
Block a user