cookstyle 6.15.9 → 6.16.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (201) hide show
  1. checksums.yaml +4 -4
  2. data/config/cookstyle.yml +9 -8
  3. data/config/disable_all.yml +20 -0
  4. data/config/upstream.yml +79 -11
  5. data/lib/cookstyle/version.rb +2 -2
  6. data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +7 -9
  7. data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +5 -9
  8. data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +5 -9
  9. data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +5 -8
  10. data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +11 -9
  11. data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +2 -2
  12. data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +2 -2
  13. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +15 -21
  14. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +15 -23
  15. data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +2 -2
  16. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +12 -14
  17. data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +13 -22
  18. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +4 -3
  19. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +4 -3
  20. data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +3 -4
  21. data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +5 -8
  22. data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +2 -3
  23. data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +4 -5
  24. data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +5 -12
  25. data/lib/rubocop/cop/chef/correctness/node_normal.rb +2 -2
  26. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +2 -2
  27. data/lib/rubocop/cop/chef/correctness/node_save.rb +2 -2
  28. data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +7 -7
  29. data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +2 -2
  30. data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +4 -4
  31. data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +2 -2
  32. data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +2 -2
  33. data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +6 -2
  34. data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +6 -8
  35. data/lib/rubocop/cop/chef/correctness/service_resource.rb +2 -2
  36. data/lib/rubocop/cop/chef/correctness/tmp_path.rb +3 -4
  37. data/lib/rubocop/cop/chef/{correctness → deprecation}/cb_depends_on_self.rb +6 -11
  38. data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +5 -8
  39. data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +7 -10
  40. data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +3 -3
  41. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +15 -28
  42. data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +5 -8
  43. data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +3 -6
  44. data/lib/rubocop/cop/chef/deprecation/cheffile.rb +3 -5
  45. data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +5 -8
  46. data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +5 -8
  47. data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +6 -8
  48. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +5 -8
  49. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +2 -2
  50. data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +2 -2
  51. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +5 -9
  52. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +11 -10
  53. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +2 -2
  54. data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +2 -2
  55. data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +2 -2
  56. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +8 -8
  57. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +2 -2
  58. data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +2 -2
  59. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +5 -6
  60. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +2 -2
  61. data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +11 -12
  62. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +6 -8
  63. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +6 -9
  64. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +5 -9
  65. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +2 -2
  66. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -2
  67. data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +4 -9
  68. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +6 -8
  69. data/lib/rubocop/cop/chef/deprecation/node_set.rb +6 -8
  70. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +6 -8
  71. data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +6 -4
  72. data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +2 -2
  73. data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +2 -2
  74. data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +3 -3
  75. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +5 -9
  76. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +7 -7
  77. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +2 -2
  78. data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +2 -2
  79. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +5 -9
  80. data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +2 -2
  81. data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +2 -2
  82. data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +6 -8
  83. data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +4 -4
  84. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +6 -8
  85. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +5 -7
  86. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +11 -14
  87. data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +6 -8
  88. data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +2 -2
  89. data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +11 -16
  90. data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +4 -9
  91. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +6 -8
  92. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +5 -8
  93. data/lib/rubocop/cop/chef/effortless/berksfile.rb +3 -5
  94. data/lib/rubocop/cop/chef/effortless/data_bags.rb +2 -2
  95. data/lib/rubocop/cop/chef/effortless/node_environment.rb +6 -3
  96. data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +6 -3
  97. data/lib/rubocop/cop/chef/effortless/node_roles.rb +6 -3
  98. data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +4 -3
  99. data/lib/rubocop/cop/chef/effortless/search_used.rb +2 -2
  100. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +16 -16
  101. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +2 -2
  102. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +9 -9
  103. data/lib/rubocop/cop/chef/modernize/build_essential.rb +6 -8
  104. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +5 -8
  105. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +11 -10
  106. data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +2 -2
  107. data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +5 -8
  108. data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +2 -2
  109. data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +4 -6
  110. data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +7 -8
  111. data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +11 -13
  112. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +5 -8
  113. data/lib/rubocop/cop/chef/modernize/definitions.rb +2 -2
  114. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +5 -8
  115. data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +5 -8
  116. data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +5 -8
  117. data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +6 -4
  118. data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +6 -9
  119. data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +6 -11
  120. data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +5 -9
  121. data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +7 -4
  122. data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +7 -12
  123. data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +4 -6
  124. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +5 -8
  125. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +12 -9
  126. data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +4 -6
  127. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +5 -8
  128. data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +5 -9
  129. data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +2 -2
  130. data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +4 -6
  131. data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +4 -6
  132. data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +5 -6
  133. data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +3 -4
  134. data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +5 -9
  135. data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +3 -4
  136. data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +3 -4
  137. data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +5 -9
  138. data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +13 -15
  139. data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +10 -14
  140. data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +3 -4
  141. data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +7 -8
  142. data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +4 -9
  143. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +20 -16
  144. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +6 -8
  145. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +6 -8
  146. data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +1 -1
  147. data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +2 -2
  148. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +3 -8
  149. data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +5 -7
  150. data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +6 -10
  151. data/lib/rubocop/cop/chef/modernize/systctl_param_resource.rb +4 -6
  152. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +5 -8
  153. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +11 -10
  154. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +6 -9
  155. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +5 -8
  156. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +5 -8
  157. data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +6 -7
  158. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +2 -2
  159. data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +3 -3
  160. data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +4 -6
  161. data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +5 -8
  162. data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +6 -8
  163. data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +4 -6
  164. data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +4 -6
  165. data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +6 -9
  166. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +4 -5
  167. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +4 -5
  168. data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +7 -9
  169. data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +2 -2
  170. data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +4 -8
  171. data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +8 -9
  172. data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +4 -9
  173. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +4 -5
  174. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +4 -5
  175. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +4 -5
  176. data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +5 -8
  177. data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +5 -7
  178. data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +6 -9
  179. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +4 -5
  180. data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +9 -9
  181. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +7 -9
  182. data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +2 -2
  183. data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +3 -2
  184. data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +4 -4
  185. data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +4 -4
  186. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +6 -8
  187. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +7 -12
  188. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +3 -4
  189. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +5 -7
  190. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +5 -9
  191. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +5 -7
  192. data/lib/rubocop/cop/chef/style/comments_format.rb +13 -16
  193. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +6 -8
  194. data/lib/rubocop/cop/chef/style/negating_only_if.rb +5 -9
  195. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +5 -9
  196. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +6 -8
  197. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +4 -9
  198. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +17 -28
  199. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +5 -9
  200. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +11 -19
  201. metadata +5 -5
