forked from qt-creator/qt-creator
CppEditor: Make "Complete switch statement" quickfix more visible
Do not require the cursor to be on the "switch" keyword, but allow it to be anywhere within the switch construct. Fixes: QTCREATORBUG-5379 Change-Id: Ic25504237b3ef12958f339d7176dfeeac6bd3466 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -409,6 +409,32 @@ void CppEditorPlugin::test_quickfix_data()
|
|||||||
"}\n"
|
"}\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Same as above with the cursor somewhere in the body.
|
||||||
|
QTest::newRow("CompleteSwitchCaseStatement_basic1_enum class, cursor in the body")
|
||||||
|
<< CppQuickFixFactoryPtr(new CompleteSwitchCaseStatement) << _(
|
||||||
|
"enum class EnumType { V1, V2 };\n"
|
||||||
|
"\n"
|
||||||
|
"void f()\n"
|
||||||
|
"{\n"
|
||||||
|
" EnumType t;\n"
|
||||||
|
" switch (t) {\n"
|
||||||
|
" @}\n"
|
||||||
|
"}\n"
|
||||||
|
) << _(
|
||||||
|
"enum class EnumType { V1, V2 };\n"
|
||||||
|
"\n"
|
||||||
|
"void f()\n"
|
||||||
|
"{\n"
|
||||||
|
" EnumType t;\n"
|
||||||
|
" switch (t) {\n"
|
||||||
|
" case EnumType::V1:\n"
|
||||||
|
" break;\n"
|
||||||
|
" case EnumType::V2:\n"
|
||||||
|
" break;\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
);
|
||||||
|
|
||||||
// Checks: All enum values are added as case statements for a blank switch when
|
// Checks: All enum values are added as case statements for a blank switch when
|
||||||
// the variable is declared alongside the enum definition.
|
// the variable is declared alongside the enum definition.
|
||||||
QTest::newRow("CompleteSwitchCaseStatement_basic1_enum_with_declaration")
|
QTest::newRow("CompleteSwitchCaseStatement_basic1_enum_with_declaration")
|
||||||
|
@@ -2833,7 +2833,7 @@ void CompleteSwitchCaseStatement::match(const CppQuickFixInterface &interface,
|
|||||||
AST *ast = path.at(depth);
|
AST *ast = path.at(depth);
|
||||||
SwitchStatementAST *switchStatement = ast->asSwitchStatement();
|
SwitchStatementAST *switchStatement = ast->asSwitchStatement();
|
||||||
if (switchStatement) {
|
if (switchStatement) {
|
||||||
if (!interface.isCursorOn(switchStatement->switch_token) || !switchStatement->statement)
|
if (!switchStatement->statement)
|
||||||
return;
|
return;
|
||||||
CompoundStatementAST *compoundStatement = switchStatement->statement->asCompoundStatement();
|
CompoundStatementAST *compoundStatement = switchStatement->statement->asCompoundStatement();
|
||||||
if (!compoundStatement) // we ignore pathologic case "switch (t) case A: ;"
|
if (!compoundStatement) // we ignore pathologic case "switch (t) case A: ;"
|
||||||
|
Reference in New Issue
Block a user