anchor.diff:    }
   
     void reportEach(String attributeName, DiffNode attribute) {
  -    reportEachWithRemoved(attributeName, attribute);
  -    reportEachWithAdded(attributeName, attribute);
  -    reportEachWithChanged(attributeName, attribute);
  +    reportRemovedProperties(attributeName, attribute);
  +    reportAddedProperties(attributeName, attribute);
  +    reportChangedProperties(attributeName, attribute);
   
       if (shouldHr)
         reporter.io.writeHr();
   
  -    attribute.node.forEach((attributeAttributeName, attributeAttribute) {
  -      reportEachMethodAttributeAttribute(
  -          attributeName, attributeAttributeName, attributeAttribute);
  +    attribute.node.forEach((propertyName, property) {
  +      reportEachProperty(
  +          attributeName, propertyName, property);
       });
     }
   
  
positive.code: 
      shouldHr = true;
  
      attribute.forEachChanged((k, v) {
        if (attributeName == 'annotations') {
          reporter.io.writeln(
              '* ${annotationFormatter(v[0])} is now ${annotationFormatter(v[1])}.');
        } else {
          reporter.io.writeln('* `${v[0]}` is now `${v[1]}`.');
        }
      });
  
      reporter.erase(attribute.changed);
    }
  
    String attributeAttributeListItem(String attributeName, Map attributeAttribute) {
      if (attributeName == 'annotations')
        return '* ${annotationFormatter(attributeAttribute)}';
  
      if (attributeName == 'parameters')
        return '* `${parameterSignature(attributeAttribute)}`';
  
      return '* `$attributeAttribute`';
    }
  
    void reportEachMethodAttributeAttribute(
        String attributeName,
        String attributeAttributeName,
        DiffNode attributeAttribute) {
      String methodQualifiedName = attributes.metadata['qualifiedName'];
      String methodLink = mdLinkToDartlang(methodQualifiedName, method);
      String attrLink = mdLinkToDartlang(
          '$methodQualifiedName,$attributeAttributeName', attributeAttributeName);
      String firstPart =
          'The $methodLink ${category}\'s $attrLink ${singularize(attributeName)}\'s';
      attributeAttribute.forEachChanged((key, oldNew) {
        if (key == 'type') {
          reporter.io.writeln(
              '$firstPart $key changed from `${changedType(oldNew)}`');
  
negative.code: 
      shouldHr = true;
  
      attribute.forEachAdded((_, property) =>
        reporter.io.writeln(propertyListItem(attributeName, property)));
  
      reporter.erase(attribute.added);
    }
  
    void reportChangedProperties(String attributeName, DiffNode attribute) {
      if (!attribute.hasChanged)
        return;
  
  