Clang: turn off delayed template parsing

Fix templates highlight and completion on Windows
Add UI to turn on/off delayed parsing (off by default)

Task-number: QTCREATORBUG-17222
Change-Id: I0cd5e0bcfff2789cd938e4096829f777ff15957a
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
Ivan Donchevskii
2017-05-23 09:49:22 +02:00
parent 0784dd20fe
commit 78db7d7ed2
23 changed files with 255 additions and 139 deletions

View File

@@ -47,14 +47,14 @@ void ClangDiagnosticConfig::setDisplayName(const QString &displayName)
m_displayName = displayName;
}
QStringList ClangDiagnosticConfig::commandLineOptions() const
QStringList ClangDiagnosticConfig::commandLineWarnings() const
{
return m_commandLineOptions;
return m_commandLineWarnings;
}
void ClangDiagnosticConfig::setCommandLineOptions(const QStringList &options)
void ClangDiagnosticConfig::setCommandLineWarnings(const QStringList &warnings)
{
m_commandLineOptions = options;
m_commandLineWarnings = warnings;
}
bool ClangDiagnosticConfig::isReadOnly() const
@@ -71,7 +71,7 @@ bool ClangDiagnosticConfig::operator==(const ClangDiagnosticConfig &other) const
{
return m_id == other.m_id
&& m_displayName == other.m_displayName
&& m_commandLineOptions == other.m_commandLineOptions
&& m_commandLineWarnings == other.m_commandLineWarnings
&& m_isReadOnly == other.m_isReadOnly;
}

View File

@@ -43,8 +43,8 @@ public:
QString displayName() const;
void setDisplayName(const QString &displayName);
QStringList commandLineOptions() const;
void setCommandLineOptions(const QStringList &commandLineOptions);
QStringList commandLineWarnings() const;
void setCommandLineWarnings(const QStringList &commandLineWarnings);
bool isReadOnly() const;
void setIsReadOnly(bool isReadOnly);
@@ -54,7 +54,7 @@ public:
private:
Core::Id m_id;
QString m_displayName;
QStringList m_commandLineOptions;
QStringList m_commandLineWarnings;
bool m_isReadOnly = false;
};

View File

@@ -33,7 +33,7 @@
namespace CppTools {
static QStringList commonOptions()
static QStringList commonWarnings()
{
return { QStringLiteral("-Wno-unknown-pragmas") };
}
@@ -45,10 +45,10 @@ static void addConfigForQuestionableConstructs(ClangDiagnosticConfigsModel &mode
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Warnings for questionable constructs"));
config.setIsReadOnly(true);
config.setCommandLineOptions(QStringList{
config.setCommandLineWarnings(QStringList{
QStringLiteral("-Wall"),
QStringLiteral("-Wextra"),
} + commonOptions());
} + commonWarnings());
model.appendOrUpdate(config);
}
@@ -60,7 +60,7 @@ static void addConfigForPedanticWarnings(ClangDiagnosticConfigsModel &model)
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Pedantic Warnings"));
config.setIsReadOnly(true);
config.setCommandLineOptions(QStringList{QStringLiteral("-Wpedantic")} + commonOptions());
config.setCommandLineWarnings(QStringList{QStringLiteral("-Wpedantic")} + commonWarnings());
model.appendOrUpdate(config);
}
@@ -72,7 +72,7 @@ static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model)
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Warnings for almost everything"));
config.setIsReadOnly(true);
config.setCommandLineOptions(QStringList{
config.setCommandLineWarnings(QStringList{
QStringLiteral("-Weverything"),
QStringLiteral("-Wno-c++98-compat"),
QStringLiteral("-Wno-c++98-compat-pedantic"),
@@ -85,7 +85,7 @@ static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model)
QStringLiteral("-Wno-shadow"),
QStringLiteral("-Wno-missing-prototypes"), // Not optimal for C projects.
QStringLiteral("-Wno-used-but-marked-unused"), // e.g. QTest::qWait
} + commonOptions());
} + commonWarnings());
model.appendOrUpdate(config);
}

View File

