cookstyle 6.17.5 → 6.19.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -1
  3. data/bin/cookstyle +0 -1
  4. data/config/cookstyle.yml +85 -15
  5. data/config/disable_all.yml +8 -0
  6. data/config/upstream.yml +50 -3
  7. data/cookstyle.gemspec +1 -2
  8. data/lib/cookstyle.rb +5 -5
  9. data/lib/cookstyle/version.rb +2 -2
  10. data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +1 -1
  11. data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +2 -1
  12. data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +1 -1
  13. data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +24 -14
  14. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +1 -1
  15. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +2 -2
  16. data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +2 -1
  17. data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +1 -0
  18. data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +1 -1
  19. data/lib/rubocop/cop/chef/correctness/lazy_in_resource_guard.rb +67 -0
  20. data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +2 -2
  21. data/lib/rubocop/cop/chef/correctness/node_normal.rb +1 -0
  22. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +1 -0
  23. data/lib/rubocop/cop/chef/correctness/node_save.rb +1 -0
  24. data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +1 -1
  25. data/lib/rubocop/cop/chef/correctness/property_without_type.rb +59 -0
  26. data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +1 -1
  27. data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +1 -1
  28. data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +2 -2
  29. data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +1 -1
  30. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +2 -2
  31. data/lib/rubocop/cop/chef/deprecation/chef_shellout.rb +2 -2
  32. data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +2 -1
  33. data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +1 -1
  34. data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +1 -1
  35. data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +1 -1
  36. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +1 -3
  37. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +1 -0
  38. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +1 -1
  39. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +1 -1
  40. data/lib/rubocop/cop/chef/deprecation/execute_path_property.rb +1 -1
  41. data/lib/rubocop/cop/chef/deprecation/execute_relative_creates_without_cwd.rb +1 -1
  42. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +1 -1
  43. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +2 -2
  44. data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +2 -0
  45. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +22 -27
  46. data/lib/rubocop/cop/chef/deprecation/node_set.rb +1 -0
  47. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +1 -0
  48. data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +1 -0
  49. data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +1 -0
  50. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +2 -1
  51. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +2 -2
  52. data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +2 -2
  53. data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +2 -2
  54. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +1 -1
  55. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +1 -1
  56. data/lib/rubocop/cop/chef/deprecation/windows_package_installer_type_string.rb +1 -1
  57. data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +2 -2
  58. data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +5 -4
  59. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +1 -1
  60. data/lib/rubocop/cop/chef/effortless/chef_vault_used.rb +89 -0
  61. data/lib/rubocop/cop/chef/effortless/depends_chef_vault.rb +49 -0
  62. data/lib/rubocop/cop/chef/modernize/action_method_in_resource.rb +2 -2
  63. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +2 -2
  64. data/lib/rubocop/cop/chef/modernize/build_essential.rb +1 -1
  65. data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +1 -0
  66. data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +2 -2
  67. data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +1 -1
  68. data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +2 -1
  69. data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +1 -1
  70. data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +1 -1
  71. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +2 -2
  72. data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +1 -1
  73. data/lib/rubocop/cop/chef/modernize/node_init_package.rb +5 -4
  74. data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +2 -1
  75. data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +1 -1
  76. data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +1 -1
  77. data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +1 -1
  78. data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +1 -1
  79. data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +7 -4
  80. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +6 -6
  81. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +10 -10
  82. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +2 -2
  83. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +2 -1
  84. data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +1 -1
  85. data/lib/rubocop/cop/chef/modernize/sysctl_param_resource.rb +1 -1
  86. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +1 -1
  87. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +1 -1
  88. data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +1 -1
  89. data/lib/rubocop/cop/chef/redundant/double_compile_time.rb +2 -1
  90. data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +1 -1
  91. data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +1 -0
  92. data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +2 -1
  93. data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +1 -0
  94. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +1 -1
  95. data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +1 -1
  96. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +1 -1
  97. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +1 -1
  98. data/lib/rubocop/cop/chef/style/attribute_keys.rb +2 -1
  99. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +1 -1
  100. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +2 -2
  101. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +2 -2
  102. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +1 -1
  103. data/lib/rubocop/cop/chef/style/comments_format.rb +6 -13
  104. data/lib/rubocop/cop/chef/style/file_mode.rb +2 -2
  105. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +2 -2
  106. data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +2 -2
  107. data/lib/rubocop/cop/chef/style/negating_only_if.rb +2 -2
  108. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +2 -2
  109. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +2 -1
  110. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +2 -2
  111. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +5 -4
  112. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +2 -2
  113. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +7 -6
  114. metadata +8 -4
