class RuboCop::Cop::Primer::DeprecatedArguments
Component.new(foo: :bar)
good
Component.new(foo: :deprecated)
bad
This cop ensures that components don’t use deprecated arguments
def autocorrect(node)
def autocorrect(node) lambda do |corrector| key, value = extract_kv_from(node) replacement = DEPRECATED[key][value] corrector.replace(node, replacement) if replacement.present? end end
def extract_kv_from(pair)
def extract_kv_from(pair) key = pair.key.value value = case pair.value.type when :sym, :str pair.value.value.to_sym when :false, :true pair.value.type == :true else return [] end [key, value] end
def on_send(node)
def on_send(node) return unless valid_node?(node) return unless node.arguments? # we are looking for hash arguments and they are always last kwargs = node.arguments.last return unless kwargs.type == :hash kwargs.pairs.each do |pair| # Skip if we're not dealing with a symbol key next if pair.key.type != :sym key, value = extract_kv_from(pair) next unless DEPRECATED.key?(key) && DEPRECATED[key].key?(value) add_offense(pair, message: INVALID_MESSAGE) end end