forked from qt-creator/qt-creator
ClangFormat: Regenerate clangformatchecks
- Regenerated clangformatchecks for clang-format-16 - Updated clangformatconfigwidget for using new clangformatchecks Fixes: QTCREATORBUG-29434 Change-Id: If308942b6fbe4cc2568acda6d421139175ac081a Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "clangformatconfigwidget.h"
|
||||
|
||||
// the file below was generated by scripts/generateClangFormatChecksLayout.py
|
||||
#include "clangformatchecks.h"
|
||||
#include "clangformatconstants.h"
|
||||
#include "clangformatfile.h"
|
||||
@@ -10,8 +11,6 @@
|
||||
#include "clangformattr.h"
|
||||
#include "clangformatutils.h"
|
||||
|
||||
// the file was generated by scripts/generateClangFormatChecksLayout.py
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
|
||||
#include <cppeditor/cppcodestylepreferences.h>
|
||||
@@ -245,77 +244,6 @@ void ClangFormatConfigWidget::updatePreview()
|
||||
d->preview->textDocument()->autoIndent(cursor);
|
||||
}
|
||||
|
||||
static inline void ltrim(std::string &s)
|
||||
{
|
||||
s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int ch) { return !std::isspace(ch); }));
|
||||
}
|
||||
|
||||
static inline void rtrim(std::string &s)
|
||||
{
|
||||
s.erase(std::find_if(s.rbegin(), s.rend(), [](int ch) { return !std::isspace(ch); }).base(),
|
||||
s.end());
|
||||
}
|
||||
|
||||
static inline void trim(std::string &s)
|
||||
{
|
||||
ltrim(s);
|
||||
rtrim(s);
|
||||
}
|
||||
|
||||
static void fillPlainText(QPlainTextEdit *plainText, const std::string &text, size_t index)
|
||||
{
|
||||
if (index == std::string::npos) {
|
||||
plainText->setPlainText("");
|
||||
return;
|
||||
}
|
||||
size_t valueStart = text.find('\n', index + 1);
|
||||
size_t valueEnd;
|
||||
std::string value;
|
||||
QTC_ASSERT(valueStart != std::string::npos, return;);
|
||||
do {
|
||||
valueEnd = text.find('\n', valueStart + 1);
|
||||
if (valueEnd == std::string::npos)
|
||||
break;
|
||||
// Skip also 2 spaces - start with valueStart + 1 + 2.
|
||||
std::string line = text.substr(valueStart + 3, valueEnd - valueStart - 3);
|
||||
rtrim(line);
|
||||
value += value.empty() ? line : '\n' + line;
|
||||
valueStart = valueEnd;
|
||||
} while (valueEnd < text.size() - 1 && text.at(valueEnd + 1) == ' ');
|
||||
plainText->setPlainText(QString::fromStdString(value));
|
||||
}
|
||||
|
||||
static void fillComboBoxOrLineEdit(QObject *object, const std::string &text, size_t index)
|
||||
{
|
||||
auto *comboBox = qobject_cast<QComboBox *>(object);
|
||||
auto *lineEdit = qobject_cast<QLineEdit *>(object);
|
||||
if (index == std::string::npos) {
|
||||
if (comboBox)
|
||||
comboBox->setCurrentIndex(0);
|
||||
else
|
||||
lineEdit->setText("");
|
||||
return;
|
||||
}
|
||||
|
||||
const size_t valueStart = text.find(':', index + 1);
|
||||
QTC_ASSERT(valueStart != std::string::npos, return;);
|
||||
const size_t valueEnd = text.find('\n', valueStart + 1);
|
||||
QTC_ASSERT(valueEnd != std::string::npos, return;);
|
||||
std::string value = text.substr(valueStart + 1, valueEnd - valueStart - 1);
|
||||
trim(value);
|
||||
|
||||
if (comboBox) {
|
||||
if (comboBox->findText(QString::fromStdString(value)) == -1) {
|
||||
comboBox->setCurrentIndex(0);
|
||||
return;
|
||||
}
|
||||
comboBox->setCurrentText(QString::fromStdString(value));
|
||||
return;
|
||||
}
|
||||
|
||||
lineEdit->setText(QString::fromStdString(value));
|
||||
}
|
||||
|
||||
std::string ClangFormatConfigWidget::readFile(const QString &path)
|
||||
{
|
||||
const std::string defaultStyle = clang::format::configurationAsText(qtcStyle());
|
||||
@@ -348,11 +276,55 @@ std::string ClangFormatConfigWidget::readFile(const QString &path)
|
||||
return settings;
|
||||
}
|
||||
|
||||
static std::map<QString, QString> getMapFromString(const QString &text)
|
||||
{
|
||||
std::map<QString, QString> objectNameMap;
|
||||
|
||||
QString parentName;
|
||||
for (QString line : text.split('\n')) {
|
||||
if (line.isEmpty())
|
||||
continue;
|
||||
|
||||
QStringList list = line.split(':');
|
||||
QString key = !list.isEmpty() ? list[0] : "";
|
||||
QString value = line.mid(key.size() + 1).trimmed();
|
||||
|
||||
if (line.contains(':') && value.isEmpty()) {
|
||||
parentName = key;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!value.isEmpty() && !line.startsWith(" "))
|
||||
parentName = "";
|
||||
|
||||
if (line.startsWith(" - ") || line.startsWith(" ")) {
|
||||
line.remove(0, 2);
|
||||
if (objectNameMap.find(parentName) == objectNameMap.end())
|
||||
objectNameMap[parentName] = line + "\n";
|
||||
else
|
||||
objectNameMap[parentName] += line + "\n";
|
||||
continue;
|
||||
}
|
||||
|
||||
if (line.startsWith(" ")) {
|
||||
key.remove(0, 2);
|
||||
key = parentName + key;
|
||||
objectNameMap.insert(std::make_pair(key, value));
|
||||
continue;
|
||||
}
|
||||
|
||||
objectNameMap.insert(std::make_pair(key, value));
|
||||
}
|
||||
|
||||
return objectNameMap;
|
||||
}
|
||||
|
||||
void ClangFormatConfigWidget::fillTable()
|
||||
{
|
||||
Utils::GuardLocker locker(d->ignoreChanges);
|
||||
|
||||
const std::string configText = readFile(d->config->filePath().path());
|
||||
const QString configText = QString::fromStdString(readFile(d->config->filePath().path()));
|
||||
std::map<QString, QString> objectNameMap = getMapFromString(configText);
|
||||
|
||||
for (QObject *child : d->checksWidget->children()) {
|
||||
if (!qobject_cast<QComboBox *>(child) && !qobject_cast<QLineEdit *>(child)
|
||||
@@ -360,14 +332,27 @@ void ClangFormatConfigWidget::fillTable()
|
||||
continue;
|
||||
}
|
||||
|
||||
size_t index = configText.find('\n' + child->objectName().toStdString());
|
||||
if (index == std::string::npos)
|
||||
index = configText.find("\n " + child->objectName().toStdString());
|
||||
if (objectNameMap.find(child->objectName()) == objectNameMap.end())
|
||||
continue;
|
||||
|
||||
if (qobject_cast<QPlainTextEdit *>(child))
|
||||
fillPlainText(qobject_cast<QPlainTextEdit *>(child), configText, index);
|
||||
else
|
||||
fillComboBoxOrLineEdit(child, configText, index);
|
||||
if (QPlainTextEdit *plainText = qobject_cast<QPlainTextEdit *>(child)) {
|
||||
plainText->setPlainText(objectNameMap[child->objectName()]);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (QComboBox *comboBox = qobject_cast<QComboBox *>(child)) {
|
||||
if (comboBox->findText(objectNameMap[child->objectName()]) == -1) {
|
||||
comboBox->setCurrentIndex(0);
|
||||
} else {
|
||||
comboBox->setCurrentText(objectNameMap[child->objectName()]);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(child)) {
|
||||
lineEdit->setText(objectNameMap[child->objectName()]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -378,6 +363,7 @@ void ClangFormatConfigWidget::saveChanges(QObject *sender)
|
||||
d->config->setBasedOnStyle(basedOnStyle->currentText());
|
||||
} else {
|
||||
QList<ClangFormatFile::Field> fields;
|
||||
QString parentName;
|
||||
|
||||
for (QObject *child : d->checksWidget->children()) {
|
||||
if (child->objectName() == "BasedOnStyle")
|
||||
@@ -386,13 +372,31 @@ void ClangFormatConfigWidget::saveChanges(QObject *sender)
|
||||
if (!label)
|
||||
continue;
|
||||
|
||||
QWidget *valueWidget = d->checksWidget->findChild<QWidget *>(label->text().trimmed());
|
||||
if (!valueWidget) {
|
||||
// reset parent name if label starts without " "
|
||||
if (!label->text().startsWith(" "))
|
||||
parentName = "";
|
||||
|
||||
QList<QWidget *> valueWidgets = d->checksWidget->findChildren<QWidget *>(
|
||||
parentName + label->text().trimmed());
|
||||
|
||||
if (valueWidgets.empty()) {
|
||||
// Currently BraceWrapping only.
|
||||
fields.append({label->text(), ""});
|
||||
// save parent name
|
||||
parentName = label->text().trimmed();
|
||||
continue;
|
||||
}
|
||||
|
||||
QWidget *valueWidget = valueWidgets.first();
|
||||
if (valueWidgets.size() > 1) {
|
||||
for (QWidget *w : valueWidgets) {
|
||||
if (w->objectName() == parentName + label->text().trimmed()) {
|
||||
valueWidget = w;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!qobject_cast<QComboBox *>(valueWidget) && !qobject_cast<QLineEdit *>(valueWidget)
|
||||
&& !qobject_cast<QPlainTextEdit *>(valueWidget)) {
|
||||
continue;
|
||||
@@ -403,7 +407,6 @@ void ClangFormatConfigWidget::saveChanges(QObject *sender)
|
||||
if (plainText->toPlainText().trimmed().isEmpty())
|
||||
continue;
|
||||
|
||||
|
||||
std::stringstream content;
|
||||
QStringList list = plainText->toPlainText().split('\n');
|
||||
for (const QString &line : list)
|
||||
|
||||
Reference in New Issue
Block a user