@@ -27,12 +27,13 @@ module RuboCop
27
27
  # search(:node, 'chef_environment:foo')
28
28
  # search(:node, 'role:bar')
29
29
  #
30
- class SearchForEnvironmentsOrRoles < Cop
30
+ class SearchForEnvironmentsOrRoles < Base
31
31
  MSG = 'Cookbook uses search with a node query that looks for a role or environment'
32
32
 
33
33
  def on_send(node)
34
- if node.method_name == :search && node.arguments[1]&.value&.match?(/chef_environment|role/)
35
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
34
+ if node.method_name == :search &&
35
+ node.arguments[1]&.value&.match?(/chef_environment|role/)
36
+ add_offense(node, message: MSG, severity: :refactor)
36
37
  end
37
38
  end
38
39
  end
@@ -26,11 +26,11 @@ module RuboCop
26
26
  # # bad
27
27
  # search(:node, 'run_list:recipe\[bacula\:\:server\]')
28
28
  #
29
- class CookbookUsesSearch < Cop
29
+ class CookbookUsesSearch < Base
30
30
  MSG = 'Cookbook uses search, which cannot be used in the Effortless Infra pattern'
31
31
 
32
32
  def on_send(node)
33
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :search
33
+ add_offense(node, message: MSG, severity: :refactor) if node.method_name == :search
34
34
  end
35
35
  end
36
36
  end
@@ -38,8 +38,9 @@ module RuboCop
38
38
  # # good
39
39
  # allowed_actions [ :create, :add ]
40
40
  #
