summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-11-10 16:54:53 +0100
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-11-11 15:14:56 +0000
commitd8f119c8a222188556bf63e7adbef24c9ca3fe7f (patch)
treef6d606959297dc186910ad040f3a021dff8c20b7 /src/plugins/cpptools
parent72785e3a11bea85f09a76084813c890f5d26f9d0 (diff)
downloadqt-creator-d8f119c8a222188556bf63e7adbef24c9ca3fe7f.tar.gz
Clang: Allow to provide extra command line options
This can be used to experiment with clang options that e.g. affect diagnostics. Changes take effect on editor re-open. Change-Id: Ie46d0ff085a3700a748dbcf4b94b93b0bf9c4642 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com> Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r--src/plugins/cpptools/cppcodemodelsettings.cpp31
-rw-r--r--src/plugins/cpptools/cppcodemodelsettings.h5
-rw-r--r--src/plugins/cpptools/cppcodemodelsettingspage.cpp20
-rw-r--r--src/plugins/cpptools/cppcodemodelsettingspage.ui57
-rw-r--r--src/plugins/cpptools/cpptoolsconstants.h1
5 files changed, 95 insertions, 19 deletions
diff --git a/src/plugins/cpptools/cppcodemodelsettings.cpp b/src/plugins/cpptools/cppcodemodelsettings.cpp
index 35555868a1..5d35cf7d3e 100644
--- a/src/plugins/cpptools/cppcodemodelsettings.cpp
+++ b/src/plugins/cpptools/cppcodemodelsettings.cpp
@@ -36,6 +36,7 @@ using namespace CppTools;
static QLatin1String cppHeaderMimeType(Constants::CPP_HEADER_MIMETYPE);
static QLatin1String cHeaderMimeType(Constants::C_HEADER_MIMETYPE);
+static QLatin1String clangExtraOptionsKey(Constants::CPPTOOLS_EXTRA_CLANG_OPTIONS);
void CppCodeModelSettings::fromSettings(QSettings *s)
{
@@ -45,6 +46,8 @@ void CppCodeModelSettings::fromSettings(QSettings *s)
foreach (const QString &mimeType, supportedMimeTypes())
setIdForMimeType(supporters, mimeType);
+ setExtraClangOptions(s->value(clangExtraOptionsKey, defaultExtraClangOptions()).toStringList());
+
QVariant v = s->value(QLatin1String(Constants::CPPTOOLS_MODEL_MANAGER_PCH_USAGE), PchUse_None);
setPCHUsage(static_cast<PCHUsage>(v.toInt()));
s->endGroup();
@@ -59,6 +62,7 @@ void CppCodeModelSettings::toSettings(QSettings *s)
foreach (const QString &mimeType, m_modelManagerSupportByMimeType.keys())
var[mimeType] = m_modelManagerSupportByMimeType[mimeType];
s->setValue(QLatin1String(Constants::CPPTOOLS_MODEL_MANAGER_SUPPORTERS_KEY), QVariant(var));
+ s->setValue(clangExtraOptionsKey, extraClangOptions());
s->setValue(QLatin1String(Constants::CPPTOOLS_MODEL_MANAGER_PCH_USAGE), pchUsage());
s->endGroup();
@@ -116,6 +120,33 @@ bool CppCodeModelSettings::hasModelManagerSupportIdForMimeType(const QString &mi
return m_modelManagerSupportByMimeType.value(mimeType) == id;
}
+QStringList CppCodeModelSettings::defaultExtraClangOptions()
+{
+ return {
+ QStringLiteral("-Weverything"),
+ QStringLiteral("-Wno-c++98-compat"),
+ QStringLiteral("-Wno-c++98-compat-pedantic"),
+ QStringLiteral("-Wno-unused-macros"),
+ QStringLiteral("-Wno-newline-eof"),
+ QStringLiteral("-Wno-exit-time-destructors"),
+ QStringLiteral("-Wno-global-constructors"),
+ QStringLiteral("-Wno-gnu-zero-variadic-macro-arguments"),
+ QStringLiteral("-Wno-documentation"),
+ QStringLiteral("-Wno-shadow"),
+ QStringLiteral("-Wno-missing-prototypes"), // Not optimal for C projects.
+ };
+}
+
+QStringList CppCodeModelSettings::extraClangOptions() const
+{
+ return m_extraClangOptions;
+}
+
+void CppCodeModelSettings::setExtraClangOptions(const QStringList &extraClangOptions)
+{
+ m_extraClangOptions = extraClangOptions;
+}
+
void CppCodeModelSettings::setIdForMimeType(const QVariant &var, const QString &mimeType)
{
QHash<QString, QVariant> mimeToId = var.toHash();
diff --git a/src/plugins/cpptools/cppcodemodelsettings.h b/src/plugins/cpptools/cppcodemodelsettings.h
index 8c07c1671f..2d14d24bd6 100644
--- a/src/plugins/cpptools/cppcodemodelsettings.h
+++ b/src/plugins/cpptools/cppcodemodelsettings.h
@@ -73,6 +73,10 @@ public:
void setDefaultId(const QString &defaultId)
{ m_defaultId = defaultId; }
+ static QStringList defaultExtraClangOptions();
+ QStringList extraClangOptions() const;
+ void setExtraClangOptions(const QStringList &extraClangOptions);
+
PCHUsage pchUsage() const { return m_pchUsage; }
void setPCHUsage(PCHUsage pchUsage) { m_pchUsage = pchUsage; }
@@ -90,6 +94,7 @@ private:
private:
QHash<QString, QString> m_modelManagerSupportByMimeType;
QHash<QString, QString> m_modelManagerSupportsByName;
+ QStringList m_extraClangOptions;
QString m_defaultId;
PCHUsage m_pchUsage;
};
diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.cpp b/src/plugins/cpptools/cppcodemodelsettingspage.cpp
index e59e0d1dbb..f3295e776b 100644
--- a/src/plugins/cpptools/cppcodemodelsettingspage.cpp
+++ b/src/plugins/cpptools/cppcodemodelsettingspage.cpp
@@ -46,7 +46,11 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(QWidget *parent)
{
m_ui->setupUi(this);
- m_ui->theGroupBox->setVisible(true);
+ m_ui->clangSettingsGroupBox->setVisible(true);
+ connect(m_ui->clangOptionsResetButton, &QPushButton::clicked, [this]() {
+ const QString options = m_settings->defaultExtraClangOptions().join(QLatin1Char('\n'));
+ m_ui->clangOptionsToAppendTextEdit->document()->setPlainText(options);
+ });
}
CppCodeModelSettingsWidget::~CppCodeModelSettingsWidget()
@@ -96,8 +100,11 @@ void CppCodeModelSettingsWidget::setupClangCodeModelWidgets() const
isClangActive = isClangCodeModelActive(*m_settings.data());
m_ui->activateClangCodeModelPluginHint->setVisible(!isClangAvailable);
- m_ui->useClangCheckBox->setEnabled(isClangAvailable);
- m_ui->useClangCheckBox->setChecked(isClangActive);
+ m_ui->clangSettingsGroupBox->setEnabled(isClangAvailable);
+ m_ui->clangSettingsGroupBox->setChecked(isClangActive);
+
+ const QString extraClangOptions = m_settings->extraClangOptions().join(QLatin1Char('\n'));
+ m_ui->clangOptionsToAppendTextEdit->document()->setPlainText(extraClangOptions);
}
bool CppCodeModelSettingsWidget::applyClangCodeModelWidgetsToSettings() const
@@ -106,13 +113,18 @@ bool CppCodeModelSettingsWidget::applyClangCodeModelWidgetsToSettings() const
// Until then, ensure that the settings are set uniformly for all the mime types
// to avoid surprises.
- const QString activeCodeModelId = m_ui->useClangCheckBox->isChecked()
+ const QString activeCodeModelId = m_ui->clangSettingsGroupBox->isChecked()
? QLatin1String("ClangCodeMode.ClangCodeMode")
: QLatin1String("CppTools.BuiltinCodeModel");
foreach (const QString &mimeType, m_settings->supportedMimeTypes())
m_settings->setModelManagerSupportIdForMimeType(mimeType, activeCodeModelId);
+ const QString clangOptionsText = m_ui->clangOptionsToAppendTextEdit->document()->toPlainText();
+ const QStringList extraClangOptions = clangOptionsText.split(QLatin1Char('\n'),
+ QString::SkipEmptyParts);
+ m_settings->setExtraClangOptions(extraClangOptions);
+
return true;
}
diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.ui b/src/plugins/cpptools/cppcodemodelsettingspage.ui
index e8146a0fed..de7b381b16 100644
--- a/src/plugins/cpptools/cppcodemodelsettingspage.ui
+++ b/src/plugins/cpptools/cppcodemodelsettingspage.ui
@@ -15,27 +15,54 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
- <widget class="QGroupBox" name="theGroupBox">
+ <widget class="QLabel" name="activateClangCodeModelPluginHint">
+ <property name="text">
+ <string>&lt;i&gt;Activate the Clang Code Model plugin to enable the options here.&lt;/i&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="clangSettingsGroupBox">
<property name="title">
- <string>Code Completion and Semantic Highlighting</string>
+ <string>Use Clang Code Model</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
</property>
- <layout class="QFormLayout" name="formLayout">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
- </property>
- <item row="1" column="0">
- <widget class="QCheckBox" name="useClangCheckBox">
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QLabel" name="clangOptionsGeneralHintLabel">
<property name="text">
- <string>Use Clang Code Model</string>
+ <string>Append additional command line options to Clang, one per line. &lt;i&gt;Use this with care.&lt;/i&gt;</string>
</property>
</widget>
</item>
- <item row="0" column="0">
- <widget class="QLabel" name="activateClangCodeModelPluginHint">
- <property name="text">
- <string>&lt;i&gt;Activate the Clang Code Model plugin to enable the options here.&lt;/i&gt;</string>
- </property>
- </widget>
+ <item>
+ <widget class="QPlainTextEdit" name="clangOptionsToAppendTextEdit"/>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="clangOptionsResetButton">
+ <property name="text">
+ <string>Reset Options</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
</item>
</layout>
</widget>
diff --git a/src/plugins/cpptools/cpptoolsconstants.h b/src/plugins/cpptools/cpptoolsconstants.h
index d6130297f2..819dde85fc 100644
--- a/src/plugins/cpptools/cpptoolsconstants.h
+++ b/src/plugins/cpptools/cpptoolsconstants.h
@@ -55,6 +55,7 @@ enum { lowerCaseFilesDefault = 1 };
const char CPPTOOLS_SORT_EDITOR_DOCUMENT_OUTLINE[] = "SortedMethodOverview";
const char CPPTOOLS_MODEL_MANAGER_SUPPORTERS_KEY[] = "ModelManagerSupporters";
const char CPPTOOLS_MODEL_MANAGER_PCH_USAGE[] = "PCHUsage";
+const char CPPTOOLS_EXTRA_CLANG_OPTIONS[] = "ExtraClangOptions";
const char CPP_CODE_STYLE_SETTINGS_ID[] = "A.Cpp.Code Style";
const char CPP_CODE_STYLE_SETTINGS_NAME[] = QT_TRANSLATE_NOOP("CppTools", "Code Style");