Class: RuboCop::Cop::Performance::MapCompact
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Performance::MapCompact
- Extended by:
- AutoCorrector, TargetRubyVersion
- Includes:
- RangeHelp
- Defined in:
- lib/rubocop/cop/performance/map_compact.rb
Overview
In Ruby 2.7, ‘Enumerable#filter_map` has been added.
This cop identifies places where ‘map { … }.compact` can be replaced by `filter_map`.
- source,ruby
- true, false, nil].compact #=> [true, false
- true, false, nil].filter_map(&:itself) #=> [true
Constant Summary collapse
- MSG =
'Use `filter_map` instead.'
- RESTRICT_ON_SEND =
%i[compact].freeze
Instance Method Summary collapse
- #on_send(node) ⇒ Object (also: #on_csend)
Instance Method Details
#on_send(node) ⇒ Object Also known as: on_csend
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/rubocop/cop/performance/map_compact.rb', line 54 def on_send(node) return unless (map_node = map_compact(node)) compact_loc = node.loc range = range_between(map_node.loc.selector.begin_pos, compact_loc.selector.end_pos) add_offense(range) do |corrector| corrector.replace(map_node.loc.selector, 'filter_map') remove_compact_method(corrector, map_node, node, node.parent) end end |