41
- class AllowedActionsFromInitialize < Cop
41
+ class AllowedActionsFromInitialize < Base
42
42
  include RangeHelp
43
+ extend AutoCorrector
43
44
 
44
45
  MSG = 'The allowed actions of a resource can be set with the "allowed_actions" helper instead of using the initialize method.'
45
46
 
@@ -48,8 +49,20 @@ module RuboCop
48
49
  return if node.body.nil? # nil body is an empty initialize method
49
50
 
50
51
  node.body.each_node do |x|
51
- if x.assignment? && !x.parent.op_asgn_type? && !x.node_parts.empty? && %i(@actions @allowed_actions).include?(x.node_parts.first)
52
- add_offense(x, location: :expression, message: MSG, severity: :refactor)
52
+ next unless x.assignment? &&
53
+ !x.parent.op_asgn_type? &&
54
+ !x.node_parts.empty? &&
55
+ %i(@actions @allowed_actions).include?(x.node_parts.first)
56
+
57
+ add_offense(x, message: MSG, severity: :refactor) do |corrector|
58
+ # insert the new allowed_actions call above the initialize method, but not if one already exists (this is sadly common)
59
+ unless action_methods?(processed_source.ast)
60
+ initialize_node = initialize_method(processed_source.ast).first
61
+ corrector.insert_before(initialize_node.source_range, "allowed_actions #{x.descendants.first.source}\n\n")
62
+ end
63
+
64
+ # remove the variable from the initialize method
65
+ corrector.remove(range_with_surrounding_space(range: x.loc.expression, side: :left))
53
66
  end
54
67
  end
55
68
  end
@@ -57,19 +70,6 @@ module RuboCop
57
70
  def_node_search :action_methods?, '(send nil? {:actions :allowed_actions} ... )'
58
71
 
59
72
  def_node_search :initialize_method, '(def :initialize ... )'
60
-
61
- def autocorrect(node)
62
- lambda do |corrector|
63
- # insert the new allowed_actions call above the initialize method, but not if one already exists (this is sadly common)
64
- unless action_methods?(processed_source.ast)
65
- initialize_node = initialize_method(processed_source.ast).first
66
- corrector.insert_before(initialize_node.source_range, "allowed_actions #{node.descendants.first.source}\n\n")
67
- end
68
-
69
- # remove the variable from the initialize method
70
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
71
- end
72
- end
73
73
  end
74
74
  end
75
75
  end
@@ -30,7 +30,7 @@ module RuboCop
30
30
  # # good
31
31
  # apt_update
32
32
  #
33
- class IncludingAptDefaultRecipe < Cop
33
+ class IncludingAptDefaultRecipe < Base
34
34
  extend TargetChefVersion
35
35
 
36
36
  minimum_target_chef_version '12.7'
@@ -43,7 +43,7 @@ module RuboCop
43
43
 
44
44
  def on_send(node)
45
45
  apt_recipe_usage?(node) do
46
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
46
+ add_offense(node, message: MSG, severity: :refactor)
47
47
  end
48
48
  end
49
49
  end
@@ -34,7 +34,9 @@ module RuboCop
34
34
  # # good
35
35
  # source 'https://supermarket.chef.io'
36
36
  #
37
- class LegacyBerksfileSource < Cop
37
+ class LegacyBerksfileSource < Base
38
+ extend AutoCorrector
39
+
38
40
  MSG = 'Do not use legacy Berksfile community sources. Use Chef Supermarket instead.'
39
41
 
40
42
  def_node_matcher :berksfile_site?, <<-PATTERN
@@ -51,17 +53,15 @@ module RuboCop
51
53
 
52
54
  def on_send(node)
53
55
  berksfile_source?(node) do
54
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
56
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
57
+ corrector.replace(node.loc.expression, "source 'https://supermarket.chef.io'")
58
+ end
55
59
  end
56
60
 
57
61
  berksfile_site?(node) do
58
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
59
- end
60
- end
61
-
62
- def autocorrect(node)
63
- lambda do |corrector|
64
- corrector.replace(node.loc.expression, "source 'https://supermarket.chef.io'")
62
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
63
+ corrector.replace(node.loc.expression, "source 'https://supermarket.chef.io'")
64
+ end
65
65
  end
