anchor.diff:  /// 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`)
  +/// changed properties, and iterate over shallow attributes (such as `return`)
   /// to list changes.
  +///
  +/// Definitions that might help:
  +///
  +/// * There are 5 method categories: constructor, method, getter, setter, and
  +///   operator.
  +/// * Each method has attributes, such as "parameters" and "annotations"
  +/// * Each method attribute, or member thereof, might have properties.
  +///   E.g. Each member of the "parameters" attribute (each parameter) has
  +///   properties such as "name", and "type".
   ///
   /// It is unexpected to find any new or removed attributes themselves (a method
   /// should never be missing the "parameters" attribute, or suddenly gain the
  
positive.code:     reporter.io.writeHr();
    }
  
    void reportEachWithRemoved(String attributeName, DiffNode attribute) {
      if (!attribute.hasRemoved)
        return;
  
      reporter.io.writeln('The $link $category has removed $attributeName:\n');
      shouldHr = true;
  
      attribute.forEachRemoved((_, v) =>
          reporter.io.writeln(attributeAttributeListItem(attributeName, v)));
  
      reporter.io.writeln('');
      reporter.erase(attribute.removed);
    }
  
    void reportEachWithAdded(String attributeName, DiffNode attribute) {
      if (!attribute.hasAdded)
        return;
  
  
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;
  
  