@@ -56,7 +56,7 @@ module RuboCop
56
56
  range = range_with_surrounding_comma(range_with_surrounding_space(range: con.loc.expression, side: :left), :both)
57
57
  corrector.remove(range)
58
58
  else
59
- corrector.replace(con.loc.expression, "'#{new_value}'")
59
+ corrector.replace(con, "'#{new_value}'")
60
60
  end
61
61
  end
62
62
  end
@@ -56,7 +56,7 @@ module RuboCop
56
56
  add_offense(plat, message: MSG, severity: :refactor) do |corrector|
57
57
  correct_string = corrected_platform_source(plat)
58
58
  next unless correct_string
59
- corrector.replace(plat.loc.expression, correct_string)
59
+ corrector.replace(plat, correct_string)
60
60
  end
61
61
  end
62
62
  end
@@ -68,7 +68,7 @@ module RuboCop
68
68
  add_offense(plat, message: MSG, severity: :refactor) do |corrector|
69
69
  correct_string = corrected_platform_source(plat)
70
70
  next unless correct_string
71
- corrector.replace(plat.loc.expression, correct_string)
71
+ corrector.replace(plat, correct_string)
72
72
  end
73
73
  end
74
74
  end
@@ -35,6 +35,7 @@ module RuboCop
35
35
  include ::RuboCop::Chef::PlatformHelpers
36
36
 
37
37
  MSG = 'Use valid platform values in case statements.'
38
+ RESTRICT_ON_SEND = [:[]].freeze
38
39
 
39
40
  def_node_matcher :node_platform?, <<-PATTERN
40
41
  (send (send nil? :node) :[] (str "platform") )
@@ -55,7 +56,7 @@ module RuboCop
55
56
  range = range_with_surrounding_comma(range_with_surrounding_space(range: con.loc.expression, side: :left), :both)
56
57
  corrector.remove(range)
57
58
  else
58
- corrector.replace(con.loc.expression, "'#{new_value}'")
59
+ corrector.replace(con, "'#{new_value}'")
59
60
  end
60
61
  end
61
62
  end
@@ -32,6 +32,7 @@ module RuboCop
32
32
  #
33
33
  class InvalidVersionMetadata < Base
34
34
  MSG = 'Cookbook metadata.rb version field should follow X.Y.Z version format.'
35
+ RESTRICT_ON_SEND = [:version].freeze
35
36
 
36
37
  def_node_matcher :version?, '(send nil? :version $str ...)'
37
38
 
@@ -43,7 +43,7 @@ module RuboCop
43
43
  def on_send(node)
44
44
  non_lazy_node_attribute_default?(node) do |default|
45
45
  add_offense(default, message: MSG, severity: :refactor) do |corrector|
46
- corrector.replace(default.loc.expression, "lazy { #{default.loc.expression.source} }")
46
+ corrector.replace(default, "lazy { #{default.source} }")
47
47
  end
48
48
  end