66
66
  end
67
67
  end
@@ -31,7 +31,9 @@ module RuboCop
31
31
  # # good
32
32
  # build_essential 'install compilation tools'
33
33
  #
34
- class UseBuildEssentialResource < Cop
34
+ class UseBuildEssentialResource < Base
35
+ extend AutoCorrector
36
+
35
37
  MSG = 'Use the build_essential resource instead of the legacy build-essential recipe. This resource ships in the build-essential cookbook v5.0+ and is built into Chef Infra Client 14+'
36
38
 
37
39
  def_node_matcher :build_essential_recipe_usage?, <<-PATTERN
@@ -40,13 +42,9 @@ module RuboCop
40
42
 
41
43
  def on_send(node)
42
44
  build_essential_recipe_usage?(node) do
43
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
44
- end
45
- end
46
-
47
- def autocorrect(node)
48
- lambda do |corrector|
49
- corrector.replace(node.loc.expression, "build_essential 'install compilation tools'")
45
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
46
+ corrector.replace(node.loc.expression, "build_essential 'install compilation tools'")
47
+ end
50
48
  end
51
49
  end
52
50
  end
@@ -32,7 +32,8 @@ module RuboCop
32
32
  # depends 'swap'
33
33
  # depends 'sysctl'
34
34
  #
35
- class UnnecessaryDependsChef14 < Cop
35
+ class UnnecessaryDependsChef14 < Base
36
+ extend AutoCorrector
36
37
  extend TargetChefVersion
37
38
  include RangeHelp
38
39
 
@@ -46,13 +47,9 @@ module RuboCop
46
47
 
47
48
  def on_send(node)
48
49
  legacy_depends?(node) do
49
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
50
- end
51
- end
52
-
53
- def autocorrect(node)
54
- lambda do |corrector|
55
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
50
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
51
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
52
+ end
56
53
  end
57
54
  end
58
55
  end
@@ -27,7 +27,8 @@ module RuboCop
27
27
  # # bad
28
28
  # chef_gem 'nokogiri'
29
29
  #
30
- class ChefGemNokogiri < Cop
30
+ class ChefGemNokogiri < Base
31
+ extend AutoCorrector
31
32
  include RangeHelp
32
33
  include RuboCop::Chef::CookbookHelpers
33
34
 
@@ -39,20 +40,20 @@ module RuboCop
39
40
 
40
41
  def on_block(node)
41
42
  match_property_in_resource?(:chef_gem, 'package_name', node) do |pkg_name|
42
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if pkg_name.arguments&.first&.str_content == 'nokogiri'
43
+ return unless pkg_name.arguments&.first&.str_content == 'nokogiri'
44
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
45
+ node = node.parent if node.parent&.block_type? # make sure we get the whole block not just the method in the block
46
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
47
+ end
43
48
  end
44
49
  end
45
50
 
46
51
  def on_send(node)
47
52
  nokogiri_install?(node) do
48
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
49
- end
50
- end
51
-
52
- def autocorrect(node)
53
- lambda do |corrector|
54
- node = node.parent if node.parent&.block_type? # make sure we get the whole block not just the method in the block
55
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
53
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
54
+ node = node.parent if node.parent&.block_type? # make sure we get the whole block not just the method in the block
55
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
56
+ end
56
57
  end
57
58
  end
58
59
  end
@@ -33,7 +33,7 @@ module RuboCop
33
33
  # compile_time true
34
34
  # end
35
35
  #
36
- class ResourceForcingCompileTime < Cop
36
+ class ResourceForcingCompileTime < Base
37
37
  MSG = "Set 'compile_time true' in resources when available instead of forcing resources to run at compile time by setting an action on the block."
38
38
 
39
39
  def_node_matcher :compile_time_resource?, <<-PATTERN
@@ -42,7 +42,7 @@ module RuboCop
42
42
 
43
43
  def on_send(node)
44
44
  compile_time_resource?(node) do
45
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
45
+ add_offense(node, message: MSG, severity: :refactor)
46
46
  end
47
47
  end
48
48
  end
