Module: RuboCop::Cop::HashSubset
- Extended by:
- Macros
- Includes:
- RangeHelp
- Included in:
- Style::HashExcept, Style::HashSlice
- Defined in:
- lib/rubocop/cop/mixin/hash_subset.rb
Overview
Common functionality for Style/HashExcept and Style/HashSlice cops. It registers an offense on methods with blocks that are equivalent to Hash#except or Hash#slice. rubocop:disable Metrics/ModuleLength
Constant Summary collapse
- RESTRICT_ON_SEND =
%i[reject select filter].freeze
- SUBSET_METHODS =
%i[== != eql? include?].freeze
- ACTIVE_SUPPORT_SUBSET_METHODS =
(SUBSET_METHODS + %i[in? exclude?]).freeze
- MSG =
'Use `%<prefer>s` instead.'
Constants included from RangeHelp
RangeHelp::BYTE_ORDER_MARK, RangeHelp::NOT_GIVEN
Instance Method Summary collapse
- #block_with_first_arg_check?(node) ⇒ Object
- #on_send(node) ⇒ Object (also: #on_csend)
Instance Method Details
permalink #block_with_first_arg_check?(node) ⇒ Object
[View source]
21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/rubocop/cop/mixin/hash_subset.rb', line 21 def_node_matcher :block_with_first_arg_check?, <<~PATTERN (block (call _ _) (args $(arg _key) $(arg _)) { $(send {(lvar _key) $_ _ | _ $_ (lvar _key)}) (send $(send {(lvar _key) $_ _ | _ $_ (lvar _key)}) :!) }) PATTERN |
permalink #on_send(node) ⇒ Object Also known as: on_csend
[View source]
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/rubocop/cop/mixin/hash_subset.rb', line 36 def on_send(node) offense_range, key_source = extract_offense(node) return unless offense_range return unless semantically_subset_method?(node) preferred_method = "#{preferred_method_name}(#{key_source})" add_offense(offense_range, message: format(MSG, prefer: preferred_method)) do |corrector| corrector.replace(offense_range, preferred_method) end end |