Class: RuboCop::Cop::Chef::Modernize::ResourceNameFromInitialize

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
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.

### correct
resource_name :create

Examples:


### incorrect
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.'

Instance Method Summary collapse

Methods inherited from Base

#target_chef_version

Instance Method Details

#on_def(node) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/rubocop/cop/chef/modernize/resource_name_initializer.rb', line 41

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

  node.body.each_node do |x|
    next unless x.assignment? && !x.node_parts.empty? && x.node_parts.first == :@resource_name

    add_offense(x, severity: :refactor) do |corrector|
      # insert the new resource_name call above the initialize method
      initialize_node = initialize_method(processed_source.ast).first
      corrector.insert_before(initialize_node.source_range, "resource_name #{x.descendants.first.source}\n\n")
      # remove the variable from the initialize method
      corrector.remove(range_with_surrounding_space(range: x.loc.expression, side: :left))
    end
  end
end