Sha256: d98395ae35a4efd397e0bf892bcf87ab5d7b0010d18f4403c97b48627d6ade7c
Contents?: true
Size: 1.71 KB
Versions: 2
Compression:
Stored size: 1.71 KB
Contents
# frozen_string_literal: true module RuboCop module Cop module Rails # This cop checks for the use of the read_attribute or # write_attribute methods. # # @example # # # bad # x = read_attribute(:attr) # write_attribute(:attr, val) # # # good # x = self[:attr] # self[:attr] = val class ReadWriteAttribute < Cop MSG = 'Prefer `%<prefer>s` over `%<current>s`.'.freeze def_node_matcher :read_write_attribute?, <<-PATTERN { (send nil? :read_attribute _) (send nil? :write_attribute _ _) } PATTERN def on_send(node) return unless read_write_attribute?(node) add_offense(node, location: :selector) end def autocorrect(node) case node.method_name when :read_attribute replacement = read_attribute_replacement(node) when :write_attribute replacement = write_attribute_replacement(node) end ->(corrector) { corrector.replace(node.source_range, replacement) } end private def message(node) if node.method?(:read_attribute) format(MSG, prefer: 'self[:attr]', current: 'read_attribute(:attr)') else format(MSG, prefer: 'self[:attr] = val', current: 'write_attribute(:attr, val)') end end def read_attribute_replacement(node) "self[#{node.first_argument.source}]" end def write_attribute_replacement(node) "self[#{node.first_argument.source}] = #{node.last_argument.source}" end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rubocop-0.54.0 | lib/rubocop/cop/rails/read_write_attribute.rb |
rubocop-0.53.0 | lib/rubocop/cop/rails/read_write_attribute.rb |