super_diff 0.12.1 → 0.15.0

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.
Files changed (272) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -19
  3. data/lib/super_diff/active_record/differs/active_record_relation.rb +2 -0
  4. data/lib/super_diff/active_record/differs.rb +3 -1
  5. data/lib/super_diff/active_record/inspection_tree_builders/active_record_model.rb +7 -5
  6. data/lib/super_diff/active_record/inspection_tree_builders/active_record_relation.rb +12 -10
  7. data/lib/super_diff/active_record/inspection_tree_builders.rb +4 -2
  8. data/lib/super_diff/active_record/monkey_patches.rb +4 -2
  9. data/lib/super_diff/active_record/object_inspection.rb +6 -4
  10. data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +3 -1
  11. data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +3 -1
  12. data/lib/super_diff/active_record/operation_tree_builders.rb +4 -2
  13. data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +4 -2
  14. data/lib/super_diff/active_record/operation_tree_flatteners.rb +3 -1
  15. data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +2 -0
  16. data/lib/super_diff/active_record/operation_trees.rb +3 -1
  17. data/lib/super_diff/active_record.rb +10 -8
  18. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +2 -0
  19. data/lib/super_diff/active_support/differs.rb +3 -1
  20. data/lib/super_diff/active_support/inspection_tree_builders/hash_with_indifferent_access.rb +16 -14
  21. data/lib/super_diff/active_support/inspection_tree_builders/ordered_options.rb +16 -14
  22. data/lib/super_diff/active_support/inspection_tree_builders.rb +4 -2
  23. data/lib/super_diff/active_support/object_inspection.rb +6 -4
  24. data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +6 -4
  25. data/lib/super_diff/active_support/operation_tree_builders.rb +3 -1
  26. data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +4 -2
  27. data/lib/super_diff/active_support/operation_tree_flatteners.rb +3 -1
  28. data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +2 -0
  29. data/lib/super_diff/active_support/operation_trees.rb +3 -1
  30. data/lib/super_diff/active_support.rb +8 -6
  31. data/lib/super_diff/basic/diff_formatters/collection.rb +18 -18
  32. data/lib/super_diff/basic/diff_formatters/multiline_string.rb +2 -0
  33. data/lib/super_diff/basic/diff_formatters.rb +4 -2
  34. data/lib/super_diff/basic/differs/array.rb +2 -0
  35. data/lib/super_diff/basic/differs/custom_object.rb +3 -1
  36. data/lib/super_diff/basic/differs/date_like.rb +2 -0
  37. data/lib/super_diff/basic/differs/default_object.rb +3 -1
  38. data/lib/super_diff/basic/differs/hash.rb +2 -0
  39. data/lib/super_diff/basic/differs/multiline_string.rb +2 -0
  40. data/lib/super_diff/basic/differs/time_like.rb +2 -0
  41. data/lib/super_diff/basic/differs.rb +11 -9
  42. data/lib/super_diff/basic/inspection_tree_builders/array.rb +5 -3
  43. data/lib/super_diff/basic/inspection_tree_builders/custom_object.rb +5 -3
  44. data/lib/super_diff/basic/inspection_tree_builders/data_object.rb +42 -0
  45. data/lib/super_diff/basic/inspection_tree_builders/date_like.rb +7 -5
  46. data/lib/super_diff/basic/inspection_tree_builders/default_object.rb +7 -5
  47. data/lib/super_diff/basic/inspection_tree_builders/hash.rb +7 -5
  48. data/lib/super_diff/basic/inspection_tree_builders/primitive.rb +3 -1
  49. data/lib/super_diff/basic/inspection_tree_builders/range_object.rb +19 -0
  50. data/lib/super_diff/basic/inspection_tree_builders/time_like.rb +8 -8
  51. data/lib/super_diff/basic/inspection_tree_builders.rb +18 -8
  52. data/lib/super_diff/basic/operation_tree_builders/array.rb +6 -4
  53. data/lib/super_diff/basic/operation_tree_builders/custom_object.rb +3 -1
  54. data/lib/super_diff/basic/operation_tree_builders/data_object.rb +20 -0
  55. data/lib/super_diff/basic/operation_tree_builders/date_like.rb +2 -0
  56. data/lib/super_diff/basic/operation_tree_builders/default_object.rb +32 -31
  57. data/lib/super_diff/basic/operation_tree_builders/hash.rb +49 -46
  58. data/lib/super_diff/basic/operation_tree_builders/multiline_string.rb +5 -3
  59. data/lib/super_diff/basic/operation_tree_builders/time_like.rb +5 -3
  60. data/lib/super_diff/basic/operation_tree_builders.rb +15 -9
  61. data/lib/super_diff/basic/operation_tree_flatteners/array.rb +4 -2
  62. data/lib/super_diff/basic/operation_tree_flatteners/collection.rb +11 -11
  63. data/lib/super_diff/basic/operation_tree_flatteners/custom_object.rb +5 -3
  64. data/lib/super_diff/basic/operation_tree_flatteners/default_object.rb +6 -5
  65. data/lib/super_diff/basic/operation_tree_flatteners/hash.rb +5 -3
  66. data/lib/super_diff/basic/operation_tree_flatteners/multiline_string.rb +3 -1
  67. data/lib/super_diff/basic/operation_tree_flatteners.rb +8 -6
  68. data/lib/super_diff/basic/operation_trees/array.rb +2 -0
  69. data/lib/super_diff/basic/operation_trees/custom_object.rb +2 -0
  70. data/lib/super_diff/basic/operation_trees/default_object.rb +6 -4
  71. data/lib/super_diff/basic/operation_trees/hash.rb +2 -0
  72. data/lib/super_diff/basic/operation_trees/multiline_string.rb +3 -1
  73. data/lib/super_diff/basic/operation_trees.rb +9 -7
  74. data/lib/super_diff/basic.rb +12 -7
  75. data/lib/super_diff/core/abstract_differ.rb +2 -0
  76. data/lib/super_diff/core/abstract_inspection_tree_builder.rb +2 -0
  77. data/lib/super_diff/core/abstract_operation_tree.rb +4 -2
  78. data/lib/super_diff/core/abstract_operation_tree_builder.rb +15 -18
  79. data/lib/super_diff/core/abstract_operation_tree_flattener.rb +5 -3
  80. data/lib/super_diff/core/binary_operation.rb +3 -1
  81. data/lib/super_diff/core/colorized_document_extensions.rb +2 -0
  82. data/lib/super_diff/core/configuration.rb +23 -43
  83. data/lib/super_diff/core/differ_dispatcher.rb +4 -2
  84. data/lib/super_diff/core/gem_version.rb +2 -0
  85. data/lib/super_diff/core/helpers.rb +14 -12
  86. data/lib/super_diff/core/implementation_checks.rb +6 -2
  87. data/lib/super_diff/core/inspection_tree.rb +38 -38
  88. data/lib/super_diff/core/inspection_tree_builder_dispatcher.rb +5 -5
  89. data/lib/super_diff/core/inspection_tree_nodes/as_lines_when_rendering_to_lines.rb +3 -1
  90. data/lib/super_diff/core/inspection_tree_nodes/as_prefix_when_rendering_to_lines.rb +2 -0
  91. data/lib/super_diff/core/inspection_tree_nodes/as_prelude_when_rendering_to_lines.rb +2 -0
  92. data/lib/super_diff/core/inspection_tree_nodes/as_single_line.rb +2 -0
  93. data/lib/super_diff/core/inspection_tree_nodes/base.rb +9 -9
  94. data/lib/super_diff/core/inspection_tree_nodes/inspection.rb +2 -0
  95. data/lib/super_diff/core/inspection_tree_nodes/nesting.rb +2 -0
  96. data/lib/super_diff/core/inspection_tree_nodes/only_when.rb +5 -1
  97. data/lib/super_diff/core/inspection_tree_nodes/text.rb +2 -0
  98. data/lib/super_diff/core/inspection_tree_nodes/when_empty.rb +3 -1
  99. data/lib/super_diff/core/inspection_tree_nodes/when_non_empty.rb +3 -1
  100. data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_lines.rb +3 -1
  101. data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_string.rb +2 -0
  102. data/lib/super_diff/core/inspection_tree_nodes.rb +16 -14
  103. data/lib/super_diff/core/line.rb +9 -7
  104. data/lib/super_diff/core/no_differ_available_error.rb +7 -5
  105. data/lib/super_diff/core/no_inspection_tree_builder_available_error.rb +5 -3
  106. data/lib/super_diff/core/no_operation_tree_available_error.rb +4 -2
  107. data/lib/super_diff/core/no_operation_tree_builder_available_error.rb +7 -5
  108. data/lib/super_diff/core/operation_tree_builder_dispatcher.rb +3 -3
  109. data/lib/super_diff/core/operation_tree_finder.rb +8 -8
  110. data/lib/super_diff/core/prefix_for_next_inspection_tree_node.rb +2 -0
  111. data/lib/super_diff/core/prelude_for_next_inspection_tree_node.rb +2 -0
  112. data/lib/super_diff/core/recursion_guard.rb +6 -4
  113. data/lib/super_diff/core/tiered_lines.rb +2 -0
  114. data/lib/super_diff/core/tiered_lines_elider.rb +53 -54
  115. data/lib/super_diff/core/tiered_lines_formatter.rb +6 -4
  116. data/lib/super_diff/core/unary_operation.rb +2 -0
  117. data/lib/super_diff/core.rb +31 -29
  118. data/lib/super_diff/csi/bold_sequence.rb +2 -0
  119. data/lib/super_diff/csi/color.rb +4 -4
  120. data/lib/super_diff/csi/color_sequence_block.rb +3 -1
  121. data/lib/super_diff/csi/colorized_document.rb +7 -9
  122. data/lib/super_diff/csi/document.rb +15 -18
  123. data/lib/super_diff/csi/eight_bit_color.rb +32 -37
  124. data/lib/super_diff/csi/four_bit_color.rb +12 -9
  125. data/lib/super_diff/csi/reset_sequence.rb +2 -0
  126. data/lib/super_diff/csi/twenty_four_bit_color.rb +22 -21
  127. data/lib/super_diff/csi/uncolorized_document.rb +2 -0
  128. data/lib/super_diff/csi.rb +12 -42
  129. data/lib/super_diff/differs.rb +6 -4
  130. data/lib/super_diff/equality_matchers/array.rb +18 -16
  131. data/lib/super_diff/equality_matchers/base.rb +6 -4
  132. data/lib/super_diff/equality_matchers/default.rb +5 -3
  133. data/lib/super_diff/equality_matchers/defaults.rb +3 -1
  134. data/lib/super_diff/equality_matchers/hash.rb +18 -16
  135. data/lib/super_diff/equality_matchers/main.rb +3 -1
  136. data/lib/super_diff/equality_matchers/multiline_string.rb +18 -16
  137. data/lib/super_diff/equality_matchers/primitive.rb +15 -13
  138. data/lib/super_diff/equality_matchers/singleline_string.rb +16 -14
  139. data/lib/super_diff/equality_matchers.rb +11 -9
  140. data/lib/super_diff/errors.rb +4 -2
  141. data/lib/super_diff/object_inspection.rb +17 -15
  142. data/lib/super_diff/operation_tree_builders.rb +6 -4
  143. data/lib/super_diff/operation_tree_flatteners.rb +6 -4
  144. data/lib/super_diff/operation_trees.rb +6 -4
  145. data/lib/super_diff/operations.rb +4 -2
  146. data/lib/super_diff/rails.rb +4 -2
  147. data/lib/super_diff/rspec/augmented_matcher.rb +3 -1
  148. data/lib/super_diff/rspec/differ.rb +16 -7
  149. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +2 -0
  150. data/lib/super_diff/rspec/differs/collection_including.rb +2 -0
  151. data/lib/super_diff/rspec/differs/hash_including.rb +2 -0
  152. data/lib/super_diff/rspec/differs/object_having_attributes.rb +2 -0
  153. data/lib/super_diff/rspec/differs.rb +6 -4
  154. data/lib/super_diff/rspec/inspection_tree_builders/collection_containing_exactly.rb +12 -10
  155. data/lib/super_diff/rspec/inspection_tree_builders/collection_including.rb +10 -8
  156. data/lib/super_diff/rspec/inspection_tree_builders/double.rb +20 -18
  157. data/lib/super_diff/rspec/inspection_tree_builders/generic_describable_matcher.rb +2 -0
  158. data/lib/super_diff/rspec/inspection_tree_builders/hash_including.rb +10 -8
  159. data/lib/super_diff/rspec/inspection_tree_builders/instance_of.rb +2 -0
  160. data/lib/super_diff/rspec/inspection_tree_builders/kind_of.rb +2 -0
  161. data/lib/super_diff/rspec/inspection_tree_builders/object_having_attributes.rb +12 -10
  162. data/lib/super_diff/rspec/inspection_tree_builders/primitive.rb +2 -0
  163. data/lib/super_diff/rspec/inspection_tree_builders/value_within.rb +6 -4
  164. data/lib/super_diff/rspec/inspection_tree_builders.rb +12 -10
  165. data/lib/super_diff/rspec/matcher_text_builders/base.rb +12 -12
  166. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +19 -17
  167. data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +3 -1
  168. data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +7 -5
  169. data/lib/super_diff/rspec/matcher_text_builders/match.rb +6 -4
  170. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +5 -3
  171. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +20 -18
  172. data/lib/super_diff/rspec/matcher_text_builders.rb +9 -7
  173. data/lib/super_diff/rspec/matcher_text_template.rb +34 -39
  174. data/lib/super_diff/rspec/monkey_patches.rb +129 -56
  175. data/lib/super_diff/rspec/object_inspection.rb +7 -5
  176. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
  177. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +2 -0
  178. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +2 -0
  179. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -0
  180. data/lib/super_diff/rspec/operation_tree_builders.rb +6 -4
  181. data/lib/super_diff/rspec-rails.rb +4 -2
  182. data/lib/super_diff/rspec.rb +27 -14
  183. data/lib/super_diff/version.rb +3 -1
  184. data/lib/super_diff.rb +24 -27
  185. data/super_diff.gemspec +20 -18
  186. metadata +15 -182
  187. data/spec/examples.txt +0 -704
  188. data/spec/integration/rails/active_record_spec.rb +0 -21
  189. data/spec/integration/rails/active_support_spec.rb +0 -19
  190. data/spec/integration/rails/engines_spec.rb +0 -25
  191. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +0 -21
  192. data/spec/integration/rspec/be_falsey_matcher_spec.rb +0 -58
  193. data/spec/integration/rspec/be_matcher_spec.rb +0 -605
  194. data/spec/integration/rspec/be_nil_matcher_spec.rb +0 -57
  195. data/spec/integration/rspec/be_predicate_matcher_spec.rb +0 -615
  196. data/spec/integration/rspec/be_truthy_matcher_spec.rb +0 -62
  197. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +0 -377
  198. data/spec/integration/rspec/eq_matcher_spec.rb +0 -1066
  199. data/spec/integration/rspec/generic_describable_matchers_spec.rb +0 -177
  200. data/spec/integration/rspec/have_attributes_matcher_spec.rb +0 -443
  201. data/spec/integration/rspec/have_predicate_matcher_spec.rb +0 -478
  202. data/spec/integration/rspec/include_matcher_spec.rb +0 -452
  203. data/spec/integration/rspec/magic_metadata_spec.rb +0 -51
  204. data/spec/integration/rspec/match_array_matcher_spec.rb +0 -424
  205. data/spec/integration/rspec/match_matcher_spec.rb +0 -1359
  206. data/spec/integration/rspec/raise_error_matcher_spec.rb +0 -1488
  207. data/spec/integration/rspec/respond_to_matcher_spec.rb +0 -999
  208. data/spec/integration/rspec/third_party_matcher_spec.rb +0 -245
  209. data/spec/integration/rspec/unhandled_errors_spec.rb +0 -150
  210. data/spec/internal/log/test.log +0 -0
  211. data/spec/spec_helper.rb +0 -90
  212. data/spec/support/colorizer.rb +0 -9
  213. data/spec/support/command_runner.rb +0 -253
  214. data/spec/support/helpers.rb +0 -21
  215. data/spec/support/integration/helpers.rb +0 -124
  216. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  217. data/spec/support/integration/matchers.rb +0 -177
  218. data/spec/support/integration/test_programs/base.rb +0 -143
  219. data/spec/support/integration/test_programs/plain.rb +0 -19
  220. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  222. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  223. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  224. data/spec/support/models/a.rb +0 -11
  225. data/spec/support/models/active_record/person.rb +0 -28
  226. data/spec/support/models/active_record/query.rb +0 -15
  227. data/spec/support/models/active_record/shipping_address.rb +0 -24
  228. data/spec/support/models/customer.rb +0 -22
  229. data/spec/support/models/empty_class.rb +0 -6
  230. data/spec/support/models/item.rb +0 -10
  231. data/spec/support/models/order.rb +0 -9
  232. data/spec/support/models/person.rb +0 -20
  233. data/spec/support/models/player.rb +0 -30
  234. data/spec/support/models/shipping_address.rb +0 -25
  235. data/spec/support/shared_examples/active_record.rb +0 -428
  236. data/spec/support/shared_examples/active_support.rb +0 -188
  237. data/spec/support/shared_examples/elided_diffs.rb +0 -938
  238. data/spec/support/shared_examples/hash_with_indifferent_access.rb +0 -749
  239. data/spec/support/shared_examples/key.rb +0 -123
  240. data/spec/support/unit/helpers.rb +0 -24
  241. data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +0 -39
  242. data/spec/support/unit/matchers/match_output.rb +0 -40
  243. data/spec/unit/active_record/object_inspection_spec.rb +0 -289
  244. data/spec/unit/active_support/object_inspection_spec.rb +0 -170
  245. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  246. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  247. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  248. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  249. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  250. data/spec/unit/core/helpers_spec.rb +0 -68
  251. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  252. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  253. data/spec/unit/deprecations_spec.rb +0 -176
  254. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  255. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  256. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  257. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  258. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  259. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  260. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  261. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  262. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  263. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  264. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  265. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  266. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  267. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  268. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  269. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  270. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  271. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  272. data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class TieredLinesElider
