difftastic 0.1.1-arm64-linux → 0.1.2-arm64-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 51220f581cd069116b645fd13fccd4f7061b27ef7ad29d1a9f71d5939cb78fd1
4
- data.tar.gz: 3948486b9def959ef6bc47a3f8e1205cf16629086a218de7c9a078ac1638cc3e
3
+ metadata.gz: 3f8cbb936322c76af988d7bf714f2d8f31c51bad304ca669365e5aff37b8982c
4
+ data.tar.gz: 886a81849018435199ec93c5b35d7e703cdd47bac8836eab74736441b74ad858
5
5
  SHA512:
6
- metadata.gz: ccaac2dcaf974c68c2e8e05c1da6f9abc9b842932e2d7d6f6f7e900ac26dbb2479910fed23c99be913077f9ec993837a7760ddea37a50af4f544e792806fc177
7
- data.tar.gz: acb84a04ad8e6171ad329de7137f84e7e0204c29885223ecdb077cfc6f768d91221ef37e10dd0f50b2781dc0abe0c35c3979601af44d4fd8cb0b1493ae5b2ab0
6
+ metadata.gz: dac982dbb4b2fc13ad6c6e2c857735c9e9983c5eb187a16466bc855ff248b176b64afd1ff9b2187adec15f0005521193122afce7f47ea7a1970f37752bd676bf
7
+ data.tar.gz: ecb237465ed4aa8581c39ed41c264f9afbfa284417ebbafd4b58735481dbe2191f5b061c44f76b74f8b0fe545f15dc43fc0414e47e1e92217e70338c50b563bb
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Difftastic::ANSI
4
+ RED = "\e[91;1m"
5
+ GREEN = "\e[92;1m"
6
+ RESET = "\e[0m"
7
+
8
+ def self.green(string = "")
9
+ "#{GREEN}#{string}"
10
+ end
11
+
12
+ def self.red(string = "")
13
+ "#{RED}#{string}"
14
+ end
15
+
16
+ def self.reset(string = "")
17
+ "#{RESET}#{string}"
18
+ end
19
+
20
+ def self.strip_formatting(string)
21
+ string.to_s.gsub(/\e\[[0-9;]*m/, "")
22
+ end
23
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Difftastic::Differ
4
- def initialize(background: nil, color: nil, syntax_highlight: nil, context: nil, tab_width: nil, parse_error_limit: nil, underline_highlights: true)
4
+ def initialize(background: nil, color: nil, syntax_highlight: nil, context: nil, tab_width: nil, parse_error_limit: nil, underline_highlights: true, left_label: nil, right_label: nil)
5
5
  @show_paths = false
6
6
  @background = background => :dark | :light | nil
7
7
  @color = color => :always | :never | :auto | nil
@@ -10,6 +10,8 @@ class Difftastic::Differ
10
10
  @tab_width = tab_width => Integer | nil
11
11
  @parse_error_limit = parse_error_limit => Integer | nil
12
12
  @underline_highlights = underline_highlights => true | false
13
+ @left_label = left_label => String | nil
14
+ @right_label = right_label => String | nil
13
15
  end
14
16
 
15
17
  def diff_objects(old, new)
@@ -297,6 +299,30 @@ class Difftastic::Differ
297
299
  result = result.byteslice(new_line_index, result.bytesize - new_line_index)
298
300
  end
299
301
 
302
+ if @left_label || @right_label
303
+ # Get the first content line to calculate offset
304
+ offset_line = @show_paths ? 1 : 0
305
+ first_line = result.split("\n")[offset_line]
306
+
307
+ # Calculate padding needed between labels
308
+ offset = right_label_offset(first_line)
309
+
310
+ left_part = if @left_label
311
+ Difftastic::ANSI.red(@left_label.to_s.ljust(offset))
312
+ else
313
+ " " * offset
314
+ end
315
+
316
+ right_part = if @right_label
317
+ Difftastic::ANSI.green(@right_label.to_s)
318
+ else
319
+ ""
320
+ end
321
+
322
+ # Insert formatted labels at the top
323
+ result = "\n#{left_part}#{right_part}#{Difftastic::ANSI.reset}\n#{result}"
324
+ end
325
+
300
326
  # Removed due to inconsistencies in the original output. Need to improve the pattern matching.
301
327
  # if @underline_highlights
302
328
  # result.gsub!(/\e\[([0-9;]*)m/) {
@@ -311,4 +337,16 @@ class Difftastic::Differ
311
337
 
312
338
  result
313
339
  end
340
+
341
+ private
342
+
343
+ def right_label_offset(line)
344
+ stripped_line = ::Difftastic::ANSI.strip_formatting(line)
345
+ _lhs, rhs = stripped_line.split(/\s{#{@tab_width},}/, 2)
346
+
347
+ offset = (stripped_line.index("#{' ' * @tab_width}#{rhs}") || 0) + @tab_width
348
+ minimum_offset = 29
349
+
350
+ [minimum_offset, offset].max
351
+ end
314
352
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Difftastic
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  end
data/lib/difftastic.rb CHANGED
@@ -4,6 +4,7 @@ require "difftastic/version"
4
4
  require "tempfile"
5
5
 
6
6
  module Difftastic
7
+ autoload :ANSI, "difftastic/ansi"
7
8
  autoload :Differ, "difftastic/differ"
8
9
  autoload :Upstream, "difftastic/upstream"
9
10
 
@@ -39,7 +40,7 @@ module Difftastic
39
40
  MESSAGE
40
41
  end
41
42
 
42
- exe_file = Dir.glob(File.expand_path(File.join(exe_path, "*", "difft"))).find do |f|
43
+ exe_file = Dir.glob(File.expand_path(File.join(exe_path, "**", "difft"))).find do |f|
43
44
  Gem::Platform.match_gem?(Gem::Platform.new(File.basename(File.dirname(f))), GEM_NAME)
44
45
  end
45
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: difftastic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: arm64-linux
6
6
  authors:
7
7
  - Joel Drapper
@@ -22,6 +22,7 @@ files:
22
22
  - exe/arm64-linux/difft
23
23
  - exe/difft
24
24
  - lib/difftastic.rb
25
+ - lib/difftastic/ansi.rb
25
26
  - lib/difftastic/differ.rb
26
27
  - lib/difftastic/upstream.rb
27
28
  - lib/difftastic/version.rb