applyDiff function

String applyDiff(
  1. String content,
  2. String diff
)

Apply a unified diff to file content.

Implementation

String applyDiff(String content, String diff) {
  final hunks = parseUnifiedDiff(diff);
  if (hunks.isEmpty) return content;

  final originalLines = content.split('\n');
  final result = <String>[];
  var srcLine = 0; // 0-based index into originalLines

  for (final hunk in hunks) {
    final hunkStart = hunk.oldStart - 1; // Convert to 0-based

    // Copy lines before this hunk
    while (srcLine < hunkStart && srcLine < originalLines.length) {
      result.add(originalLines[srcLine]);
      srcLine++;
    }

    // Apply hunk
    for (final line in hunk.lines) {
      switch (line.type) {
        case DiffLineType.context:
          // Advance source, copy to result
          if (srcLine < originalLines.length) {
            result.add(originalLines[srcLine]);
            srcLine++;
          }
          break;
        case DiffLineType.remove:
          // Skip source line
          srcLine++;
          break;
        case DiffLineType.add:
          // Add new line to result
          result.add(line.content);
          break;
      }
    }
  }

  // Copy remaining lines
  while (srcLine < originalLines.length) {
    result.add(originalLines[srcLine]);
    srcLine++;
  }

  return result.join('\n');
}