forked from qt-creator/qt-creator
ClangTools: Move run settings to projects mode
Make the global run settings available per project in project mode and thus remove the diagnostic config selection from the selectable-files-dialog: * Extract the classes RunSettings and RunSettingsWidget instead of duplicating stuff. * Ensure to pick up the old settings * Add some convenience buttons/links in projects mode allowing to restore the global settings, to open the global settings and to navigate (back) to the analyzer mode. Change-Id: I1b91b6f8e58a87a025774e4643c46e176b2a8885 Reviewed-by: Cristian Adam <cristian.adam@qt.io> Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
@@ -34,8 +34,9 @@
|
||||
namespace ClangTools {
|
||||
namespace Internal {
|
||||
|
||||
static const char SETTINGS_KEY_MAIN[] = "ClangTools";
|
||||
static const char SETTINGS_PREFIX[] = "ClangTools.";
|
||||
static const char SETTINGS_KEY_USE_GLOBAL_SETTINGS[] = "ClangTools.UseGlobalSettings";
|
||||
static const char SETTINGS_KEY_DIAGNOSTIC_CONFIG[] = "ClangTools.DiagnosticConfig";
|
||||
static const char SETTINGS_KEY_SELECTED_DIRS[] = "ClangTools.SelectedDirs";
|
||||
static const char SETTINGS_KEY_SELECTED_FILES[] = "ClangTools.SelectedFiles";
|
||||
static const char SETTINGS_KEY_SUPPRESSED_DIAGS[] = "ClangTools.SuppressedDiagnostics";
|
||||
@@ -78,22 +79,53 @@ void ClangToolsProjectSettings::removeAllSuppressedDiagnostics()
|
||||
emit suppressedDiagnosticsChanged();
|
||||
}
|
||||
|
||||
static QVariantMap convertToMapFromVersionBefore410(ProjectExplorer::Project *p)
|
||||
{
|
||||
// These keys haven't changed.
|
||||
const QStringList keys = {
|
||||
SETTINGS_KEY_SELECTED_DIRS,
|
||||
SETTINGS_KEY_SELECTED_FILES,
|
||||
SETTINGS_KEY_SUPPRESSED_DIAGS,
|
||||
SETTINGS_KEY_USE_GLOBAL_SETTINGS,
|
||||
"ClangTools.BuildBeforeAnalysis",
|
||||
};
|
||||
|
||||
QVariantMap map;
|
||||
for (const QString &key : keys)
|
||||
map.insert(key, p->namedSettings(key));
|
||||
|
||||
map.insert(SETTINGS_PREFIX + QString(diagnosticConfigIdKey),
|
||||
p->namedSettings("ClangTools.DiagnosticConfig"));
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
void ClangToolsProjectSettings::load()
|
||||
{
|
||||
const QVariant useGlobalVariant = m_project->namedSettings(SETTINGS_KEY_USE_GLOBAL_SETTINGS);
|
||||
m_useGlobalSettings = useGlobalVariant.isValid() ? useGlobalVariant.toBool() : true;
|
||||
m_diagnosticConfig = Core::Id::fromSetting(
|
||||
m_project->namedSettings(SETTINGS_KEY_DIAGNOSTIC_CONFIG));
|
||||
// Load map
|
||||
QVariantMap map = m_project->namedSettings(SETTINGS_KEY_MAIN).toMap();
|
||||
|
||||
bool write;
|
||||
if (map.isEmpty()) {
|
||||
if (!m_project->namedSettings(SETTINGS_KEY_SELECTED_DIRS).isNull()) {
|
||||
map = convertToMapFromVersionBefore410(m_project);
|
||||
write = true;
|
||||
} else {
|
||||
return; // Use defaults
|
||||
}
|
||||
}
|
||||
|
||||
// Read map
|
||||
m_useGlobalSettings = map.value(SETTINGS_KEY_USE_GLOBAL_SETTINGS).toBool();
|
||||
|
||||
auto toFileName = [](const QString &s) { return Utils::FilePath::fromString(s); };
|
||||
|
||||
const QStringList dirs = m_project->namedSettings(SETTINGS_KEY_SELECTED_DIRS).toStringList();
|
||||
const QStringList dirs = map.value(SETTINGS_KEY_SELECTED_DIRS).toStringList();
|
||||
m_selectedDirs = Utils::transform<QSet>(dirs, toFileName);
|
||||
|
||||
const QStringList files = m_project->namedSettings(SETTINGS_KEY_SELECTED_FILES).toStringList();
|
||||
const QStringList files = map.value(SETTINGS_KEY_SELECTED_FILES).toStringList();
|
||||
m_selectedFiles = Utils::transform<QSet>(files, toFileName);
|
||||
|
||||
const QVariantList list = m_project->namedSettings(SETTINGS_KEY_SUPPRESSED_DIAGS).toList();
|
||||
const QVariantList list = map.value(SETTINGS_KEY_SUPPRESSED_DIAGS).toList();
|
||||
foreach (const QVariant &v, list) {
|
||||
const QVariantMap diag = v.toMap();
|
||||
const QString fp = diag.value(SETTINGS_KEY_SUPPRESSED_DIAGS_FILEPATH).toString();
|
||||
@@ -113,48 +145,37 @@ void ClangToolsProjectSettings::load()
|
||||
uniquifier);
|
||||
}
|
||||
emit suppressedDiagnosticsChanged();
|
||||
|
||||
m_runSettings.fromMap(map, SETTINGS_PREFIX);
|
||||
|
||||
if (write)
|
||||
store(); // Store new settings format
|
||||
}
|
||||
|
||||
void ClangToolsProjectSettings::store()
|
||||
{
|
||||
m_project->setNamedSettings(SETTINGS_KEY_USE_GLOBAL_SETTINGS, m_useGlobalSettings);
|
||||
m_project->setNamedSettings(SETTINGS_KEY_DIAGNOSTIC_CONFIG, m_diagnosticConfig.toSetting());
|
||||
QVariantMap map;
|
||||
map.insert(SETTINGS_KEY_USE_GLOBAL_SETTINGS, m_useGlobalSettings);
|
||||
|
||||
const QStringList dirs = Utils::transform<QList>(m_selectedDirs, &Utils::FilePath::toString);
|
||||
m_project->setNamedSettings(SETTINGS_KEY_SELECTED_DIRS, dirs);
|
||||
map.insert(SETTINGS_KEY_SELECTED_DIRS, dirs);
|
||||
|
||||
const QStringList files = Utils::transform<QList>(m_selectedFiles, &Utils::FilePath::toString);
|
||||
m_project->setNamedSettings(SETTINGS_KEY_SELECTED_FILES, files);
|
||||
map.insert(SETTINGS_KEY_SELECTED_FILES, files);
|
||||
|
||||
QVariantList list;
|
||||
foreach (const SuppressedDiagnostic &diag, m_suppressedDiagnostics) {
|
||||
for (const SuppressedDiagnostic &diag : m_suppressedDiagnostics) {
|
||||
QVariantMap diagMap;
|
||||
diagMap.insert(SETTINGS_KEY_SUPPRESSED_DIAGS_FILEPATH, diag.filePath.toString());
|
||||
diagMap.insert(SETTINGS_KEY_SUPPRESSED_DIAGS_MESSAGE, diag.description);
|
||||
diagMap.insert(SETTINGS_KEY_SUPPRESSED_DIAGS_UNIQIFIER, diag.uniquifier);
|
||||
list << diagMap;
|
||||
}
|
||||
m_project->setNamedSettings(SETTINGS_KEY_SUPPRESSED_DIAGS, list);
|
||||
}
|
||||
map.insert(SETTINGS_KEY_SUPPRESSED_DIAGS, list);
|
||||
|
||||
bool ClangToolsProjectSettings::useGlobalSettings() const
|
||||
{
|
||||
return m_useGlobalSettings;
|
||||
}
|
||||
m_runSettings.toMap(map, SETTINGS_PREFIX);
|
||||
|
||||
void ClangToolsProjectSettings::setUseGlobalSettings(bool useGlobalSettings)
|
||||
{
|
||||
m_useGlobalSettings = useGlobalSettings;
|
||||
}
|
||||
|
||||
Core::Id ClangToolsProjectSettings::diagnosticConfig() const
|
||||
{
|
||||
return m_diagnosticConfig;
|
||||
}
|
||||
|
||||
void ClangToolsProjectSettings::setDiagnosticConfig(const Core::Id &diagnosticConfig)
|
||||
{
|
||||
m_diagnosticConfig = diagnosticConfig;
|
||||
m_project->setNamedSettings(SETTINGS_KEY_MAIN, map);
|
||||
}
|
||||
|
||||
ClangToolsProjectSettingsManager::ClangToolsProjectSettingsManager()
|
||||
|
||||
Reference in New Issue
Block a user