Hi all, According to https://community.kde.org/Frameworks/C++11, KDE Frameworks support MSVC2010 and later versions. Since ktexteditor is part of KF5, it is supposed to work on MSVC2010. It currently doesn't; several unsupported C++11 features were introduced to the library in the past few months.
We really really need a Windows CI so that this is noticed early :( The unsupported C++ features include: - brace initialization: Cursor x = {0,0}; or return {}; - delegating constructors - range-based for loops - initializing class members inside the class declaration instead of doing it in the constructor: class Foo { int x=42; }; (N2756) - not specifying the return type of lambdas: auto f = []() { return 42; } I attached the patch that makes ktexteditor build with MSVC2010, except for a unit test where there's WAY too many brace-init. In my opinion, the code looks cleaner with these C++11 features, ie. before the patch. So, I hereby propose making an exception and bumping the minimum compiler version *for ktexteditor only* to MSVC2012. Opinions? -- Nicolás
diff --git a/autotests/src/script_test_base.cpp b/autotests/src/script_test_base.cpp index 2799211..58d77d7 100644 --- a/autotests/src/script_test_base.cpp +++ b/autotests/src/script_test_base.cpp @@ -161,7 +161,7 @@ void ScriptTestBase::runTest(const ExpectedFailures &failures) QTextStream(stdout) << out << endl; } - for (const Failure &failure : failures) { + Q_FOREACH (const Failure &failure, failures) { QEXPECT_FAIL(failure.first, failure.second, Abort); } diff --git a/src/document/katedocument.cpp b/src/document/katedocument.cpp index 9a809fa..074c3f5 100644 --- a/src/document/katedocument.cpp +++ b/src/document/katedocument.cpp @@ -147,6 +147,7 @@ KTextEditor::DocumentPrivate::DocumentPrivate(bool bSingleViewMode, editSessionNumber(0), editIsRunning(false), m_undoMergeAllEdits(false), + m_editingStackPosition(-1), m_undoManager(new KateUndoManager(this)), m_editableMarks(markType01), m_annotationModel(0), diff --git a/src/document/katedocument.h b/src/document/katedocument.h index 8e93f7a..8920f17 100644 --- a/src/document/katedocument.h +++ b/src/document/katedocument.h @@ -362,7 +362,7 @@ private: bool editIsRunning; bool m_undoMergeAllEdits; QStack<QSharedPointer<KTextEditor::MovingCursor>> m_editingStack; - int m_editingStackPosition = -1; + int m_editingStackPosition; static const int s_editingStackSizeLimit = 32; // diff --git a/src/script/katescript.h b/src/script/katescript.h index fcc99d1..80c7924 100644 --- a/src/script/katescript.h +++ b/src/script/katescript.h @@ -175,7 +175,7 @@ public: QString backtrace(const QScriptValue &error, const QString &header = QString()); /** Execute a piece of code **/ - QScriptValue evaluate(const QString& program, const FieldMap& env={}); + QScriptValue evaluate(const QString& program, const FieldMap& env=FieldMap()); /** Displays the backtrace when a script has errored out */ void displayBacktrace(const QScriptValue &error, const QString &header = QString()); diff --git a/src/syntax/katehighlight.cpp b/src/syntax/katehighlight.cpp index 9d885b7..2e66a2f 100644 --- a/src/syntax/katehighlight.cpp +++ b/src/syntax/katehighlight.cpp @@ -1176,8 +1176,8 @@ bool KateHighlighting::isInWord(QChar c, int attrib) const bool KateHighlighting::canBreakAt(QChar c, int attrib) const { - static const QString &sq = QStringLiteral("\"'"); - return (m_additionalData[ hlKeyForAttrib(attrib) ]->wordWrapDeliminator.indexOf(c) != -1) && (sq.indexOf(c) == -1); + return (m_additionalData[ hlKeyForAttrib(attrib) ]->wordWrapDeliminator.indexOf(c) != -1) && + (QStringLiteral("\"'").indexOf(c) == -1); } QLinkedList<QRegularExpression> KateHighlighting::emptyLines(int attrib) const diff --git a/src/utils/katetemplatehandler.cpp b/src/utils/katetemplatehandler.cpp index abb3bd6..08f7483 100644 --- a/src/utils/katetemplatehandler.cpp +++ b/src/utils/katetemplatehandler.cpp @@ -122,12 +122,12 @@ KateTemplateHandler::~KateTemplateHandler() void KateTemplateHandler::sortFields() { - std::sort(m_fields.begin(), m_fields.end(), [](const TemplateField& l, const TemplateField& r) { + std::sort(m_fields.begin(), m_fields.end(), [](const TemplateField& l, const TemplateField& r) -> bool { // always sort the final cursor pos last - if ( l.kind == TemplateField::FinalCursorPosition ) { + if ( l.kind == KateTemplateHandler::TemplateField::FinalCursorPosition ) { return false; } - if ( r.kind == TemplateField::FinalCursorPosition ) { + if ( r.kind == KateTemplateHandler::TemplateField::FinalCursorPosition ) { return true; } // sort by range @@ -166,11 +166,11 @@ void KateTemplateHandler::jump(int by, bool initial) pos = wrap(pos); // choose field to jump to, including wrap-around - auto choose_next_field = [this, by, wrap](unsigned int from_field_index) { + auto choose_next_field = [this, by, wrap](unsigned int from_field_index) -> unsigned int { for ( int i = from_field_index + by; ; i += by ) { auto wrapped_i = wrap(i); auto kind = m_fields.at(wrapped_i).kind; - if ( kind == TemplateField::Editable || kind == TemplateField::FinalCursorPosition ) { + if ( kind == KateTemplateHandler::TemplateField::Editable || kind == KateTemplateHandler::TemplateField::FinalCursorPosition ) { // found an editable field by walking into the desired direction return wrapped_i; } @@ -288,7 +288,7 @@ void KateTemplateHandler::parseFields(const QString& templateText) QRegularExpression defaultField(QStringLiteral("\\w+=([^\\}]*)")); // compute start cursor of a match - auto startOfMatch = [this, &templateText](const QRegularExpressionMatch& match) { + auto startOfMatch = [this, &templateText](const QRegularExpressionMatch& match) -> Cursor { const auto offset = match.capturedStart(0); const auto left = templateText.left(offset); const auto nl = QLatin1Char('\n'); @@ -299,9 +299,9 @@ void KateTemplateHandler::parseFields(const QString& templateText) }; // create a moving range spanning the given field - auto createMovingRangeForMatch = [this, startOfMatch](const QRegularExpressionMatch& match) { + auto createMovingRangeForMatch = [this, startOfMatch](const QRegularExpressionMatch& match) -> MovingRange* { auto matchStart = startOfMatch(match); - return doc()->newMovingRange({matchStart, matchStart + Cursor(0, match.capturedLength(0))}, + return doc()->newMovingRange(Range(matchStart, matchStart + Cursor(0, match.capturedLength(0))), MovingRange::ExpandLeft | MovingRange::ExpandRight); }; @@ -417,7 +417,7 @@ const KateTemplateHandler::TemplateField KateTemplateHandler::fieldForRange(cons return field; } } - return {}; + return TemplateField(); } void KateTemplateHandler::updateDependentFields(Document *document, const Range &range) @@ -520,7 +520,7 @@ void KateTemplateHandler::updateDependentFields(Document *document, const Range void KateTemplateHandler::updateRangeBehaviours() { - KTextEditor::Cursor last = {-1, -1}; + KTextEditor::Cursor last(-1, -1); for ( int i = 0; i < m_fields.size(); i++ ) { auto field = m_fields.at(i); auto end = field.range->end().toCursor(); diff --git a/src/utils/katetemplatehandler.h b/src/utils/katetemplatehandler.h index c3e49d8..a6a6c07 100644 --- a/src/utils/katetemplatehandler.h +++ b/src/utils/katetemplatehandler.h @@ -219,9 +219,11 @@ private: FunctionCall, // field containing the up-to-date result of a function call [dependent field] FinalCursorPosition // field marking the final cursor position }; - Kind kind = Invalid; + Kind kind; // true if this field was edited by the user before - bool touched = false; + bool touched; + + TemplateField(): kind(Invalid), touched(false) {} bool operator==(const TemplateField& other) { return range == other.range; } diff --git a/src/vimode/marks.cpp b/src/vimode/marks.cpp index b73eedb..4ee617f 100644 --- a/src/vimode/marks.cpp +++ b/src/vimode/marks.cpp @@ -167,7 +167,7 @@ void Marks::syncViMarksAndBookmarks() const QHash<int, KTextEditor::Mark *> &marks = m_doc->marks(); // Each bookmark should have a vi mark on the same line. - for (auto mark : marks) { + Q_FOREACH (const KTextEditor::Mark* mark, marks) { if (!(mark->type & KTextEditor::MarkInterface::markType01)) { continue; } @@ -199,7 +199,7 @@ void Marks::syncViMarksAndBookmarks() } bool thereIsKateMarkForThisLine = false; - for (auto mark : marks) { + Q_FOREACH (const KTextEditor::Mark* mark, marks) { if (!(mark->type & KTextEditor::MarkInterface::markType01)) { continue; } diff --git a/src/vimode/range.cpp b/src/vimode/range.cpp index e2814b3..52938b4 100644 --- a/src/vimode/range.cpp +++ b/src/vimode/range.cpp @@ -25,7 +25,8 @@ using namespace KateVi; Range::Range() - : Range(-1, -1, -1, -1, InclusiveMotion) + : startLine(-1), startColumn(-1), endLine(-1), endColumn(-1) + , motionType(InclusiveMotion), valid(true), jump(false) { } @@ -36,17 +37,21 @@ Range::Range(int slin, int scol, int elin, int ecol, MotionType inc) } Range::Range(int elin, int ecol, MotionType inc) - : Range(-1, -1, elin, ecol, inc) + : startLine(-1), startColumn(-1), endLine(elin), endColumn(ecol) + , motionType(inc), valid(true), jump(false) { } Range::Range(const KTextEditor::Cursor& c, MotionType mt) - : Range(-1, -1, c.line(), c.column(), mt) + : startLine(-1), startColumn(-1), endLine(c.line()), endColumn(c.column()) + , motionType(mt), valid(true), jump(false) { } Range::Range(const KTextEditor::Cursor& c1, const KTextEditor::Cursor c2, MotionType mt) - : Range(c1.line(), c1.column(), c2.line(), c2.column(), mt) + : startLine(c1.line()), startColumn(c1.column()), endLine(c2.line()), endColumn(c2.column()) + , motionType(mt), valid(true), jump(false) + { }
_______________________________________________ Kde-frameworks-devel mailing list Kde-frameworks-devel@kde.org https://mail.kde.org/mailman/listinfo/kde-frameworks-devel