@@ -149,6 +149,7 @@ class AssistProcessor {
149149 await _addProposal_splitAndCondition ();
150150 await _addProposal_splitVariableDeclaration ();
151151 await _addProposal_surroundWith ();
152+ await _addProposal_useCurlyBraces ();
152153
153154 if (experimentStatus.control_flow_collections) {
154155 await _addProposal_convertConditionalExpressionToIfElement ();
@@ -3947,6 +3948,132 @@ class AssistProcessor {
39473948 }
39483949 }
39493950
3951+ Future <void > _addProposal_useCurlyBraces () async {
3952+ Future <void > doStatement (DoStatement node) async {
3953+ var body = node.body;
3954+ if (body is Block ) return ;
3955+
3956+ var prefix = utils.getLinePrefix (node.offset);
3957+ var indent = prefix + utils.getIndent (1 );
3958+
3959+ var changeBuilder = _newDartChangeBuilder ();
3960+ await changeBuilder.addFileEdit (file, (builder) {
3961+ builder.addSimpleReplacement (
3962+ range.endStart (node.doKeyword, body),
3963+ ' {$eol $indent ' ,
3964+ );
3965+ builder.addSimpleReplacement (
3966+ range.endStart (body, node.whileKeyword),
3967+ '$eol $prefix } ' ,
3968+ );
3969+ });
3970+
3971+ _addAssistFromBuilder (changeBuilder, DartAssistKind .USE_CURLY_BRACES );
3972+ }
3973+
3974+ Future <void > forStatement (ForStatement node) async {
3975+ var body = node.body;
3976+ if (body is Block ) return ;
3977+
3978+ var prefix = utils.getLinePrefix (node.offset);
3979+ var indent = prefix + utils.getIndent (1 );
3980+
3981+ var changeBuilder = _newDartChangeBuilder ();
3982+ await changeBuilder.addFileEdit (file, (builder) {
3983+ builder.addSimpleReplacement (
3984+ range.endStart (node.rightParenthesis, body),
3985+ ' {$eol $indent ' ,
3986+ );
3987+ builder.addSimpleInsertion (body.end, '$eol $prefix }' );
3988+ });
3989+
3990+ _addAssistFromBuilder (changeBuilder, DartAssistKind .USE_CURLY_BRACES );
3991+ }
3992+
3993+ Future <void > ifStatement (IfStatement node, Statement thenOrElse) async {
3994+ var prefix = utils.getLinePrefix (node.offset);
3995+ var indent = prefix + utils.getIndent (1 );
3996+
3997+ var changeBuilder = _newDartChangeBuilder ();
3998+ await changeBuilder.addFileEdit (file, (builder) {
3999+ var thenStatement = node.thenStatement;
4000+ if (thenStatement is ! Block &&
4001+ (thenOrElse == null || thenOrElse == thenStatement)) {
4002+ builder.addSimpleReplacement (
4003+ range.endStart (node.rightParenthesis, thenStatement),
4004+ ' {$eol $indent ' ,
4005+ );
4006+ if (node.elseKeyword != null ) {
4007+ builder.addSimpleReplacement (
4008+ range.endStart (thenStatement, node.elseKeyword),
4009+ '$eol $prefix } ' ,
4010+ );
4011+ } else {
4012+ builder.addSimpleInsertion (thenStatement.end, '$eol $prefix }' );
4013+ }
4014+ }
4015+
4016+ var elseStatement = node.elseStatement;
4017+ if (elseStatement != null &&
4018+ elseStatement is ! Block &&
4019+ (thenOrElse == null || thenOrElse == elseStatement)) {
4020+ builder.addSimpleReplacement (
4021+ range.endStart (node.elseKeyword, elseStatement),
4022+ ' {$eol $indent ' ,
4023+ );
4024+ builder.addSimpleInsertion (elseStatement.end, '$eol $prefix }' );
4025+ }
4026+ });
4027+
4028+ _addAssistFromBuilder (changeBuilder, DartAssistKind .USE_CURLY_BRACES );
4029+ }
4030+
4031+ Future <void > whileStatement (WhileStatement node) async {
4032+ var body = node.body;
4033+ if (body is Block ) return ;
4034+
4035+ var prefix = utils.getLinePrefix (node.offset);
4036+ var indent = prefix + utils.getIndent (1 );
4037+
4038+ var changeBuilder = _newDartChangeBuilder ();
4039+ await changeBuilder.addFileEdit (file, (builder) {
4040+ builder.addSimpleReplacement (
4041+ range.endStart (node.rightParenthesis, body),
4042+ ' {$eol $indent ' ,
4043+ );
4044+ builder.addSimpleInsertion (body.end, '$eol $prefix }' );
4045+ });
4046+
4047+ _addAssistFromBuilder (changeBuilder, DartAssistKind .USE_CURLY_BRACES );
4048+ }
4049+
4050+ var statement = this .node.thisOrAncestorOfType <Statement >();
4051+ var parent = statement? .parent;
4052+
4053+ if (statement is DoStatement ) {
4054+ return doStatement (statement);
4055+ } else if (parent is DoStatement ) {
4056+ return doStatement (parent);
4057+ } else if (statement is ForStatement ) {
4058+ return forStatement (statement);
4059+ } else if (parent is ForStatement ) {
4060+ return forStatement (parent);
4061+ } else if (statement is IfStatement ) {
4062+ if (statement.elseKeyword != null &&
4063+ range.token (statement.elseKeyword).contains (selectionOffset)) {
4064+ return ifStatement (statement, statement.elseStatement);
4065+ } else {
4066+ return ifStatement (statement, null );
4067+ }
4068+ } else if (parent is IfStatement ) {
4069+ return ifStatement (parent, statement);
4070+ } else if (statement is WhileStatement ) {
4071+ return whileStatement (statement);
4072+ } else if (parent is WhileStatement ) {
4073+ return whileStatement (parent);
4074+ }
4075+ }
4076+
39504077 /**
39514078 * Return `true` if all of the parameters in the given list of [parameters]
39524079 * have an explicit type annotation.
0 commit comments