Module: RuboCop::SortedMethodsByCall::Compare
- Defined in:
- lib/rubocop/sorted_methods_by_call/compare.rb,
sig/rubocop/sorted_methods_by_call/compare.rbs
Overview
RuboCop::SortedMethodsByCall::Compare provides helpers to compare
definition orders and call orders using "ordered subsequence" semantics.
It’s used by the cop to check that called methods appear in the same
relative order as they are defined (not necessarily contiguously).
Class Method Summary collapse
-
.hashes_ordered_equal?(actual, expected) ⇒ Boolean
Check that each scope's call list is an ordered subsequence of its definition list.
-
.subsequence?(arr, sub) ⇒ Boolean
Check if
subappears as an ordered (not necessarily contiguous) subsequence ofarr.
Instance Method Summary collapse
Class Method Details
.hashes_ordered_equal?(actual, expected) ⇒ Boolean
Check that each scope's call list is an ordered subsequence of its definition list.
16 17 18 19 20 21 22 23 24 |
# File 'lib/rubocop/sorted_methods_by_call/compare.rb', line 16 def hashes_ordered_equal?(actual, expected) return false unless actual.is_a?(Hash) && expected.is_a?(Hash) (actual.keys | expected.keys).all? do |k| defs = Array(actual[k]) calls = Array(expected[k]) (calls - defs).empty? && subsequence?(defs, calls) end end |
.subsequence?(arr, sub) ⇒ Boolean
Check if sub appears as an ordered (not necessarily contiguous) subsequence of arr.
31 32 33 34 35 36 37 38 39 |
# File 'lib/rubocop/sorted_methods_by_call/compare.rb', line 31 def subsequence?(arr, sub) return true if sub.nil? || sub.empty? i = 0 sub.all? do |el| i += 1 while i < arr.length && arr[i] != el (i < arr.length).tap { i += 1 } end end |
Instance Method Details
#self?.hashes_ordered_equal? ⇒ Boolean
4 |
# File 'sig/rubocop/sorted_methods_by_call/compare.rbs', line 4
def self?.hashes_ordered_equal?: (Hash[untyped, Array[Symbol]] actual, Hash[untyped, Array[Symbol]] expected) -> bool
|
#self?.subsequence? ⇒ Boolean
5 |
# File 'sig/rubocop/sorted_methods_by_call/compare.rbs', line 5
def self?.subsequence?: (Array[Symbol] arr, Array[Symbol] sub) -> bool
|