49
49
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright 2020, Chef Software Inc.
4
+ # Author:: Tim Smith (<tsmith@chef.io>)
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ module RuboCop
19
+ module Cop
20
+ module Chef
21
+ module ChefCorrectness
22
+ # Using `lazy {}` within a resource guard (not_if/only_if) will cause failures and is unnecessary as resource guards are always lazily evaluated.
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # template '/etc/foo' do
28
+ # mode '0644'
29
+ # source 'foo.erb'
30
+ # only_if { lazy { ::File.exist?('/etc/foo')} }
31
+ # end
32
+ #
33
+ # # good
34
+ # template '/etc/foo' do
35
+ # mode '0644'
36
+ # source 'foo.erb'
37
+ # only_if { ::File.exist?('/etc/foo') }
38
+ # end
39
+ #
40
+ class LazyInResourceGuard < Base
41
+ extend AutoCorrector
42
+
43
+ MSG = 'Using `lazy {}` within a resource guard (not_if/only_if) will cause failures and is unnecessary as resource guards are always lazily evaluated.'
44
+
45
+ def_node_matcher :lazy_in_guard?, <<-PATTERN
46
+ (block
47
+ (send nil? ${:not_if :only_if})
48
+ (args)
49
+ (block
50
+ (send nil? :lazy)
51
+ (args)
52
+ $(...)
53
+ ))
54
+ PATTERN
55
+
56
+ def on_block(node)
57
+ lazy_in_guard?(node) do |type, code|
58
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
59
+ corrector.replace(node, "#{type} { #{code.source} }")
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -54,9 +54,9 @@ module RuboCop
54
54
  match_property_in_resource?(:macos_userdefaults, 'type', node) do |type|
55
55
  type_val = method_arg_ast_to_string(type)
56
56
  return if VALID_VALUES.include?(type_val)
57
- add_offense(type.loc.expression, message: MSG, severity: :refactor) do |corrector|
57
+ add_offense(type, message: MSG, severity: :refactor) do |corrector|
58
58
  next unless INVALID_VALUE_MAP[type_val]
59
- corrector.replace(type.loc.expression, "type '#{INVALID_VALUE_MAP[type_val]}'")
59
+ corrector.replace(type, "type '#{INVALID_VALUE_MAP[type_val]}'")
60
60
  end
61
61
  end
62
62
  end
@@ -39,6 +39,7 @@ module RuboCop
39
39
  #
40
40
  class NodeNormal < Base
41
41
  MSG = 'Do not use node.normal. Replace with default/override/force_default/force_override attribute levels.'
42
+ RESTRICT_ON_SEND = [:normal].freeze
42
43
 
43
44
  def_node_matcher :node_normal?, <<-PATTERN
44
45
  (send (send _ :node) :normal)
@@ -39,6 +39,7 @@ module RuboCop
39
39
  #
40
40
  class NodeNormalUnless < Base
41
41
  MSG = 'Do not use node.normal_unless. Replace with default/override/force_default/force_override attribute levels.'
42
+ RESTRICT_ON_SEND = [:normal_unless].freeze
42
43
 
43
44
  def_node_matcher :node_normal_unless?, <<-PATTERN
44
45
  (send (send _ :node) :normal_unless)
@@ -30,6 +30,7 @@ module RuboCop
30
30
  #
31
31
  class CookbookUsesNodeSave < Base
32
32
  MSG = "Don't use node.save to save partial node data to the Chef Infra Server mid-run unless it's absolutely necessary. Node.save can result in failed Chef Infra runs appearing in search and increases load on the Chef Infra Server."
33
+ RESTRICT_ON_SEND = [:save].freeze
33
34
 
34
35
  def_node_matcher :node_save?, <<-PATTERN
35
36
  (send (send nil? :node) :save)
@@ -53,7 +53,7 @@ module RuboCop
53
53
  return unless notifies_property.node_parts[2].str_type?
54
54
 
55
55
  add_offense(notifies_property, message: MSG, severity: :refactor) do |corrector|
