Class: RuboCop::Cop::Chef::ChefModernize::ResourceNameFromInitialize

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

Overview

The resource name can now be specified using the ‘resource_name` helper instead of using the @resource_name 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
resource_name :create

Examples:


# bad
def initialize(*args)
  super
  @resource_name = :foo
end

Constant Summary collapse

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

Instance Method Summary collapse

Instance Method Details

#autocorrect(node) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/rubocop/cop/chef/modernize/resource_name_initializer.rb', line 52

def autocorrect(node)
  lambda do |corrector|
    # insert the new resource_name call above the initialize method
    initialize_node = intialize_method(processed_source.ast).first
    corrector.insert_before(initialize_node.source_range, "resource_name #{node.descendants.first.source}\n\n")

    # 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/resource_name_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 == :@resource_name
      add_offense(x, location: :expression, message: MSG, severity: :refactor)
    end
  end
end