anchor.diff:      // prepare environment
       String indentOld = utils.getNodePrefix(firstStatement);
       String indentNew = "${indentOld}${utils.getIndent(1)}";
  +    String indentedCode =
  +        utils.replaceSourceRangeIndent(statementsRange, indentOld, indentNew);
       // "block"
       {
         _addInsertEdit(statementsRange.offset, "${indentOld}{${eol}");
  
positive.code:     }
      // "if"
      {
        {
          int offset = statementsRange.offset;
          SourceBuilder sb = new SourceBuilder(file, offset);
          sb.append(indentOld);
          sb.append("if (");
          {
            sb.startPosition("CONDITION");
            sb.append("condition");
            sb.endPosition();
          }
          sb.append(") {");
          sb.append(eol);
          _insertBuilder(sb);
        }
        _addIndentEdit(statementsRange, indentOld, indentNew);
        _addInsertEdit(statementsRange.end, "${indentOld}}${eol}");
        exitPosition = _newPosition(lastStatement.end);
        // add proposal
        _addAssist(AssistKind.SURROUND_WITH_IF, []);
      }
      // "while"
      {
        {
          int offset = statementsRange.offset;
          SourceBuilder sb = new SourceBuilder(file, offset);
          sb.append(indentOld);
          sb.append("while (");
          {
            sb.startPosition("CONDITION");
            sb.append("condition");
            sb.endPosition();
          }
          sb.append(") {");
          sb.append(eol);
          _insertBuilder(sb);
        }
        _addIndentEdit(statementsRange, indentOld, indentNew);
        _addInsertEdit(statementsRange.end, "${indentOld}}${eol}");
        exitPosition = _newPosition(lastStatement.end);
        // add proposal
        _addAssist(AssistKind.SURROUND_WITH_WHILE, []);
      }
      // "for-in"
      {
        {
          int offset = statementsRange.offset;
          SourceBuilder sb = new SourceBuilder(file, offset);
          sb.append(indentOld);
          sb.append("for (var ");
          {
            sb.startPosition("NAME");
            sb.append("item");
            sb.endPosition();
          }
          sb.append(" in ");
          {
            sb.startPosition("ITERABLE");
            sb.append("iterable");
            sb.endPosition();
          }
          sb.append(") {");
          sb.append(eol);
          _insertBuilder(sb);
        }
        _addIndentEdit(statementsRange, indentOld, indentNew);
        _addInsertEdit(statementsRange.end, "${indentOld}}${eol}");
        exitPosition = _newPosition(lastStatement.end);
        // add proposal
        _addAssist(AssistKind.SURROUND_WITH_FOR_IN, []);
      }
      // "for"
      {
        {
          int offset = statementsRange.offset;
          SourceBuilder sb = new SourceBuilder(file, offset);
          sb.append(indentOld);
          sb.append("for (var ");
          {
            sb.startPosition("VAR");
            sb.append("v");
            sb.endPosition();
          }
          sb.append(" = ");
          {
            sb.startPosition("INIT");
            sb.append("init");
            sb.endPosition();
          }
          sb.append("; ");
          {
            sb.startPosition("CONDITION");
            sb.append("condition");
            sb.endPosition();
          }
          sb.append("; ");
          {
            sb.startPosition("INCREMENT");
            sb.append("increment");
            sb.endPosition();
          }
          sb.append(") {");
          sb.append(eol);
          _insertBuilder(sb);
        }
        _addIndentEdit(statementsRange, indentOld, indentNew);
        _addInsertEdit(statementsRange.end, "${indentOld}}${eol}");
        exitPosition = _newPosition(lastStatement.end);
        // add proposal
        _addAssist(AssistKind.SURROUND_WITH_FOR, []);
      }
      // "do-while"
      {
        _addInsertEdit(statementsRange.offset, "${indentOld}do {${eol}");
        _addIndentEdit(statementsRange, indentOld, indentNew);
        {
          int offset = statementsRange.end;
          SourceBuilder sb = new SourceBuilder(file, offset);
          sb.append(indentOld);
          sb.append("} while (");
          {
            sb.startPosition("CONDITION");
            sb.append("condition");
            sb.endPosition();
          }
          sb.append(");");
          sb.append(eol);
          _insertBuilder(sb);
        }
        exitPosition = _newPosition(lastStatement.end);
        // add proposal
        _addAssist(AssistKind.SURROUND_WITH_DO_WHILE, []);
      }
      // "try-catch"
      {
        _addInsertEdit(statementsRange.offset, "${indentOld}try {${eol}");
        _addIndentEdit(statementsRange, indentOld, indentNew);
        {
          int offset = statementsRange.end;
          SourceBuilder sb = new SourceBuilder(file, offset);
          sb.append(indentOld);
          sb.append("} on ");
          {
            sb.startPosition("EXCEPTION_TYPE");
            sb.append("Exception");
            sb.endPosition();
          }
          sb.append(" catch (");
          {
            sb.startPosition("EXCEPTION_VAR");
            sb.append("e");
            sb.endPosition();
          }
          sb.append(") {");
          sb.append(eol);
          //
          sb.append(indentNew);
          {
            sb.startPosition("CATCH");
            sb.append("// TODO");
            sb.endPosition();
            sb.setExitOffset();
          }
          sb.append(eol);
          //
          sb.append(indentOld);
          sb.append("}");
          sb.append(eol);
          //
          _insertBuilder(sb);
          exitPosition = _newPosition(sb.exitOffset);
        }
        // add proposal
        _addAssist(AssistKind.SURROUND_WITH_TRY_CATCH, []);
      }
      // "try-finally"
      {
        _addInsertEdit(statementsRange.offset, "${indentOld}try {${eol}");
        _addIndentEdit(statementsRange, indentOld, indentNew);
        {
          int offset = statementsRange.end;
          SourceBuilder sb = new SourceBuilder(file, offset);
          //
          sb.append(indentOld);
          sb.append("} finally {");
          sb.append(eol);
          //
          sb.append(indentNew);
          {
            sb.startPosition("FINALLY");
            sb.append("// TODO");
            sb.endPosition();
          }
          sb.setExitOffset();
          sb.append(eol);
          //
          sb.append(indentOld);
          sb.append("}");
          sb.append(eol);
          //
          _insertBuilder(sb);
          exitPosition = _newPosition(sb.exitOffset);
        }
        // add proposal
        _addAssist(AssistKind.SURROUND_WITH_TRY_FINALLY, []);
      }
  
negative.code:   /**
     * Inserts the given [SourceBuilder] at its offset.
     */
    void _insertBuilder(SourceBuilder builder, [int length = 0]) {
      {
        SourceRange range = rangeStartLength(builder.offset, length);
        String text = builder.toString();
        _addReplaceEdit(range, text);
      }
      // add linked positions
      builder.linkedPositionGroups.forEach((String id, LinkedEditGroup group) {
        LinkedEditGroup fixGroup = _getLinkedPosition(id);
  