anchor.diff:  
       shouldHr = true;
   
  -    attribute.forEachAdded((_, v) =>
  -      reporter.io.writeln(attributeAttributeListItem(attributeName, v)));
  +    attribute.forEachAdded((_, property) =>
  +      reporter.io.writeln(propertyListItem(attributeName, property)));
   
       reporter.erase(attribute.added);
     }
   
  -  void reportEachWithChanged(String attributeName, DiffNode attribute) {
  +  void reportChangedProperties(String attributeName, DiffNode attribute) {
       if (!attribute.hasChanged)
         return;
   
  
positive.code: /// Reporter for changes in a method's attributes.
  ///
  /// This reporter can iterate over attributes with their own added, deleted, or
  /// changed attributes, and iterate over shallow attributes (such as `return`)
  /// to list changes.
  ///
  /// It is unexpected to find any new or removed attributes themselves (a method
  /// should never be missing the "parameters" attribute, or suddenly gain the
  
negative.code:       }
        reporter.io.writeHr();
      });
      reporter.erase(property.changed);
  
      if (property.containsKey('type')) {
        String key = 'type';
        List<String> oldNew = property[key]['0'].changed['outer'];
        // This is so ugly because we are so deep, but an example would be:
        // The foo method's value parameter's type has changed from int to bool.
        reporter.io.writeln(
            'The [$method](#) ${category}\'s [${propertyName}](#) '
            '${singularize(attributeName)}\'s $key has changed from '
            '`${oldNew[0]}` to `${oldNew[1]}`');
        reporter.io.writeHr();
  
        if (reporter.shouldErase)
          property.node.remove('type');
      }
  
      if (property.containsKey('functionDeclaration')) {
        DiffNode declaration = property.node['functionDeclaration'];
        if (declaration.changed.containsKey('return')) {
          List<List<Map>> oldNew = declaration.changed['return'];
          // This is so ugly because we are so deep, but an example would be:
          // The foo method's callback parameter's return type has changed from
          // Object to String.
          reporter.io.writeln(
              'The [$method](#) ${category}\'s [${propertyName}](#) '
              '${singularize(attributeName)}\'s return type has ${changedType(oldNew)}');
          reporter.io.writeHr();
          if (reporter.shouldErase) {
  