Class: RuboCop::Cop::Rails::ActiveSupportAliases

Inherits:
RuboCop::Cop
  • Object
show all
Defined in:
lib/rubocop/cop/rails/active_support_aliases.rb

Overview

This cop checks that ActiveSupport aliases to core ruby methods are not used.

Examples:

# good
'some_string'.start_with?('prefix')
'some_string'.end_with?('suffix')
[1, 2, 'a'] << 'b'
[1, 2, 'a'].unshift('b')

# bad
'some_string'.starts_with?('prefix')
'some_string'.ends_with?('suffix')
[1, 2, 'a'].append('b')
[1, 2, 'a'].prepend('b')

Constant Summary collapse

MSG =
'Use `%<prefer>s` instead of `%<current>s`.'
ALIASES =
{
  starts_with?: {
    original: :start_with?, matcher: '(send str :starts_with? _)'
  },
  ends_with?: {
    original: :end_with?, matcher: '(send str :ends_with? _)'
  },
  append: { original: :<<, matcher: '(send array :append _)' },
  prepend: { original: :unshift, matcher: '(send array :prepend _)' }
}.freeze

Instance Method Summary collapse

Instance Method Details

#autocorrect(node) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/rubocop/cop/rails/active_support_aliases.rb', line 47

def autocorrect(node)
  return false if append(node)

  lambda do |corrector|
    method_name = node.loc.selector.source
    replacement = ALIASES[method_name.to_sym][:original]
    corrector.replace(node.loc.selector, replacement.to_s)
  end
end

#on_send(node) ⇒ Object



40
41
42
43
44
45
# File 'lib/rubocop/cop/rails/active_support_aliases.rb', line 40

def on_send(node)
  ALIASES.each_key do |aliased_method|
    register_offense(node, aliased_method) if
      public_send(aliased_method, node)
  end
end