anchor.diff:    Map<int, List<AtomicEdit>> _createAddParenChanges(
         Map<int, List<AtomicEdit>> changes) {
       changes ??= {};
  -    (changes[sourceNode.offset] ??= []).insert(0, const AtomicEdit.insert('('));
  -    (changes[sourceNode.end] ??= []).add(const AtomicEdit.insert(')'));
  +    (changes[offset] ??= []).insert(0, const AtomicEdit.insert('('));
  +    (changes[end] ??= []).add(const AtomicEdit.insert(')'));
       return changes;
     }
   
  
positive.code:       }
      }
      changes += innerPlan._getChanges(parensNeeded);
      if (endsInCascade == null && innerPlan.sourceNode.end == node.end) {
        endsInCascade = !parensNeeded && innerPlan.endsInCascade;
      }
  
negative.code: 
    NodeProducingEditPlan._(this.sourceNode) : super._();
  
    /// Offset just past the end of the source text affected by this plan.
    int get end => sourceNode.end;
  
    /// If the result of executing this [EditPlan] will be an expression,
    /// indicates whether the expression will end in an unparenthesized cascade.
    @visibleForTesting
    bool get endsInCascade;
  
    /// Offset of the start of the source text affected by this plan.
    int get offset => sourceNode.offset;
  
    @override
    AstNode get parentNode => sourceNode.parent;
  