@@ -29,7 +29,9 @@ module RuboCop
29
29
  # # good
30
30
  # only_if { ::File.exist?('bin/foo') }
31
31
  #
32
- class ConditionalUsingTest < Cop
32
+ class ConditionalUsingTest < Base
33
+ extend AutoCorrector
34
+
33
35
  MSG = "Use ::File.exist?('/foo/bar') instead of the slower 'test -f /foo/bar' which requires shelling out"
34
36
 
35
37
  def_node_matcher :resource_conditional?, <<~PATTERN
@@ -38,13 +40,8 @@ module RuboCop
38
40
 
39
41
  def on_send(node)
40
42
  resource_conditional?(node) do |conditional|
41
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if conditional.value.match?(/^test -[ef] \S*$/)
42
- end
43
- end
44
-
45
- def autocorrect(node)
46
- lambda do |corrector|
47
- resource_conditional?(node) do |conditional|
43
+ return unless conditional.value.match?(/^test -[ef] \S*$/)
44
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
48
45
  new_string = "{ ::File.exist?('#{conditional.value.match(/^test -[ef] (\S*)$/)[1]}') }"
49
46
  corrector.replace(conditional.loc.expression, new_string)
50
47
  end
@@ -60,7 +60,7 @@ module RuboCop
60
60
  # action :delete
61
61
  # end
62
62
  #
63
- class CronDFileOrTemplate < Cop
63
+ class CronDFileOrTemplate < Base
64
64
  extend TargetChefVersion
65
65
 
66
66
  minimum_target_chef_version '14.4'
@@ -78,7 +78,7 @@ module RuboCop
78
78
  def on_block(node)
79
79
  file_or_template?(node) do |file_name|
80
80
  return unless file_name.start_with?('/etc/cron.d/')
81
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
81
+ add_offense(node, message: MSG, severity: :refactor)
82
82
  end
83
83
  end
84
84
  end
@@ -29,19 +29,17 @@ module RuboCop
29
29
  # # good
30
30
  # cron_access 'mike'
31
31
  #
32
- class CronManageResource < Cop
32
+ class CronManageResource < Base
33
33
  extend TargetChefVersion
34
+ extend AutoCorrector
34
35
 
35
36
  minimum_target_chef_version '14.4'
36
37
 
37
38
  MSG = 'The cron_manage resource was renamed to cron_access in the 6.1 release of the cron cookbook and later shipped in Chef Infra Client 14.4. The new resource name should be used.'
38
39
 
39
40
  def on_send(node)
40
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :cron_manage
41
- end
42
-
43
- def autocorrect(node)
44
- lambda do |corrector|
41
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
42
+ return unless node.method_name == :cron_manage
45
43
  corrector.replace(node.loc.expression, node.source.gsub(/^cron_manage/, 'cron_access'))
46
44
  end
47
45
  end
@@ -31,7 +31,9 @@ module RuboCop
31
31
  # plain_text_data = data_bag_item('foo', 'bar')
32
32
  # encrypted_data = data_bag_item('foo2', 'bar2')
33
33
  #
34
- class DatabagHelpers < Cop
34
+ class DatabagHelpers < Base
35
+ extend AutoCorrector
36
+
35
37
  MSG = 'Use the `data_bag_item` helper instead of `Chef::DataBagItem.load` or `Chef::EncryptedDataBagItem.load`.'
36
38
 
37
39
  def_node_matcher :data_bag_class_load?, <<-PATTERN
@@ -43,13 +45,10 @@ module RuboCop
43
45
 
44
46
  def on_send(node)
45
47
  data_bag_class_load?(node) do
46
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
47
- end
48
- end
49
-
50
- def autocorrect(node)
51
- lambda do |corrector|
52
- corrector.replace(node.loc.expression, node.source.gsub(/Chef::(EncryptedDataBagItem|DataBagItem).load/, 'data_bag_item'))
48
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
49
+ corrector.replace(node.loc.expression,
50
+ node.source.gsub(/Chef::(EncryptedDataBagItem|DataBagItem).load/, 'data_bag_item'))
51
+ end
53
52
  end
54
53
  end
55
54
  end
