From f7f43eaa8077a82648084e742b188931ff1d1007 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 12 Jun 2025 16:09:40 +0200 Subject: [PATCH] CppEditor: Add "Remove braces" quickfix for control statements E.g.: if (x == 1) { return x; } => if (x == 1) return x; This is very helpful for instance after temporarily inserting braces to add debugging statements. The functionality is tailored towards our coding conventions in that we do not offer the operation if the statement in the block spans more than a single line. Change-Id: I09b3c139422a9e2773811b78c12ada7730ffcb22 Reviewed-by: David Schulz --- .../quickfixes/rewritecontrolstatements.cpp | 160 ++++++++++++++++-- .../do-applicable/expected_file.cpp | 6 + .../do-applicable/original_file.cpp | 7 + .../do-inapplicable-1/original_file.cpp | 6 + .../do-inapplicable-2/original_file.cpp | 8 + .../for-applicable/expected_file.cpp | 5 + .../for-applicable/original_file.cpp | 5 + .../for-inapplicable-1/original_file.cpp | 5 + .../for-inapplicable-2/original_file.cpp | 7 + .../original_file.cpp | 7 + .../original_file.cpp | 7 + .../expected_file.cpp | 5 + .../original_file.cpp | 6 + .../expected_file.cpp | 9 + .../original_file.cpp | 10 ++ .../original_file.cpp | 11 ++ .../expected_file.cpp | 9 + .../original_file.cpp | 10 ++ .../expected_file.cpp | 9 + .../original_file.cpp | 9 + .../expected_file.cpp | 9 + .../original_file.cpp | 10 ++ .../expected_file.cpp | 9 + .../original_file.cpp | 9 + .../expected_file.cpp | 9 + .../original_file.cpp | 10 ++ .../original_file.cpp | 11 ++ .../original_file.cpp | 10 ++ .../if-else-unbraced/original_file.cpp | 9 + .../if-unbraced/original_file.cpp | 5 + .../expected_file.cpp | 5 + .../original_file.cpp | 6 + .../original_file.cpp | 5 + .../original_file.cpp | 7 + .../while-applicable/expected_file.cpp | 5 + .../while-applicable/original_file.cpp | 6 + .../while-inapplicable-1/original_file.cpp | 5 + .../while-inapplicable-2/original_file.cpp | 7 + 38 files changed, 426 insertions(+), 12 deletions(-) create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-applicable/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-applicable/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-inapplicable-1/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/do-inapplicable-2/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-applicable/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-applicable/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-inapplicable-1/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/for-inapplicable-2/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-multiple-statements/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-multiple-lines/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-single-line/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-braced-single-statement-single-line/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-applicable/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-applicable/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-fully-braced-inapplicable/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-1/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-1/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-2/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-2/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-3/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-3/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-4/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-4/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-5/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-applicable-5/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-inapplicable-1/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-partially-braced-inapplicable-2/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-else-unbraced/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/if-unbraced/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-applicable/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-applicable/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-inapplicable-1/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/range-based-for-inapplicable-2/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-applicable/expected_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-applicable/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-inapplicable-1/original_file.cpp create mode 100644 src/plugins/cppeditor/testcases/RemoveBracesFromControlStatementTest/while-inapplicable-2/original_file.cpp 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; + } +}