Class: RuboCop::Cop::Chef::ChefModernize::DefaultActionFromInitialize

Inherits:
RuboCop::Cop
  • Object
show all
Includes:
RangeHelp
Defined in:
lib/rubocop/cop/chef/modernize/default_action_initializer.rb

Overview

The default actions can now be specified using the ‘default_action` helper instead of using the @action variable in the resource provider initialize method. In general we recommend against writing HWRPs, but if HWRPs are necessary you should utilize as much of the resource DSL as possible.

# good
default_action :create

Examples:


# bad
def initialize(*args)
  super
  @action = :create
end

Constant Summary collapse

MSG =
'The default action of a resource can be set with the "default_action" helper instead of using the initialize method.'.freeze

Instance Method Summary collapse

Instance Method Details

#autocorrect(node) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/rubocop/cop/chef/modernize/default_action_initializer.rb', line 54

def autocorrect(node)
  lambda do |corrector|
    # insert the new default_action call above the initialize method, but not if one already exists (this is sadly common)
    unless default_action_method?(processed_source.ast)
      initialize_node = intialize_method(processed_source.ast).first
      corrector.insert_before(initialize_node.source_range, "default_action #{node.descendants.first.source}\n\n")
    end

    # remove the variable from the initialize method
    corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
  end
end

#on_def(node) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/rubocop/cop/chef/modernize/default_action_initializer.rb', line 39

def on_def(node)
  return unless node.method_name == :initialize
  return if node.body.nil? # nil body is an empty initialize method

  node.body.each_node do |x|
    if x.assignment? && !x.node_parts.empty? && x.node_parts.first == :@action
      add_offense(x, location: :expression, message: MSG, severity: :refactor)
    end
  end
end