@@ -27,7 +29,7 @@ module SuperDiff
27
29
  end
28
30
 
29
31
  def boxes_to_elide
30
- @_boxes_to_elide ||=
32
+ @boxes_to_elide ||=
31
33
  panes_to_consider_for_eliding.reduce([]) do |array, pane|
32
34
  array + (find_boxes_to_elide_within(pane) || [])
33
35
  end
@@ -38,12 +40,12 @@ module SuperDiff
38
40
  end
39
41
 
40
42
  def panes
41
- @_panes ||=
43
+ @panes ||=
42
44
  BuildPanes.call(dirty_panes: padded_dirty_panes, lines: lines)
43
45
  end
44
46
 
45
47
  def padded_dirty_panes
46
- @_padded_dirty_panes ||=
48
+ @padded_dirty_panes ||=
47
49
  combine_congruent_panes(
48
50
  dirty_panes
49
51
  .map(&:padded)
@@ -52,33 +54,33 @@ module SuperDiff
52
54
  end
53
55
 
54
56
  def dirty_panes
55
- @_dirty_panes ||=
57
+ @dirty_panes ||=
56
58
  lines
57
- .each_with_index
58
- .select { |line, index| line.type != :noop }
59
- .reduce([]) do |panes, (_, index)|
60
- if !panes.empty? && panes.last.range.end == index - 1
61
- panes[0..-2] + [panes[-1].extended_to(index)]
62
- else
63
- panes + [Pane.new(type: :dirty, range: index..index)]
64
- end
59
+ .each_with_index
60
+ .reject { |line, _index| line.type == :noop }
61
+ .reduce([]) do |panes, (_, index)|
62
+ if !panes.empty? && panes.last.range.end == index - 1
63
+ panes[0..-2] + [panes[-1].extended_to(index)]
64
+ else
65
+ panes + [Pane.new(type: :dirty, range: index..index)]
65
66
  end
67
+ end
66
68
  end
67
69
 
68
70
  def with_box_elided(box, lines)
69
71
  box_at_start_of_lines =
70
- if lines.first.complete_bookend?
71
- box.range.begin == 1
72
- else
73
- box.range.begin == 0
74
- end
72
+ box.range.begin == if lines.first.complete_bookend?
73
+ 1
74
+ else
75
+ 0
76
+ end
75
77
 
76
78
  box_at_end_of_lines =
77
- if lines.last.complete_bookend?
78
- box.range.end == lines.size - 2
79
- else
80
- box.range.end == lines.size - 1
81
- end
79
+ box.range.end == if lines.last.complete_bookend?
80
+ lines.size - 2
81
+ else
82
+ lines.size - 1
83
+ end
82
84
 
83
85
  if one_dimensional_line_tree? && outermost_box?(box)
84
86
  if box_at_start_of_lines
@@ -108,7 +110,7 @@ module SuperDiff
108
110
  def all_indentation_levels
109
111
  lines
110
112
  .map(&:indentation_level)
111
- .select { |indentation_level| indentation_level > 0 }
113
+ .select(&:positive?)
112
114
  .uniq
113
115
  end
114
116
 
@@ -120,11 +122,11 @@ module SuperDiff
120
122
  lines[pane.range].reject(&:complete_bookend?).size
121
123
 
122
124
  if total_size_before_eliding > maximum
123
- if maximum > 0
125
+ if maximum.positive?
124
126
  set_of_boxes.find do |boxes|
125
127
  total_size_after_eliding =
126
128
  total_size_before_eliding -
127
- boxes.sum { |box| box.range.size - SIZE_OF_ELISION }
129
+ boxes.sum { |box| box.range.size - SIZE_OF_ELISION }
128
130
  total_size_after_eliding <= maximum
129
131
  end
130
132
  else
@@ -146,11 +148,11 @@ module SuperDiff
146
148
 
147
149
  possible_indentation_levels =
148
150
  boxes_within_pane
149
- .map(&:indentation_level)
150
- .select { |indentation_level| indentation_level > 0 }
151
- .uniq
152
- .sort
153
- .reverse
151
+ .map(&:indentation_level)
152
+ .select(&:positive?)
153
+ .uniq
154
+ .sort
155
+ .reverse
154
156
 
155
157
  possible_indentation_levels.map do |indentation_level|
156
158
  boxes_within_pane.select do |box|
@@ -183,13 +185,12 @@ module SuperDiff
183
185
  def combine(spannables, on:)
184
186
  criterion = on
185
187
  spannables.reduce([]) do |combined_spannables, spannable|
186
- if (
187
- !combined_spannables.empty? &&
188
- spannable.range.begin <=
189
- combined_spannables.last.range.end + 1 &&
190
- spannable.public_send(criterion) ==
191
- combined_spannables.last.public_send(criterion)
192
- )
188
+ if !combined_spannables.empty? &&
189
+ spannable.range.begin <=
190
+ combined_spannables.last.range.end + 1 &&
191
+ spannable.public_send(criterion) ==
192
+ combined_spannables.last.public_send(criterion)
193
+
193
194
  combined_spannables[0..-2] +
194
195
  [combined_spannables[-1].extended_to(spannable.range.end)]
195
196
  else
@@ -199,12 +200,12 @@ module SuperDiff
199
200
  end
200
201
 
201
202
  def boxes
202
- @_boxes ||= BuildBoxes.call(lines)
203
+ @boxes ||= BuildBoxes.call(lines)
203
204
  end
204
205
 
205
206
  def with_start_of_box_elided(box, lines)
206
207
  amount_to_elide =
207
- if maximum > 0
208
+ if maximum.positive?
208
209
  box.range.size - maximum + SIZE_OF_ELISION
209
210
  else
210
211
  box.range.size
@@ -220,14 +221,14 @@ module SuperDiff
220
221
 
221
222
  def with_end_of_box_elided(box, lines)
222
223
  amount_to_elide =
223
- if maximum > 0
224
+ if maximum.positive?
224
225
  box.range.size - maximum + SIZE_OF_ELISION
225
226
  else
226
227
  box.range.size
227
228
  end
228
229
 
229
230
  range =
230
- if amount_to_elide > 0
231
+ if amount_to_elide.positive?
231
232
  Range.new(box.range.end - amount_to_elide + 1, box.range.end)
232
233
  else
233
234
  box.range
@@ -242,15 +243,14 @@ module SuperDiff
242
243
 
243
244
  def with_middle_of_box_elided(box, lines)
244
245
  half_of_maximum, remainder =
245
- if maximum > 0
246
+ if maximum.positive?
246
247
  (maximum - SIZE_OF_ELISION).divmod(2)
247
248
  else
248
249
  [0, 0]
249
250
  end
250
251
 
251
- opening_length, closing_length =
252
- half_of_maximum,
253
- half_of_maximum + remainder
252
+ opening_length = half_of_maximum
253
+ closing_length = half_of_maximum + remainder
254
254
 
255
255
  with_subset_of_lines_elided(
256
256
  lines,
@@ -290,7 +290,7 @@ module SuperDiff
290
290
  private
291
291
 
292
292
  def beginning
293
- if (dirty_panes.empty? || dirty_panes.first.range.begin == 0)
293
+ if dirty_panes.empty? || dirty_panes.first.range.begin.zero?
294
294
  []
295
295
  else
296
296
  [
@@ -324,10 +324,9 @@ module SuperDiff
324
324
  end
325
325
 
326
326
  def ending
327
- if (
328
- dirty_panes.empty? ||
329
- dirty_panes.last.range.end >= lines.size - 1
330
- )
327
+ if dirty_panes.empty? ||
328
+ dirty_panes.last.range.end >= lines.size - 1
329
+
331
330
  []
332
331
  else
333
332
  [
@@ -354,8 +353,8 @@ module SuperDiff
354
353
  end
355
354
 
356
355
  def capped_to(beginning, ending)
357
- new_beginning = range.begin < beginning ? beginning : range.begin
358
- new_ending = range.end > ending ? ending : range.end
356
+ new_beginning = [range.begin, beginning].max
357
+ new_ending = [range.end, ending].min
359
358
  self.class.new(
360
359
  type: type,
361
360
  range: Range.new(new_beginning, new_ending)
@@ -452,11 +451,11 @@ module SuperDiff
452
451
  end
453
452
 
454
453
  def prefix
455
- ""
454
+ ''
456
455
  end
457
456
 
458
457
  def value
459
- "# ..."
458
+ '# ...'
460
459
  end
461
460
 
462
461
  def elided?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class TieredLinesFormatter
@@ -29,8 +31,8 @@ module SuperDiff
29
31
  class FormattableLine
30
32
  extend AttrExtras.mixin
31
33
 
32
- INDENTATION_UNIT = " ".freeze
33
- ICONS = { delete: "-", insert: "+", elision: " ", noop: " " }.freeze
34
+ INDENTATION_UNIT = ' '
35
+ ICONS = { delete: '-', insert: '+', elision: ' ', noop: ' ' }.freeze
34
36
  COLORS = {
35
37
  delete: :expected,
36
38
  insert: :actual,
@@ -41,7 +43,7 @@ module SuperDiff
41
43
  pattr_initialize :line
42
44
 
43
45
  def content
44
- icon + " " + indentation + line.prefix + line.value + possible_comma
46
+ "#{icon} #{indentation}#{line.prefix}#{line.value}#{possible_comma}"
45
47
  end
46
48
 
47
49
  def color
@@ -69,7 +71,7 @@ module SuperDiff
69
71
  end
70
72
 
71
73
  def possible_comma
72
- line.add_comma? ? "," : ""
74
+ line.add_comma? ? ',' : ''
73
75
  end
74
76
  end
75
77
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class UnaryOperation
@@ -1,69 +1,71 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
- autoload :AbstractDiffer, "super_diff/core/abstract_differ"
5
+ autoload :AbstractDiffer, 'super_diff/core/abstract_differ'
4
6
  autoload(
5
7
  :AbstractInspectionTreeBuilder,
6
- "super_diff/core/abstract_inspection_tree_builder"
8
+ 'super_diff/core/abstract_inspection_tree_builder'
7
9
  )
8
- autoload :AbstractOperationTree, "super_diff/core/abstract_operation_tree"
10
+ autoload :AbstractOperationTree, 'super_diff/core/abstract_operation_tree'
9
11
  autoload(
10
12
  :AbstractOperationTreeBuilder,
11
- "super_diff/core/abstract_operation_tree_builder"
13
+ 'super_diff/core/abstract_operation_tree_builder'
12
14
  )
13
15
  autoload(
14
16
  :AbstractOperationTreeFlattener,
15
- "super_diff/core/abstract_operation_tree_flattener"
17
+ 'super_diff/core/abstract_operation_tree_flattener'
16
18
  )
17
- autoload :BinaryOperation, "super_diff/core/binary_operation"
19
+ autoload :BinaryOperation, 'super_diff/core/binary_operation'
18
20
  autoload(
19
21
  :ColorizedDocumentExtensions,
20
- "super_diff/core/colorized_document_extensions"
22
+ 'super_diff/core/colorized_document_extensions'
21
23
  )
22
- autoload :Configuration, "super_diff/core/configuration"
23
- autoload :DifferDispatcher, "super_diff/core/differ_dispatcher"
24
- autoload :GemVersion, "super_diff/core/gem_version"
25
- autoload :Helpers, "super_diff/core/helpers"
26
- autoload :ImplementationChecks, "super_diff/core/implementation_checks"
27
- autoload :InspectionTree, "super_diff/core/inspection_tree"
24
+ autoload :Configuration, 'super_diff/core/configuration'
25
+ autoload :DifferDispatcher, 'super_diff/core/differ_dispatcher'
26
+ autoload :GemVersion, 'super_diff/core/gem_version'
27
+ autoload :Helpers, 'super_diff/core/helpers'
28
+ autoload :ImplementationChecks, 'super_diff/core/implementation_checks'
29
+ autoload :InspectionTree, 'super_diff/core/inspection_tree'
28
30
  autoload(
29
31
  :InspectionTreeBuilderDispatcher,
30
- "super_diff/core/inspection_tree_builder_dispatcher"
32
+ 'super_diff/core/inspection_tree_builder_dispatcher'
31
33
  )
32
- autoload :InspectionTreeNodes, "super_diff/core/inspection_tree_nodes"
33
- autoload :Line, "super_diff/core/line"
34
+ autoload :InspectionTreeNodes, 'super_diff/core/inspection_tree_nodes'
35
+ autoload :Line, 'super_diff/core/line'
34
36
  autoload(
35
37
  :OperationTreeBuilderDispatcher,
36
- "super_diff/core/operation_tree_builder_dispatcher"
38
+ 'super_diff/core/operation_tree_builder_dispatcher'
37
39
  )
38
40
  autoload(
39
41
  :NoDifferAvailableError,
40
- "super_diff/core/no_differ_available_error"
42
+ 'super_diff/core/no_differ_available_error'
41
43
  )
42
44
  autoload(
43
45
  :NoInspectionTreeAvailableError,
44
- "super_diff/core/no_inspection_tree_builder_available_error"
46
+ 'super_diff/core/no_inspection_tree_builder_available_error'
45
47
  )
46
48
  autoload(
47
49
  :NoOperationTreeBuilderAvailableError,
48
- "super_diff/core/no_operation_tree_builder_available_error"
50
+ 'super_diff/core/no_operation_tree_builder_available_error'
49
51
  )
50
52
  autoload(
51
53
  :NoOperationTreeAvailableError,
52
- "super_diff/core/no_operation_tree_available_error"
54
+ 'super_diff/core/no_operation_tree_available_error'
53
55
  )
54
- autoload :OperationTreeFinder, "super_diff/core/operation_tree_finder"
56
+ autoload :OperationTreeFinder, 'super_diff/core/operation_tree_finder'
55
57
  autoload(
56
58
  :PrefixForNextInspectionTreeNode,
57
- "super_diff/core/prefix_for_next_inspection_tree_node"
59
+ 'super_diff/core/prefix_for_next_inspection_tree_node'
58
60
  )
59
61
  autoload(
60
62
  :PreludeForNextInspectionTreeNode,
61
- "super_diff/core/prelude_for_next_inspection_tree_node"
63
+ 'super_diff/core/prelude_for_next_inspection_tree_node'
62
64
  )
63
- autoload :RecursionGuard, "super_diff/core/recursion_guard"
64
- autoload :TieredLines, "super_diff/core/tiered_lines"
65
- autoload :TieredLinesElider, "super_diff/core/tiered_lines_elider"
66
- autoload :TieredLinesFormatter, "super_diff/core/tiered_lines_formatter"
67
- autoload :UnaryOperation, "super_diff/core/unary_operation"
65
+ autoload :RecursionGuard, 'super_diff/core/recursion_guard'
66
+ autoload :TieredLines, 'super_diff/core/tiered_lines'
67
+ autoload :TieredLinesElider, 'super_diff/core/tiered_lines_elider'
68
+ autoload :TieredLinesFormatter, 'super_diff/core/tiered_lines_formatter'
69
+ autoload :UnaryOperation, 'super_diff/core/unary_operation'
68
70
  end
69
71
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class BoldSequence
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class Color
@@ -51,10 +53,8 @@ module SuperDiff
51
53
  if %i[foreground background].include?(layer)
52
54
  layer
53
55
  else
54
- raise ArgumentError.new(
55
- "Invalid layer #{layer.inspect}. " +
56
- "Layer must be :foreground or :background."
57
- )
56
+ raise ArgumentError, "Invalid layer #{layer.inspect}. " \
57
+ 'Layer must be :foreground or :background.'
58
58
  end
59
59
  end
60
60
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class ColorSequenceBlock
@@ -14,7 +16,7 @@ module SuperDiff
14
16
  def push(color)
15
17
  colors.push(color)
16
18
  end
17
- alias_method :<<, :push
19
+ alias << push
18
20
 
19
21
  def to_s
20
22
  colors.map(&:to_s).join
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class ColorizedDocument < Document
@@ -19,9 +21,9 @@ module SuperDiff
19
21
  add_part(Csi.reset_sequence)
20
22
 
21
23
  color_sequence_to_reopen = color_sequences_open_in_parent.pop
22
- if color_sequences_open_in_parent.any?
23
- add_part(color_sequence_to_reopen)
24
- end
24
+ return unless color_sequences_open_in_parent.any?
25
+
26
+ add_part(color_sequence_to_reopen)
25
27
  end
26
28
 
27
29
  def colorize_inline(contents, colors, opts)
@@ -54,13 +56,9 @@ module SuperDiff
54
56
  ColorSequenceBlock
55
57
  .new(colors)
56
58
  .tap do |sequence|
57
- if opts[:fg]
58
- sequence << Color.resolve(opts[:fg], layer: :foreground)
59
- end
59
+ sequence << Color.resolve(opts[:fg], layer: :foreground) if opts[:fg]
60
60
 
61
- if opts[:bg]
62
- sequence << Color.resolve(opts[:bg], layer: :background)
63
- end
61
+ sequence << Color.resolve(opts[:bg], layer: :background) if opts[:bg]
64
62
  end
65
63
  end
66
64
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class Document
@@ -14,8 +16,8 @@ module SuperDiff
14
16
  parts.each(&block)
15
17
  end
16
18
 
17
- def bold(*args, **opts, &block)
18
- colorize(BoldSequence.new, *args, **opts, &block)
19
+ def bold(...)
20
+ colorize(BoldSequence.new, ...)
19
21
  end
20
22
 
21
23
  def colorize(*args, **opts, &block)
@@ -23,11 +25,10 @@ module SuperDiff
23
25
  args.partition { |arg| arg.is_a?(String) || arg.is_a?(self.class) }
24
26
 
25
27
  if colors[0].is_a?(Symbol)
26
- if colors[0] == :colorize
27
- raise ArgumentError, "#colorize can't call itself!"
28
- else
29
- public_send(colors[0], *contents, *colors[1..-1], **opts, &block)
30
- end
28
+ raise ArgumentError, "#colorize can't call itself!" if colors[0] == :colorize
29
+
30
+ public_send(colors[0], *contents, *colors[1..], **opts, &block)
31
+
31
32
  elsif !block && colors.empty? && opts.empty?
32
33
  text(*contents)
33
34
  elsif block
@@ -35,10 +36,10 @@ module SuperDiff
35
36
  elsif contents.any?
36
37
  colorize_inline(contents, colors, opts)
37
38
  else
38
- raise ArgumentError, "Must have something to colorize!"
39
+ raise ArgumentError, 'Must have something to colorize!'
39
40
  end
40
41
  end
41
- alias_method :colored, :colorize
42
+ alias colored colorize
42
43
 
43
44
  def text(*contents, **, &block)
44
45
  if block
@@ -46,10 +47,10 @@ module SuperDiff
46
47
  elsif contents.any?
47
48
  contents.each { |part| add_part(part) }
48
49
  else
49
- raise ArgumentError.new("Must have something to add to the document!")
50
+ raise ArgumentError, 'Must have something to add to the document!'
50
51
  end
51
52
  end
52
- alias_method :plain, :text
53
+ alias plain text
53
54
 
54
55
  def line(*contents, indent_by: 0, &block)
55
56
  indent(by: indent_by) do
@@ -60,9 +61,7 @@ module SuperDiff
60
61
  elsif contents.any?
61
62
  text(*contents)
62
63
  else
63
- raise ArgumentError.new(
64
- "Must have something to add to the document!"
65
- )
64
+ raise ArgumentError, 'Must have something to add to the document!'
66
65
  end
67
66
  end
68
67
 
@@ -75,7 +74,7 @@ module SuperDiff
75
74
 
76
75
  def indent(by:, &block)
77
76
  # TODO: This won't work if using `text` manually to add lines
78
- indentation_stack << (by.is_a?(String) ? by : " " * by)
77
+ indentation_stack << (by.is_a?(String) ? by : ' ' * by)
79
78
  evaluate_block(&block)
80
79
  indentation_stack.pop
81
80
  end
@@ -116,13 +115,11 @@ module SuperDiff
116
115
  end
117
116
  elsif Csi::Color.exists?(name.to_sym)
118
117
  ColorRequest.new(name: name.to_sym, line: false)
119
- else
120
- nil
121
118
  end
122
119
  end
123
120
 
124
121
  def evaluate_block(&block)
125
- if block.arity > 0
122
+ if block.arity.positive?
126
123
  block.call(self)
127
124
  else
128
125
  instance_eval(&block)