56
- corrector.replace(notifies_property.first_argument.loc.expression,
56
+ corrector.replace(notifies_property.first_argument,
57
57
  ":#{notifies_property.node_parts[2].value}")
58
58
  end
59
59
  end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright 2020, Chef Software Inc.
4
+ # Author:: Tim Smith (<tsmith@chef.io>)
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ module RuboCop
19
+ module Cop
20
+ module Chef
21
+ module ChefCorrectness
22
+ # Resource properties or attributes should always define a type to help users understand the correct allowed values.
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # property :size, regex: /^\d+[KMGTP]$/
28
+ # attribute :size, regex: /^\d+[KMGTP]$/
29
+ #
30
+ # # good
31
+ # property :size, String, regex: /^\d+[KMGTP]$/
32
+ # attribute :size, kind_of: String, regex: /^\d+[KMGTP]$/
33
+ #
34
+ class PropertyWithoutType < Base
35
+ MSG = 'Resource properties or attributes should always define a type to help users understand the correct allowed values.'
36
+ RESTRICT_ON_SEND = [:property, :attribute].freeze
37
+
38
+ def_node_matcher :property_without_type?, <<-PATTERN
39
+ (send nil? {:property :attribute}
40
+ (sym _)
41
+ $(hash
42
+
43
+ ...
44
+ )?
45
+ )
46
+ PATTERN
47
+
48
+ def on_send(node)
49
+ property_without_type?(node) do |hash_vals|
50
+ return if hash_vals&.first&.keys&.include?(s(:sym, :kind_of))
51
+
52
+ add_offense(node, message: MSG, severity: :refactor)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -45,7 +45,7 @@ module RuboCop
45
45
  action_node.arguments.each do |action|
46
46
  next unless action.source == ':none'
47
47
  add_offense(action, message: MSG, severity: :refactor) do |corrector|
48
- corrector.replace(action.loc.expression, ':nothing')
48
+ corrector.replace(action, ':nothing')
49
49
  end
50
50
  end
51
51
  end
@@ -41,7 +41,7 @@ module RuboCop
41
41
  def on_block(node)
42
42
  unscoped_file_exist?(node) do |m|
43
43
  add_offense(m, message: MSG, severity: :refactor) do |corrector|
44
- corrector.replace(m.loc.expression, '::File')
44
+ corrector.replace(m, '::File')
45
45
  end
46
46
  end
47
47
  end
@@ -41,8 +41,8 @@ module RuboCop
41
41
  def on_send(node)
42
42
  supports_with_constraint?(node) do |ver|
43
43
  return if ver.source.include?('.')
44
- add_offense(ver.loc.expression, message: MSG, severity: :refactor) do |corrector|
45
- corrector.replace(ver.loc.expression, ver.source.gsub(ver.value, (ver.value + '.0')))
44
+ add_offense(ver, message: MSG, severity: :refactor) do |corrector|
45
+ corrector.replace(ver, ver.source.gsub(ver.value, (ver.value + '.0')))
46
46
  end
47
47
  end
48
48
  end
@@ -45,7 +45,7 @@ module RuboCop
45
45
  add_offense(prop_node, message: MSG, severity: :warning) do |corrector|
46
46
  # make sure to delete leading and trailing {}s that would create invalid ruby syntax
47
47
  extracted_val = prop_node.arguments.first.source.gsub(/{|}/, '')
48
- corrector.replace(prop_node.loc.expression, "type #{extracted_val}")
48
+ corrector.replace(prop_node, "type #{extracted_val}")
49
49
  end
50
50
  end
51
51
  end
@@ -79,7 +79,7 @@ module RuboCop
79
79
 
80
80
  rewind_resources?(node) do |string|
81
81
  add_offense(node, message: MSG, severity: :warning) do |corrector|
82
- corrector.replace(node.loc.expression, node.source.gsub(string.to_s, MAPPING[string]))
82
+ corrector.replace(node, node.source.gsub(string.to_s, MAPPING[string]))
83
83
  end
84
84
  end
85
85
  end
@@ -88,7 +88,7 @@ module RuboCop
88
88
  match_property_in_resource?(:chef_gem, 'package_name', node) do |pkg_name|
89
89
  next unless pkg_name.arguments&.first&.str_content == 'chef-rewind'
90
90
  add_offense(node, message: MSG, severity: :warning) do |corrector|
91
- corrector.remove(node.loc.expression) if pkg_name.arguments&.first&.str_content == 'chef-rewind'
91
+ corrector.remove(node) if pkg_name.arguments&.first&.str_content == 'chef-rewind'
92
92
  end
93
93
  end
94
94
  end
@@ -41,7 +41,7 @@ module RuboCop
41
41
  extend AutoCorrector
42
42
 
43
43
  MSG = "Don't use deprecated Chef::ShellOut which was removed in Chef Infra Client 13. Use Mixlib::ShellOut instead, which behaves identically."
44
- # RESTRICT_ON_SEND = [:new, :require, :include].freeze
44
+ RESTRICT_ON_SEND = [:new, :require, :include].freeze
45
45
 
46
46
  def_node_matcher :include_shellout?, <<-PATTERN
47
47
  (send nil? :include
@@ -75,7 +75,7 @@ module RuboCop
75
75
 
76
76
  shellout_new?(node) do
77
77
  add_offense(node, message: MSG, severity: :warning) do |corrector|
78
- corrector.replace(node.loc.expression, node.source.gsub('Chef::ShellOut', 'Mixlib::ShellOut'))
78
+ corrector.replace(node, node.source.gsub('Chef::ShellOut', 'Mixlib::ShellOut'))
79
79
  end
80
80
  end
81
81
  end
@@ -33,6 +33,7 @@ module RuboCop
33
33
  class ChefWindowsPlatformHelper < Base
34
34
  extend AutoCorrector
35
35
  MSG = "Use `platform?('windows')` instead of the legacy `Chef::Platform.windows?` helper."
36
+ RESTRICT_ON_SEND = [:windows?].freeze
36
37
 
37
38
  def_node_matcher :chef_platform_windows?, <<-PATTERN
38
39
  (send
@@ -43,7 +44,7 @@ module RuboCop
43
44
  def on_send(node)
44
45
  chef_platform_windows?(node) do
45
46
  add_offense(node, message: MSG, severity: :warning) do |corrector|
46
- corrector.replace(node.loc.expression, "platform?('windows')")
47
+ corrector.replace(node, "platform?('windows')")
47
48
  end
48
49
  end
49
50
  end
@@ -47,7 +47,7 @@ module RuboCop
47
47
  return unless node.const_name == 'ChefDK' && (node.parent&.module_type? || node.parent&.const_type?)
48
48
 
49
49
  add_offense(node, message: MSG, severity: :warning) do |corrector|
50
- corrector.replace(node.loc.expression, node.source.gsub('ChefDK', 'ChefCLI'))
50
+ corrector.replace(node, node.source.gsub('ChefDK', 'ChefCLI'))
51
51
  end
52
52
  end
53
53
  end
@@ -39,7 +39,7 @@ module RuboCop
39
39
  def on_block(node)
40
40
  coverage_reporter?(node) do
41
41
  add_offense(node, message: MSG, severity: :warning) do |corrector|
42
- corrector.remove(node.loc.expression)
42
+ corrector.remove(node)
43
43
  end
44
44
  end
45
45
  end
@@ -51,7 +51,7 @@ module RuboCop
51
51
  def on_const(node)
52
52
  chefspec_runner?(node) do
53
53
  add_offense(node, message: MSG, severity: :warning) do |corrector|
54
- corrector.replace(node.loc.expression, 'ChefSpec::ServerRunner')
54
+ corrector.replace(node, 'ChefSpec::ServerRunner')
55
55
  end
56
56
  end
57
57
  end
@@ -32,8 +32,6 @@ module RuboCop
32
32
 
33
33
  MSG = "Use currently supported platforms in ChefSpec listed at https://github.com/chefspec/fauxhai/blob/master/PLATFORMS.md. Fauxhai / ChefSpec will perform fuzzy matching on platform version so it's always best to be less specific ie. 10 instead of 10.3"
34
34
 
35
- Gem::Dependency.new('', ['~> 1.4.5', '>= 1.4.6']).match?('', '1.4.6')
36
-
37
35
  DEPRECATED_MAPPING = {
38
36
  'amazon' => {
39
37
  '2017.12' => '2',
@@ -120,7 +118,7 @@ module RuboCop
120
118
  next unless legacy_chefspec_platform(plat.value, ver.value)
121
119
  add_offense(node, message: MSG, severity: :warning) do |corrector|
122
120
  if replacement = replacement_string(plat.value, ver.value) # rubocop: disable Lint/AssignmentInCondition
123
- corrector.replace(ver.loc.expression, "'#{replacement}'")
121
+ corrector.replace(ver, "'#{replacement}'")
124
122
  end
125
123
  end
126
124
  end
@@ -44,6 +44,7 @@ module RuboCop
44
44
 
45
45
  class DeprecatedPlatformMethods < Base
46
46
  MSG = 'Use provider_for_action or provides instead of the deprecated Chef::Platform methods in resources, which were removed in Chef Infra Client 13.'
47
+ RESTRICT_ON_SEND = [:provider_for_resource, :find_provider, :find_provider_for_node, :set].freeze
47
48
 
48
49
  def_node_matcher :platform_method?, <<-PATTERN
49
50
  (send (const (const nil? :Chef) :Platform) {:provider_for_resource :find_provider :find_provider_for_node :set} ... )
@@ -54,7 +54,7 @@ module RuboCop
54
54
  %w(url keyurl mirrorexpire).each do |prop|
55
55
  match_property_in_resource?(:yum_repository, prop, node) do |prop_node|
56
56
  add_offense(prop_node, message: MSG, severity: :warning) do |corrector|
57
- corrector.replace(prop_node.loc.expression, prop_node.loc.expression.source
57
+ corrector.replace(prop_node, prop_node.source
58
58
  .gsub(/^url/, 'baseurl')
59
59
  .gsub(/^keyurl/, 'gpgkey')
60
60
  .gsub(/^mirrorexpire/, 'mirror_expire'))
@@ -42,7 +42,7 @@ module RuboCop
42
42
 
43
43
  def on_send(node)
44
44
  add_offense(node, message: MSG, severity: :warning) do |corrector|
45
- corrector.replace(node.loc.expression, 'ignore_failure true')
45
+ corrector.replace(node, 'ignore_failure true')
46
46
  end
47
47
  end
48
48
  end
@@ -41,7 +41,7 @@ module RuboCop
41
41
 
42
42
  def on_block(node)
43
43
  match_property_in_resource?(:execute, 'path', node) do |offense|
44
- add_offense(offense.loc.expression, message: MSG, severity: :warning) # @todo: we could probably autocorrect this with some work
44
+ add_offense(offense, message: MSG, severity: :warning) # @todo: we could probably autocorrect this with some work
45
45
  end
46
46
  end
47
47
  end
@@ -57,7 +57,7 @@ module RuboCop
57
57
  return
58
58
  end
59
59
 
60
- add_offense(offense.loc.expression, message: MSG, severity: :warning)
60
+ add_offense(offense, message: MSG, severity: :warning)
61
61
  end
62
62
  end
63
63
  end
@@ -49,7 +49,7 @@ module RuboCop
49
49
  def on_class(node)
50
50
  inherits_from_compat_resource?(node) do
51
51
  add_offense(node, message: MSG, severity: :warning) do |corrector|
52
- corrector.replace(node.loc.expression, node.loc.expression.source.gsub('ChefCompat', 'Chef'))
52
+ corrector.replace(node, node.source.gsub('ChefCompat', 'Chef'))
53
53
  end
54
54
  end
55
55
  end
@@ -78,9 +78,9 @@ module RuboCop
78
78
  else
79
79
  "\"#{type.source}[\#{#{name.source}}]\""
80
80
  end
81
- new_val = "#{notify_type} #{action.source}, #{service_value}".dup
81
+ new_val = +"#{notify_type} #{action.source}, #{service_value}"
82
82
  new_val << ", #{timing.first.source}" unless timing.empty?
83
- corrector.replace(node.loc.expression, new_val)
83
+ corrector.replace(node, new_val)
84
84
  end
85
85
  end
86
86
  end