anchor.diff:      });
   
       optionalTrailingComma(rightBracket);
  +    _endBody(rightBracket);
  +  }
  +
  +  /// Writes an opening bracket token ("(", "{", "[") and handles indenting and
  +  /// starting the multisplit it contains.
  +  void _startBody(Token leftBracket, [int cost = Cost.FREE]) {
  +    token(leftBracket);
  +
  +    // Indent the body.
  +    _writer.startMultisplit(cost: cost);
  +    _writer.increaseIndent();
  +
  +    // Split after the bracket.
  +    _writer.multisplit(allowTrailingCommentBefore: false);
  +  }
  +
  +  /// Writes a closing bracket token (")", "}", "]") and handles unindenting
  +  /// and ending the multisplit it contains.
  +  ///
  +  /// Used for blocks, other curly bodies, and collection literals.
  +  void _endBody(Token rightBracket) {
       _writer.resetNesting();
   
       token(rightBracket, before: () {
  -      // Split before the "}".
  +      // Split before the closing bracket character.
         _writer.decreaseIndent();
         _writer.multisplit();
         _writer.endMultisplit();
  
positive.code:   }
  
    visitBlock(Block node) {
      token(node.leftBracket);
  
      // TODO(bob): Helper fn for these?
      _writer.increaseIndent();
      _writer.startMultisplit();
      _writer.multisplit(allowTrailingCommentBefore: false);
  
      for (var i = 0; i < node.statements.length; i++) {
        visit(node.statements[i]);
  
        // Allow a blank line between statements, but not after the last.
        if (i == node.statements.length - 1) {
          newline();
        } else {
          oneOrTwoNewlines();
        }
  
        _writer.resetNesting();
      }
  
      token(node.rightBracket, before: () {
        _writer.decreaseIndent();
        _writer.multisplit();
        _writer.endMultisplit();
      });
    }
  
    visitBlockFunctionBody(BlockFunctionBody node) {
  
negative.code:       Iterable<AstNode> elements, Token rightBracket) {
      modifier(node.constKeyword);
      visitNode(node.typeArguments);
  
      _startBody(leftBracket, Cost.COLLECTION_LITERAL);
  
      visitCommaSeparatedNodes(elements, between: () {
        _writer.multisplit(text: " ");
  