@@ -115,7 +115,7 @@ void ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited()
= diagnosticOptions.trimmed().split(QLatin1Char(' '), QString::SkipEmptyParts);
ClangDiagnosticConfig updatedConfig = currentConfig();
updatedConfig.setCommandLineOptions(updatedCommandLine);
updatedConfig.setCommandLineWarnings(updatedCommandLine);
m_diagnosticConfigsModel.appendOrUpdate(updatedConfig);
emit customConfigsChanged(customConfigs());
@@ -127,15 +127,6 @@ void ClangDiagnosticConfigsWidget::syncWidgetsToModel(const Core::Id &configToSe
syncOtherWidgetsToComboBox();
}
static QString displayNameWithBuiltinIndication(const ClangDiagnosticConfig &config,
const Core::Id &exceptionalConfig)
{
if (exceptionalConfig == config.id())
return config.displayName();
return ClangDiagnosticConfigsModel::displayNameWithBuiltinIndication(config);
}
void ClangDiagnosticConfigsWidget::syncConfigChooserToModel(const Core::Id &configToSelect)
{
disconnectConfigChooserCurrentIndex();
@@ -148,7 +139,7 @@ void ClangDiagnosticConfigsWidget::syncConfigChooserToModel(const Core::Id &conf
for (int i = 0; i < size; ++i) {
const ClangDiagnosticConfig &config = m_diagnosticConfigsModel.at(i);
const QString displayName
= displayNameWithBuiltinIndication(config, m_configWithUndecoratedDisplayName);
= ClangDiagnosticConfigsModel::displayNameWithBuiltinIndication(config);
m_ui->configChooserComboBox->addItem(displayName, config.id().toSetting());
if (configToSelect == config.id())
@@ -176,8 +167,8 @@ void ClangDiagnosticConfigsWidget::syncOtherWidgetsToComboBox()
m_ui->removeButton->setEnabled(!config.isReadOnly());
// Update child widgets
const QString commandLineOptions = config.commandLineOptions().join(QLatin1Char(' '));
setDiagnosticOptions(commandLineOptions);
const QString commandLineWarnings = config.commandLineWarnings().join(QLatin1Char(' '));
setDiagnosticOptions(commandLineWarnings);
m_ui->diagnosticOptionsTextEdit->setReadOnly(config.isReadOnly());
}
@@ -228,11 +219,6 @@ void ClangDiagnosticConfigsWidget::disconnectDiagnosticOptionsChanged()
this, &ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited);
}
void ClangDiagnosticConfigsWidget::setConfigWithUndecoratedDisplayName(const Core::Id &id)
{
m_configWithUndecoratedDisplayName = id;
}
Core::Id ClangDiagnosticConfigsWidget::currentConfigId() const
{
return Core::Id::fromSetting(m_ui->configChooserComboBox->currentData());

View File

@@ -50,7 +50,6 @@ public:
Core::Id currentConfigId() const;
ClangDiagnosticConfigs customConfigs() const;
void setConfigWithUndecoratedDisplayName(const Core::Id &id);
void refresh(const ClangDiagnosticConfigsModel &diagnosticConfigsModel,
const Core::Id &configToSelect);
@@ -82,7 +81,6 @@ private:
private:
Ui::ClangDiagnosticConfigsWidget *m_ui;
ClangDiagnosticConfigsModel m_diagnosticConfigsModel;
Core::Id m_configWithUndecoratedDisplayName;
};
} // CppTools namespace

View File

@@ -52,7 +52,7 @@ static QString clangDiagnosticConfigsArrayIdKey()
static QString clangDiagnosticConfigsArrayDisplayNameKey()
{ return QLatin1String("displayName"); }
static QString clangDiagnosticConfigsArrayOptionsKey()
static QString clangDiagnosticConfigsArrayWarningsKey()
{ return QLatin1String("diagnosticOptions"); }
static QString pchUsageKey()
@@ -78,7 +78,7 @@ void CppCodeModelSettings::fromSettings(QSettings *s)
ClangDiagnosticConfig config;
config.setId(Core::Id::fromSetting(s->value(clangDiagnosticConfigsArrayIdKey())));
config.setDisplayName(s->value(clangDiagnosticConfigsArrayDisplayNameKey()).toString());
config.setCommandLineOptions(s->value(clangDiagnosticConfigsArrayOptionsKey()).toStringList());
config.setCommandLineWarnings(s->value(clangDiagnosticConfigsArrayWarningsKey()).toStringList());
m_clangCustomDiagnosticConfigs.append(config);
}
s->endArray();
@@ -117,7 +117,7 @@ void CppCodeModelSettings::toSettings(QSettings *s)
s->setArrayIndex(i);
s->setValue(clangDiagnosticConfigsArrayIdKey(), config.id().toSetting());
s->setValue(clangDiagnosticConfigsArrayDisplayNameKey(), config.displayName());
s->setValue(clangDiagnosticConfigsArrayOptionsKey(), config.commandLineOptions());
s->setValue(clangDiagnosticConfigsArrayWarningsKey(), config.commandLineWarnings());
}
s->endArray();