@@ -38,7 +38,8 @@ module RuboCop
38
38
  # # good
39
39
  # default_action :create
40
40
 
41
- class DefaultActionFromInitialize < Cop
41
+ class DefaultActionFromInitialize < Base
42
+ extend AutoCorrector
42
43
  include RangeHelp
43
44
 
44
45
  MSG = 'The default action of a resource can be set with the "default_action" helper instead of using the initialize method.'
@@ -53,20 +54,17 @@ module RuboCop
53
54
 
54
55
  def on_ivasgn(node)
55
56
  action_variable_assignment?(node) do
56
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if initialize_method(node.parent.parent)
57
- end
58
- end
57
+ return unless initialize_method(node.parent.parent)
58
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
59
+ # insert the new default_action call above the initialize method, but not if one already exists (this is sadly common)
60
+ unless default_action_method?(processed_source.ast)
61
+ initialize_node = initialize_method(processed_source.ast).first
62
+ corrector.insert_before(initialize_node.source_range, "default_action #{node.descendants.first.source}\n\n")
63
+ end
59
64
 
60
- def autocorrect(node)
61
- lambda do |corrector|
62
- # insert the new default_action call above the initialize method, but not if one already exists (this is sadly common)
63
- unless default_action_method?(processed_source.ast)
64
- initialize_node = initialize_method(processed_source.ast).first
65
- corrector.insert_before(initialize_node.source_range, "default_action #{node.descendants.first.source}\n\n")
65
+ # remove the variable from the initialize method
66
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
66
67
  end
67
-
68
- # remove the variable from the initialize method
69
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
70
68
  end
71
69
  end
72
70
  end
@@ -30,7 +30,8 @@ module RuboCop
30
30
  # end
31
31
  # end
32
32
  #
33
- class DefinesChefSpecMatchers < Cop
33
+ class DefinesChefSpecMatchers < Base
34
+ extend AutoCorrector
34
35
  include RangeHelp
35
36
 
36
37
  MSG = 'ChefSpec matchers are now auto generated by ChefSpec 7.1+ and do not need to be defined in a cookbook'
@@ -41,13 +42,9 @@ module RuboCop
41
42
 
42
43
  def on_if(node)
43
44
  chefspec_matcher?(node) do
44
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
45
- end
46
- end
47
-
48
- def autocorrect(node)
49
- lambda do |corrector|
50
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
45
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
46
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
47
+ end
51
48
  end
52
49
  end
53
50
  end
@@ -21,13 +21,13 @@ module RuboCop
21
21
  module ChefModernize
22
22
  # In 2016 with Chef Infra Client 12.5 Custom Resources were introduced as a way of writing reusable resource code that could be shipped in cookbooks. Custom Resources offer many advantages of legacy Definitions including unit testing with ChefSpec, input validation, actions, common properties like not_if/only_if, and resource reporting.
23
23
  #
24
- class Definitions < Cop
24
+ class Definitions < Base
25
25
  include RuboCop::Chef::CookbookHelpers
26
26
 
27
27
  MSG = 'Legacy Chef Infra definitions should be rewritten as custom resources to take full advantage of the Chef Infra feature set.'
28
28
 
29
29
  def on_block(node)
30
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.respond_to?(:method_name) && node.method_name == :define
30
+ add_offense(node, message: MSG, severity: :refactor) if node.respond_to?(:method_name) && node.method_name == :define
31
31
  end
32
32
  end
33
33
  end
@@ -26,7 +26,8 @@ module RuboCop
26
26
  # # bad
27
27
  # depends 'zypper'
28
28
  #
29
- class DependsOnZypperCookbook < Cop
29
+ class DependsOnZypperCookbook < Base
30
+ extend AutoCorrector
30
31
  extend TargetChefVersion
31
32
  include RangeHelp
32
33
 
@@ -40,13 +41,9 @@ module RuboCop
40
41
 
41
42
  def on_send(node)
42
43
  zypper_depends?(node) do
43
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
44
- end
45
- end
46
-
47
- def autocorrect(node)
48
- lambda do |corrector|
49
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
44
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
45
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
46
+ end
50
47
  end
51
48
  end
52
49
  end