diff --git a/src/plugins/cppeditor/quickfixes/rewritecontrolstatements.cpp b/src/plugins/cppeditor/quickfixes/rewritecontrolstatements.cpp index f856b353e6a..08ef59c7013 100644 --- a/src/plugins/cppeditor/quickfixes/rewritecontrolstatements.cpp +++ b/src/plugins/cppeditor/quickfixes/rewritecontrolstatements.cpp @@ -12,6 +12,8 @@ #include #include +#include + #ifdef WITH_TESTS #include "cppquickfix_test.h" #endif @@ -111,8 +113,81 @@ private: const int m_elseToken; }; -template -bool checkControlStatementsHelper(const CppQuickFixInterface &interface, QuickFixOperations &result) +template class RemoveBracesFromControlStatementOp : public CppQuickFixOperation +{ +public: + RemoveBracesFromControlStatementOp(const CppQuickFixInterface &interface, + const QList &statements, + StatementAST *elseStatement, + int elseToken) + : CppQuickFixOperation(interface, 0) + , m_statements(statements), m_elseStatement(elseStatement) + { + Q_UNUSED(elseToken) + + setDescription(Tr::tr("Remove Curly Braces")); + } + + void perform() override + { + ChangeSet changes; + const auto findNewline = [&](int bracePos, int diff, int &newlinePos, int *nextNonSpacePos) { + for (int i = bracePos + diff; true; i += diff) { + const QChar &c = currentFile()->charAt(i); + if (c == '\n' || c == QChar::ParagraphSeparator) { + newlinePos = i; + break; + } + if (!c.isSpace()) + break; + if (nextNonSpacePos) + ++*nextNonSpacePos; + } + }; + const auto removeBraceAndPossiblyLine = [&](int braceToken, bool removeTrailingSpace) { + const int bracePos = currentFile()->startOf(braceToken); + int prevNewline = -1; + int nextNewline = -1; + int start = bracePos; + int end = bracePos + 1; + findNewline(bracePos, -1, prevNewline, nullptr); + findNewline(bracePos, 1, nextNewline, removeTrailingSpace ? &end : nullptr); + if (prevNewline != -1 && nextNewline != -1) { + start = prevNewline; + end = nextNewline; + } + changes.remove(start, end); + }; + const auto apply = [&](const CompoundStatementAST *stmt) { + QTC_ASSERT(stmt, return); + removeBraceAndPossiblyLine(stmt->lbrace_token, false); + removeBraceAndPossiblyLine(stmt->rbrace_token, + std::is_same_v + || std::is_same_v); + if (!stmt->statement_list) + changes.insert(currentFile()->endOf(stmt), "\n;"); + + }; + for (Statement * const statement : m_statements) + apply(statement->statement->asCompoundStatement()); + if (m_elseStatement) + apply(m_elseStatement->asCompoundStatement()); + + currentFile()->setChangeSet(changes); + currentFile()->apply(); + } + +private: + const QList m_statements; + StatementAST * const m_elseStatement; +}; + +using StmtConstraint = std::function; +template typename Op, typename Statement> +bool checkControlStatementsHelper( + const CppQuickFixInterface &interface, + const StmtConstraint &constraint, + QuickFixOperations &result) { Statement * const statement = asControlStatement(interface.path().last()); if (!statement) @@ -122,8 +197,11 @@ bool checkControlStatementsHelper(const CppQuickFixInterface &interface, QuickFi if (!Utils::anyOf(triggerTokens(statement), [&](int tok) { return interface.isCursorOn(tok); })) return false; - if (statement->statement && !statement->statement->asCompoundStatement()) + bool abort = false; + if (statement->statement && constraint(statement->statement, abort)) statements << statement; + if (abort) + return false; StatementAST *elseStmt = nullptr; int elseToken = 0; @@ -132,24 +210,33 @@ bool checkControlStatementsHelper(const CppQuickFixInterface &interface, QuickFi for (elseStmt = currentIfStmt->else_statement, elseToken = currentIfStmt->else_token; elseStmt && (currentIfStmt = elseStmt->asIfStatement()); elseStmt = currentIfStmt->else_statement, elseToken = currentIfStmt->else_token) { - if (currentIfStmt->statement && !currentIfStmt->statement->asCompoundStatement()) + if (currentIfStmt->statement && constraint(currentIfStmt->statement, abort)) statements << currentIfStmt; + if (abort) + return false; } - if (elseStmt && (elseStmt->asIfStatement() || elseStmt->asCompoundStatement())) { + if (elseStmt && (elseStmt->asIfStatement() || !constraint(elseStmt, abort))) { + if (abort) + return false; elseStmt = nullptr; elseToken = 0; } } - if (!statements.isEmpty() || elseStmt) - result << new AddBracesToControlStatementOp(interface, statements, elseStmt, elseToken); + if (!statements.isEmpty() || elseStmt) { + result << new Op(interface, statements, elseStmt, elseToken); + return false; + } return true; } -template -void checkControlStatements(const CppQuickFixInterface &interface, QuickFixOperations &result) +template typename Op, typename... Statements> +void checkControlStatements( + const CppQuickFixInterface &interface, + const StmtConstraint &constraint, + QuickFixOperations &result) { - (... || checkControlStatementsHelper(interface, result)); + (... || checkControlStatementsHelper(interface, constraint, result)); } class MoveDeclarationOutOfIfOp: public CppQuickFixOperation @@ -574,11 +661,53 @@ class AddBracesToControlStatement : public CppQuickFixFactory { if (interface.path().isEmpty()) return; - checkControlStatementsasCompoundStatement(); }; + checkControlStatements(interface, result); + DoStatementAST>(interface, constraint, result); + } +}; + +/*! + * The reverse of AddBracesToControlStatement + */ +class RemoveBracesFromControlStatement : public CppQuickFixFactory +{ + void doMatch(const CppQuickFixInterface &interface, QuickFixOperations &result) override + { + if (interface.path().isEmpty()) + return; + const auto constraint = [&](AST *ast, bool &abort) { + if (const auto compoundStmt = ast->asCompoundStatement()) { + if (!compoundStmt->statement_list || !compoundStmt->statement_list->value) + return true; // No statements. + if (compoundStmt->statement_list->next) { + abort = true; + return false; // More than one statement. + } + + // We have exactly one statement. Check whether it spans more than one line. + const CppRefactoringFilePtr file = interface.currentFile(); + const ChangeSet::Range stmtRange = file->range(compoundStmt->statement_list->value); + int startLine, startColumn, endLine, endColumn; + file->lineAndColumn(stmtRange.start, &startLine, &startColumn); + file->lineAndColumn(stmtRange.end, &endLine, &endColumn); + if (startLine == endLine) + return true; + abort = true; + return false; + } + return false; + }; + checkControlStatements(interface, constraint, result); } }; @@ -676,6 +805,12 @@ class AddBracesToControlStatementTest : public Tests::CppQuickFixTestObject public: using CppQuickFixTestObject::CppQuickFixTestObject; }; +class RemoveBracesFromControlStatementTest : public Tests::CppQuickFixTestObject +{ + Q_OBJECT +public: + using CppQuickFixTestObject::CppQuickFixTestObject; +}; class MoveDeclarationOutOfIfTest : public Tests::CppQuickFixTestObject { Q_OBJECT @@ -701,6 +836,7 @@ public: void registerRewriteControlStatementQuickfixes() { REGISTER_QUICKFIX_FACTORY_WITH_STANDARD_TEST(AddBracesToControlStatement); + REGISTER_QUICKFIX_FACTORY_WITH_STANDARD_TEST(RemoveBracesFromControlStatement); REGISTER_QUICKFIX_FACTORY_WITH_STANDARD_TEST(MoveDeclarationOutOfIf); REGISTER_QUICKFIX_FACTORY_WITH_STANDARD_TEST(MoveDeclarationOutOfWhile); REGISTER_QUICKFIX_FACTORY_WITH_STANDARD_TEST(OptimizeForLoop); diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-applicable/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-applicable/expected_file.cpp new file mode 100644 index 00000000000..bc993cd5fc6 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-applicable/expected_file.cpp @@ -0,0 +1,6 @@ +void foo(int v) +{ + do + ++v; + while (v < 100); +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-applicable/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-applicable/original_file.cpp new file mode 100644 index 00000000000..481fd76d0a7 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-applicable/original_file.cpp @@ -0,0 +1,7 @@ +void foo(int v) +{ + @do + { + ++v; + } while (v < 100); +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-inapplicable-1/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-inapplicable-1/original_file.cpp new file mode 100644 index 00000000000..d8c7e177956 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-inapplicable-1/original_file.cpp @@ -0,0 +1,6 @@ +void foo(int v) +{ + @do + ++v; + while (v < 100); +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-inapplicable-2/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-inapplicable-2/original_file.cpp new file mode 100644 index 00000000000..9407ee0fc1f --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-inapplicable-2/original_file.cpp @@ -0,0 +1,8 @@ +void foo(int v) +{ + @do { + ++v; + v + *= 2; + } while (v < 100); +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-applicable/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-applicable/expected_file.cpp new file mode 100644 index 00000000000..a301bf4e7ca --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-applicable/expected_file.cpp @@ -0,0 +1,5 @@ +void foo(int v) +{ + for (int i = 0; i < v; ++i) + ; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-applicable/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-applicable/original_file.cpp new file mode 100644 index 00000000000..1cc16ccebd9 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-applicable/original_file.cpp @@ -0,0 +1,5 @@ +void foo(int v) +{ + @for (int i = 0; i < v; ++i) { + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-inapplicable-1/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-inapplicable-1/original_file.cpp new file mode 100644 index 00000000000..9e62eba7878 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-inapplicable-1/original_file.cpp @@ -0,0 +1,5 @@ +void foo(int v) +{ + @for (int i = 0; i < v; ++i) + ; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-inapplicable-2/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-inapplicable-2/original_file.cpp new file mode 100644 index 00000000000..c3d95f42f0c --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-inapplicable-2/original_file.cpp @@ -0,0 +1,7 @@ +void foo(int v) +{ + @for (int i = 0; i < v; ++i) { + if (i < v/2) + ++i; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-multiple-statements/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-multiple-statements/original_file.cpp new file mode 100644 index 00000000000..c81c9d2c2e3 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-multiple-statements/original_file.cpp @@ -0,0 +1,7 @@ +int foo() +{ + @if (true) { + int i = 0; + return i; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-multiple-lines/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-multiple-lines/original_file.cpp new file mode 100644 index 00000000000..c4c55143e61 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-multiple-lines/original_file.cpp @@ -0,0 +1,7 @@ +int foo() +{ + @if (true) { + return + 0; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-single-line/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-single-line/expected_file.cpp new file mode 100644 index 00000000000..d840568d528 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-single-line/expected_file.cpp @@ -0,0 +1,5 @@ +void foo() +{ + if (true) + return; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-single-line/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-single-line/original_file.cpp new file mode 100644 index 00000000000..ba724542209 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-single-line/original_file.cpp @@ -0,0 +1,6 @@ +void foo() +{ + @if (true) { + return; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-applicable/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-applicable/expected_file.cpp new file mode 100644 index 00000000000..34fd98dec95 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-applicable/expected_file.cpp @@ -0,0 +1,9 @@ +void foo(int &x) +{ + if (x == 0) + x = 1; + else if (x < 0) + x = -x; + else + --x; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-applicable/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-applicable/original_file.cpp new file mode 100644 index 00000000000..43ddc85524a --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-applicable/original_file.cpp @@ -0,0 +1,10 @@ +void foo(int &x) +{ + @if (x == 0) { + x = 1; + } else if (x < 0) { + x = -x; + } else { + --x; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-inapplicable/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-inapplicable/original_file.cpp new file mode 100644 index 00000000000..b2999b637dd --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-inapplicable/original_file.cpp @@ -0,0 +1,11 @@ +void foo(int &x) +{ + @if (x == 0) { + x = 1; + } else if (x < 0) { + x + = -x; + } else { + --x; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-1/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-1/expected_file.cpp new file mode 100644 index 00000000000..34fd98dec95 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-1/expected_file.cpp @@ -0,0 +1,9 @@ +void foo(int &x) +{ + if (x == 0) + x = 1; + else if (x < 0) + x = -x; + else + --x; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-1/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-1/original_file.cpp new file mode 100644 index 00000000000..adfe16e4436 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-1/original_file.cpp @@ -0,0 +1,10 @@ +void foo(int &x) +{ + @if (x == 0) + x = 1; + else if (x < 0) + x = -x; + else { + --x; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-2/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-2/expected_file.cpp new file mode 100644 index 00000000000..34fd98dec95 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-2/expected_file.cpp @@ -0,0 +1,9 @@ +void foo(int &x) +{ + if (x == 0) + x = 1; + else if (x < 0) + x = -x; + else + --x; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-2/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-2/original_file.cpp new file mode 100644 index 00000000000..63bce9a2178 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-2/original_file.cpp @@ -0,0 +1,9 @@ +void foo(int &x) +{ + @if (x == 0) + x = 1; + else if (x < 0) { + x = -x; + } else + --x; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-3/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-3/expected_file.cpp new file mode 100644 index 00000000000..34fd98dec95 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-3/expected_file.cpp @@ -0,0 +1,9 @@ +void foo(int &x) +{ + if (x == 0) + x = 1; + else if (x < 0) + x = -x; + else + --x; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-3/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-3/original_file.cpp new file mode 100644 index 00000000000..f556a2b3d3e --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-3/original_file.cpp @@ -0,0 +1,10 @@ +void foo(int &x) +{ + @if (x == 0) + x = 1; + else if (x < 0) { + x = -x; + } else { + --x; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-4/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-4/expected_file.cpp new file mode 100644 index 00000000000..34fd98dec95 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-4/expected_file.cpp @@ -0,0 +1,9 @@ +void foo(int &x) +{ + if (x == 0) + x = 1; + else if (x < 0) + x = -x; + else + --x; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-4/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-4/original_file.cpp new file mode 100644 index 00000000000..911ef7a57a3 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-4/original_file.cpp @@ -0,0 +1,9 @@ +void foo(int &x) +{ + @if (x == 0) { + x = 1; + } else if (x < 0) { + x = -x; + } else + --x; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-5/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-5/expected_file.cpp new file mode 100644 index 00000000000..34fd98dec95 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-5/expected_file.cpp @@ -0,0 +1,9 @@ +void foo(int &x) +{ + if (x == 0) + x = 1; + else if (x < 0) + x = -x; + else + --x; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-5/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-5/original_file.cpp new file mode 100644 index 00000000000..7d90b7addd2 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-5/original_file.cpp @@ -0,0 +1,10 @@ +void foo(int &x) +{ + @if (x == 0) { + x = 1; + } else if (x < 0) + x = -x; + else { + --x; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-inapplicable-1/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-inapplicable-1/original_file.cpp new file mode 100644 index 00000000000..0e664229000 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-inapplicable-1/original_file.cpp @@ -0,0 +1,11 @@ +void foo(int &x) +{ + @if (x == 0) + x = 1; + else if (x < 0) + x = -x; + else { + --x; + x /= 2; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-inapplicable-2/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-inapplicable-2/original_file.cpp new file mode 100644 index 00000000000..81959c27390 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-inapplicable-2/original_file.cpp @@ -0,0 +1,10 @@ +void foo(int &x) +{ + @if (x == 0) + x = 1; + else if (x < 0) { + x + = -x; + } else + --x; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-unbraced/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-unbraced/original_file.cpp new file mode 100644 index 00000000000..daaec949245 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-unbraced/original_file.cpp @@ -0,0 +1,9 @@ +void foo(int &x) +{ + @if (x == 0) + x = 1; + else if (x < 0) + x = -x; + else + --x; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-unbraced/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-unbraced/original_file.cpp new file mode 100644 index 00000000000..cc217c96184 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-unbraced/original_file.cpp @@ -0,0 +1,5 @@ +void foo() +{ + @if (true) + return; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-applicable/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-applicable/expected_file.cpp new file mode 100644 index 00000000000..687b05ea4ec --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-applicable/expected_file.cpp @@ -0,0 +1,5 @@ +void foo(std::vector &list) +{ + for (int &i : list) + i *= 2; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-applicable/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-applicable/original_file.cpp new file mode 100644 index 00000000000..83c3c0211b7 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-applicable/original_file.cpp @@ -0,0 +1,6 @@ +void foo(std::vector &list) +{ + @for (int &i : list) { + i *= 2; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-inapplicable-1/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-inapplicable-1/original_file.cpp new file mode 100644 index 00000000000..41c4f259481 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-inapplicable-1/original_file.cpp @@ -0,0 +1,5 @@ +void foo(std::vector &list) +{ + @for (int &i : list) + i *= 2; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-inapplicable-2/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-inapplicable-2/original_file.cpp new file mode 100644 index 00000000000..90ef56e5c7f --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-inapplicable-2/original_file.cpp @@ -0,0 +1,7 @@ +void foo(std::vector &list) +{ + @for (int &i : list) { + i *= 2; + ++i; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-applicable/expected_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-applicable/expected_file.cpp new file mode 100644 index 00000000000..fc0ab5b4ae0 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-applicable/expected_file.cpp @@ -0,0 +1,5 @@ +void foo(int v) +{ + while (v < 100) + ++v; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-applicable/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-applicable/original_file.cpp new file mode 100644 index 00000000000..8da02654bb2 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-applicable/original_file.cpp @@ -0,0 +1,6 @@ +void foo(int v) +{ + @while (v < 100) { + ++v; + } +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-inapplicable-1/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-inapplicable-1/original_file.cpp new file mode 100644 index 00000000000..e7864aec836 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-inapplicable-1/original_file.cpp @@ -0,0 +1,5 @@ +void foo(int v) +{ + @while (v < 100) + ++v; +} diff --git a/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-inapplicable-2/original_file.cpp b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-inapplicable-2/original_file.cpp new file mode 100644 index 00000000000..3859a98c741 --- /dev/null +++ b/src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-inapplicable-2/original_file.cpp @@ -0,0 +1,7 @@ +void foo(int v) +{ + @while (v < 100) { + v += 2; + v -= 1; + } +}