class RuboCop::Cop::Performance::FlatMap
This cop is used to identify usages of
@example
# bad [1, 2, 3, 4].map { |e| [e, e] }.flatten(1) [1, 2, 3, 4].collect { |e| [e, e] }.flatten(1) # good [1, 2, 3, 4].flat_map { |e| [e, e] } [1, 2, 3, 4].map { |e| [e, e] }.flatten [1, 2, 3, 4].collect { |e| [e, e] }.flatten
Constants
- FLATTEN
- FLATTEN_MULTIPLE_LEVELS
- MSG
Public Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubocop/cop/performance/flat_map.rb, line 46 def autocorrect(node) receiver, _flatten, flatten_param = *node flatten_level, = *flatten_param return if flatten_level.nil? array, = *receiver lambda do |corrector| range = Parser::Source::Range.new(node.source_range.source_buffer, node.loc.dot.begin_pos, node.source_range.end_pos) corrector.remove(range) corrector.replace(array.loc.selector, 'flat_map') end end
on_send(node)
click to toggle source
# File lib/rubocop/cop/performance/flat_map.rb, line 24 def on_send(node) left, second_method, flatten_param = *node return unless FLATTEN.include?(second_method) flatten_level, = *flatten_param expression, = *left _array, first_method = *expression return unless first_method == :map || first_method == :collect message = MSG if cop_config['EnabledForFlattenWithoutParams'] && flatten_level.nil? message = MSG + FLATTEN_MULTIPLE_LEVELS elsif flatten_level != 1 return end range = Parser::Source::Range.new(node.source_range.source_buffer, expression.loc.selector.begin_pos, node.loc.selector.end_pos) add_offense(node, range, format(message, first_method, second_method)) end