diff options
Diffstat (limited to 'rubocop/cop/performance/readlines_each.rb')
-rw-r--r-- | rubocop/cop/performance/readlines_each.rb | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/rubocop/cop/performance/readlines_each.rb b/rubocop/cop/performance/readlines_each.rb index cb4ffaca6e9..7a3a15020db 100644 --- a/rubocop/cop/performance/readlines_each.rb +++ b/rubocop/cop/performance/readlines_each.rb @@ -3,7 +3,9 @@ module RuboCop module Cop module Performance - class ReadlinesEach < RuboCop::Cop::Cop + class ReadlinesEach < RuboCop::Cop::Base + extend RuboCop::Cop::AutoCorrector + MESSAGE = 'Avoid `IO.readlines.each`, since it reads contents into memory in full. ' \ 'Use `IO.each_line` or `IO.each` instead.' @@ -17,12 +19,9 @@ module RuboCop PATTERN def on_send(node) - full_file_read_via_class?(node) { add_offense(node, location: :selector, message: MESSAGE) } - full_file_read_via_instance?(node) { add_offense(node, location: :selector, message: MESSAGE) } - end + return unless full_file_read_via_class?(node) || full_file_read_via_instance?(node) - def autocorrect(node) - lambda do |corrector| + add_offense(node.loc.selector, message: MESSAGE) do |corrector| corrector.replace(node.loc.expression, node.source.gsub('readlines.each', 'each_line')) end end |