Class: Canon::DiffFormatter::PrettyDiffFormatter

Inherits:
Object
  • Object
show all
Defined in:
lib/canon/diff_formatter/pretty_diff_formatter.rb

Overview

Handles the pretty_diff rendering pipeline for text-LCS diffs.

Bypasses DiffNodeMapper entirely — runs Diff::LCS.sdiff on plain-text lines and renders with context windowing and colorization.

Instance Method Summary collapse

Constructor Details

#initialize(use_color:, context_lines:) ⇒ PrettyDiffFormatter

Returns a new instance of PrettyDiffFormatter.



13
14
15
16
# File 'lib/canon/diff_formatter/pretty_diff_formatter.rb', line 13

def initialize(use_color:, context_lines:)
  @use_color = use_color
  @context_lines = context_lines
end

Instance Method Details

#format(doc1, doc2, format:) ⇒ String

Format a text-LCS diff between two documents.

Parameters:

  • doc1 (String, nil)

    First document (already preprocessed)

  • doc2 (String, nil)

    Second document (already preprocessed)

  • format (Symbol)

    Document format for display name

Returns:

  • (String)

    Formatted diff output



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/canon/diff_formatter/pretty_diff_formatter.rb', line 24

def format(doc1, doc2, format:)
  format_name = format.to_s.upcase

  output = []
  output << colorize("Pretty diff (#{format_name} mode):", :cyan, :bold)

  return output.join("\n") if doc1.nil? || doc2.nil?

  lines1 = doc1.lines.map(&:chomp)
  lines2 = doc2.lines.map(&:chomp)

  hunks = ::Diff::LCS.sdiff(lines1, lines2)

  output << render_pretty_diff(hunks)
  output.join("\n")
end