cookstyle 6.15.9 → 6.17.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/bin/cookstyle +1 -1
  3. data/config/cookstyle.yml +56 -10
  4. data/config/disable_all.yml +20 -0
  5. data/config/upstream.yml +79 -12
  6. data/lib/cookstyle.rb +2 -2
  7. data/lib/cookstyle/version.rb +2 -2
  8. data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +7 -9
  9. data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +5 -9
  10. data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +5 -9
  11. data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +5 -8
  12. data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +11 -9
  13. data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +3 -2
  14. data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +3 -2
  15. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +16 -21
  16. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +15 -23
  17. data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +3 -2
  18. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +13 -14
  19. data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +13 -22
  20. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +5 -3
  21. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +5 -3
  22. data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +3 -4
  23. data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +5 -8
  24. data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +2 -3
  25. data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +6 -7
  26. data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +5 -12
  27. data/lib/rubocop/cop/chef/correctness/node_normal.rb +2 -2
  28. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +2 -2
  29. data/lib/rubocop/cop/chef/correctness/node_save.rb +2 -2
  30. data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +7 -7
  31. data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +2 -2
  32. data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +4 -4
  33. data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +2 -2
  34. data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +2 -2
  35. data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +6 -2
  36. data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +6 -8
  37. data/lib/rubocop/cop/chef/correctness/service_resource.rb +3 -2
  38. data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +1 -0
  39. data/lib/rubocop/cop/chef/correctness/tmp_path.rb +4 -4
  40. data/lib/rubocop/cop/chef/deprecation/ use_automatic_resource_name.rb +1 -2
  41. data/lib/rubocop/cop/chef/{correctness → deprecation}/cb_depends_on_self.rb +7 -11
  42. data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +6 -8
  43. data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +7 -10
  44. data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +4 -3
  45. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +16 -28
  46. data/lib/rubocop/cop/chef/deprecation/chef_shellout.rb +86 -0
  47. data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +5 -8
  48. data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +3 -6
  49. data/lib/rubocop/cop/chef/deprecation/cheffile.rb +3 -5
  50. data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +5 -8
  51. data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +5 -8
  52. data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +6 -8
  53. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +6 -8
  54. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +3 -2
  55. data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +3 -2
  56. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +5 -9
  57. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +12 -10
  58. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +10 -6
  59. data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +11 -12
  60. data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +3 -2
  61. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +8 -8
  62. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +3 -2
  63. data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +3 -2
  64. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +5 -6
  65. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +3 -2
  66. data/lib/rubocop/cop/chef/deprecation/execute_path_property.rb +51 -0
  67. data/lib/rubocop/cop/chef/deprecation/execute_relative_creates_without_cwd.rb +67 -0
  68. data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +11 -12
  69. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +6 -8
  70. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +6 -9
  71. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +6 -9
  72. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +3 -2
  73. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -2
  74. data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +5 -9
  75. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +6 -8
  76. data/lib/rubocop/cop/chef/deprecation/node_set.rb +6 -8
  77. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +6 -8
  78. data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +6 -4
  79. data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +2 -2
  80. data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +3 -2
  81. data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +4 -3
  82. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +5 -9
  83. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +8 -7
  84. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +4 -4
  85. data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +3 -2
  86. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +6 -9
  87. data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +3 -2
  88. data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +2 -2
  89. data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +1 -0
  90. data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +6 -8
  91. data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +5 -4
  92. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +11 -10
  93. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +10 -13
  94. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +11 -14
  95. data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +6 -8
  96. data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +2 -2
  97. data/lib/rubocop/cop/chef/deprecation/windows_package_installer_type_string.rb +61 -0
  98. data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +11 -16
  99. data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +4 -9
  100. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +7 -8
  101. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +6 -8
  102. data/lib/rubocop/cop/chef/effortless/berksfile.rb +3 -5
  103. data/lib/rubocop/cop/chef/effortless/data_bags.rb +3 -2
  104. data/lib/rubocop/cop/chef/effortless/node_environment.rb +6 -3
  105. data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +6 -3
  106. data/lib/rubocop/cop/chef/effortless/node_roles.rb +6 -3
  107. data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +4 -3
  108. data/lib/rubocop/cop/chef/effortless/search_used.rb +3 -2
  109. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +16 -16
  110. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +3 -2
  111. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +10 -9
  112. data/lib/rubocop/cop/chef/modernize/build_essential.rb +7 -8
  113. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +6 -8
  114. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +12 -10
  115. data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +2 -2
  116. data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +6 -8
  117. data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +2 -2
  118. data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +4 -6
  119. data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +7 -8
  120. data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +11 -13
  121. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +5 -8
  122. data/lib/rubocop/cop/chef/modernize/definitions.rb +2 -2
  123. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +6 -8
  124. data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +6 -8
  125. data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +5 -8
  126. data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +7 -4
  127. data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +7 -9
  128. data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +7 -11
  129. data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +6 -9
  130. data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +8 -4
  131. data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +7 -12
  132. data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +4 -6
  133. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +6 -8
  134. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +13 -9
  135. data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +4 -6
  136. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +6 -8
  137. data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +5 -9
  138. data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +3 -2
  139. data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +4 -6
  140. data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +4 -6
  141. data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +5 -6
  142. data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +3 -4
  143. data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +5 -9
  144. data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +3 -4
  145. data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +3 -4
  146. data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +6 -9
  147. data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +13 -15
  148. data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +10 -14
  149. data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +3 -4
  150. data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +8 -8
  151. data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +4 -9
  152. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +20 -16
  153. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +6 -8
  154. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +6 -8
  155. data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +2 -1
  156. data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +3 -2
  157. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +3 -8
  158. data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +5 -7
  159. data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +6 -10
  160. data/lib/rubocop/cop/chef/modernize/{systctl_param_resource.rb → sysctl_param_resource.rb} +4 -6
  161. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +6 -8
  162. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +11 -10
  163. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +7 -9
  164. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +5 -8
  165. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +6 -8
  166. data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +6 -7
  167. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +3 -2
  168. data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +4 -3
  169. data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +4 -6
  170. data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +5 -8
  171. data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +6 -8
  172. data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +4 -6
  173. data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +4 -6
  174. data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +8 -13
  175. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +4 -6
  176. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +4 -6
  177. data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +7 -9
  178. data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +2 -2
  179. data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +4 -8
  180. data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +8 -9
  181. data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +5 -9
  182. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +4 -6
  183. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +4 -6
  184. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +4 -6
  185. data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +5 -8
  186. data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +6 -7
  187. data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +7 -9
  188. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +4 -6
  189. data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +1 -0
  190. data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +10 -9
  191. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +7 -9
  192. data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +3 -2
  193. data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +3 -2
  194. data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +1 -0
  195. data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +4 -4
  196. data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +4 -4
  197. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +7 -8
  198. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +8 -12
  199. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +3 -4
  200. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +5 -7
  201. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +5 -9
  202. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +5 -7
  203. data/lib/rubocop/cop/chef/style/comments_format.rb +13 -16
  204. data/lib/rubocop/cop/chef/style/file_mode.rb +1 -0
  205. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +7 -8
  206. data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +1 -0
  207. data/lib/rubocop/cop/chef/style/negating_only_if.rb +5 -9
  208. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +5 -9
  209. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +6 -8
  210. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +6 -9
  211. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +17 -28
  212. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +5 -9
  213. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +11 -19
  214. metadata +10 -6
@@ -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.'
39
+ RESTRICT_ON_SEND = [:cron_manage].freeze
38
40
 
39
41
  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|
42
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
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,13 +26,15 @@ 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
 
33
34
  minimum_target_chef_version '13.3'
34
35
 
35
36
  MSG = "Don't depend on the zypper cookbook as the zypper_repository resource is built into Chef Infra Client 13.3+"
37
+ RESTRICT_ON_SEND = [:depends].freeze
36
38
 
37
39
  def_node_matcher :zypper_depends?, <<-PATTERN
38
40
  (send nil? :depends (str "zypper"))
@@ -40,13 +42,9 @@ module RuboCop
40
42
 
41
43
  def on_send(node)
42
44
  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))
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
50
48
  end
51
49
  end
52
50
  end
@@ -25,10 +25,12 @@ module RuboCop
25
25
  # include Chef::DSL::Recipe
26
26
  # include Chef::DSL::IncludeRecipe
27
27
  #
28
- class DslIncludeInResource < Cop
28
+ class DslIncludeInResource < Base
29
+ extend AutoCorrector
29
30
  include RangeHelp
30
31
 
31
32
  MSG = 'Chef Infra Client 12.4+ includes the Chef::DSL::Recipe in the resource and provider classed by default so there is no need to include this DSL in your resources or providers.'
33
+ RESTRICT_ON_SEND = [:include].freeze
32
34
 
33
35
  def_node_matcher :dsl_include?, <<-PATTERN
34
36
  (send nil? :include
@@ -39,13 +41,9 @@ module RuboCop
39
41
 
40
42
  def on_send(node)
41
43
  dsl_include?(node) do
42
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
43
- end
44
- end
45
-
46
- def autocorrect(node)
47
- lambda do |corrector|
48
- 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
49
47
  end
50
48
  end
51
49
  end
@@ -28,7 +28,8 @@ module RuboCop
28
28
  # super
29
29
  # end
30
30
  #
31
- class EmptyResourceInitializeMethod < Cop
31
+ class EmptyResourceInitializeMethod < Base
32
+ extend AutoCorrector
32
33
  include RangeHelp
33
34
 
34
35
  MSG = 'There is no need for an empty initialize method in a resource'
@@ -39,13 +40,9 @@ module RuboCop
39
40
 
40
41
  def on_def(node)
41
42
  empty_initialize?(node) do
42
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
43
- end
44
- end
45
-
46
- def autocorrect(node)
47
- lambda do |corrector|
48
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
43
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
44
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
45
+ end
49
46
  end
50
47
  end
51
48
  end
@@ -42,8 +42,11 @@ module RuboCop
42
42
  # notifies :update, 'apt_update[update apt cache]', :immediately
43
43
  # end
44
44
  #
45
- class ExecuteAptUpdate < Cop
45
+ class ExecuteAptUpdate < Base
46
+ extend AutoCorrector
47
+
46
48
  MSG = 'Use the apt_update resource instead of the execute resource to run an apt-get update package cache update'
49
+ RESTRICT_ON_SEND = [:execute, :notifies, :subscribes, :command].freeze
47
50
 
48
51
  def_node_matcher :execute_apt_update?, <<-PATTERN
49
52
  (send nil? :execute (str { "apt-get update" "apt-get update -y" "apt-get -y update" }))
@@ -59,15 +62,15 @@ module RuboCop
59
62
 
60
63
  def on_send(node)
61
64
  execute_apt_update?(node) do
62
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
65
+ add_offense(node, message: MSG, severity: :refactor)
63
66
  end
64
67
 
65
68
  notification_property?(node) do |val|
66
- add_offense(val, location: :expression, message: MSG, severity: :refactor) if val.str_content&.start_with?('execute[apt-get update]')
69
+ add_offense(val, message: MSG, severity: :refactor) if val.str_content&.start_with?('execute[apt-get update]')
67
70
  end
68
71
 
69
72
  execute_command?(node) do |val|
70
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if val.str_content == 'apt-get update'
73
+ add_offense(node, message: MSG, severity: :refactor) if val.str_content == 'apt-get update'
71
74
  end
72
75
  end
73
76
  end
@@ -32,32 +32,30 @@ module RuboCop
32
32
  # action :delete
33
33
  # end
34
34
  #
35
- class ExecuteScExe < Cop
35
+ class ExecuteScExe < Base
36
36
  include RuboCop::Chef::CookbookHelpers
37
37
  extend TargetChefVersion
38
38
 
39
39
  minimum_target_chef_version '14.0'
40
40
 
41
41
  MSG = 'Chef Infra Client 14.0 and later includes :create, :delete, and :configure actions with the full idempotency of the windows_service resource. See the windows_service documentation at https://docs.chef.io/resource_windows_service.html for additional details on creating services with the windows_service resource'
42
+ RESTRICT_ON_SEND = [:execute].freeze
42
43
 
43
44
  # non block execute resources
44
45
  def on_send(node)
45
- return unless node.method_name == :execute
46
-
47
46
  # use a regex on source instead of .value in case there's string interpolation which adds a complex dstr type
48
47
  # with a nested string and a begin. Source allows us to avoid a lot of defensive programming here
49
- if node&.arguments.first&.source&.match?(/^("|')sc.exe/)
50
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
51
- end
48
+ return unless node&.arguments.first&.source&.match?(/^("|')sc.exe/)
49
+
50
+ add_offense(node, message: MSG, severity: :refactor)
52
51
  end
53
52
 
54
53
  # block execute resources
55
54
  def on_block(node)
56
55
  match_property_in_resource?(:execute, 'command', node) do |code_property|
57
56
  property_data = method_arg_ast_to_string(code_property)
58
- if property_data && property_data.match?(/^sc.exe/i)
59
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
60
- end
57
+ return unless property_data && property_data.match?(/^sc.exe/i)
58
+ add_offense(node, message: MSG, severity: :refactor)
61
59
  end
62
60
  end
63
61
  end
@@ -43,32 +43,28 @@ module RuboCop
43
43
  minimum_target_chef_version '15.5'
44
44
 
45
45
  MSG = 'Chef Infra Client 15.5 and later include a chef_sleep resource that should be used to sleep between executing resources if necessary instead of using the bash or execute resources to run the sleep command.'
46
+ RESTRICT_ON_SEND = [:execute].freeze
46
47
 
47
48
  # non block execute resources
48
49
  def on_send(node)
49
- return unless node.method_name == :execute
50
-
51
50
  # use a regex on source instead of .value in case there's string interpolation which adds a complex dstr type
52
51
  # with a nested string and a begin. Source allows us to avoid a lot of defensive programming here
53
- if node&.arguments.first&.source&.match?(/^("|')sleep/)
54
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
55
- end
52
+ return unless node&.arguments.first&.source&.match?(/^("|')sleep/)
53
+ add_offense(node, message: MSG, severity: :refactor)
56
54
  end
57
55
 
58
56
  # block execute resources
59
57
  def on_block(node)
60
58
  match_property_in_resource?(:execute, 'command', node) do |code_property|
61
59
  property_data = method_arg_ast_to_string(code_property)
62
- if property_data && property_data.match?(/^sleep/i)
63
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
64
- end
60
+ next unless property_data && property_data.match?(/^sleep/i)
61
+ add_offense(node, message: MSG, severity: :refactor)
65
62
  end
66
63
 
67
64
  match_property_in_resource?(:bash, 'code', node) do |code_property|
68
65
  property_data = method_arg_ast_to_string(code_property)
69
- if property_data && property_data.match?(/^sleep/i)
70
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
71
- end
66
+ next unless property_data && property_data.match?(/^sleep/i)
67
+ add_offense(node, message: MSG, severity: :refactor)
72
68
  end
73
69
  end
74
70
  end
@@ -36,32 +36,29 @@ module RuboCop
36
36
  # value '9000 65500'
37
37
  # end
38
38
  #
39
- class ExecuteSysctl < Cop
39
+ class ExecuteSysctl < Base
40
40
  include RuboCop::Chef::CookbookHelpers
41
41
  extend TargetChefVersion
42
42
 
43
43
  minimum_target_chef_version '14.0'
44
44
 
45
45
  MSG = 'Chef Infra Client 14.0 and later includes a sysctl resource that should be used to idempotently load sysctl values instead of templating files and using execute to load them.'
46
+ RESTRICT_ON_SEND = [:execute].freeze
46
47
 
47
48
  # non block execute resources
48
49
  def on_send(node)
49
- return unless node.method_name == :execute
50
-
51
50
  # use a regex on source instead of .value in case there's string interpolation which adds a complex dstr type
52
51
  # with a nested string and a begin. Source allows us to avoid a lot of defensive programming here
53
- if node&.arguments.first&.source&.match?(/^("|')sysctl -p/)
54
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
55
- end
52
+ return unless node&.arguments.first&.source&.match?(/^("|')sysctl -p/)
53
+ add_offense(node, message: MSG, severity: :refactor)
56
54
  end
57
55
 
58
56
  # block execute resources
59
57
  def on_block(node)
60
58
  match_property_in_resource?(:execute, 'command', node) do |code_property|
61
59
  property_data = method_arg_ast_to_string(code_property)
62
- if property_data && property_data.match?(%r{^(/sbin/)?sysctl -p}i)
63
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
64
- end
60
+ return unless property_data && property_data.match?(%r{^(/sbin/)?sysctl -p}i)
61
+ add_offense(node, message: MSG, severity: :refactor)
65
62
  end
66
63
  end
67
64
  end
@@ -37,13 +37,14 @@ module RuboCop
37
37
  # # good
38
38
  # timezone 'UTC'
39
39
  #
40
- class ExecuteTzUtil < Cop
40
+ class ExecuteTzUtil < Base
41
41
  include RuboCop::Chef::CookbookHelpers
42
42
  extend TargetChefVersion
43
43
 
44
44
  minimum_target_chef_version '14.6'
45
45
 
46
46
  MSG = 'Use the timezone resource included in Chef Infra Client 14.6+ instead of shelling out to tzutil'
47
+ RESTRICT_ON_SEND = [:execute].freeze
47
48
 
48
49
  def_node_matcher :execute_resource?, <<-PATTERN
49
50
  (send nil? :execute $str)
@@ -51,17 +52,20 @@ module RuboCop
51
52
 
52
53
  def on_send(node)
53
54
  execute_resource?(node) do
54
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.arguments.first.value.match?(/^tzutil/i)
55
+ return unless node.arguments.first.value.match?(/^tzutil/i)
56
+ add_offense(node, message: MSG, severity: :refactor)
55
57
  end
56
58
  end
57
59
 
58
60
  def on_block(node)
59
61
  match_property_in_resource?(:execute, 'command', node) do |code_property|
60
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if calls_tzutil?(code_property)
62
+ next unless calls_tzutil?(code_property)
63
+ add_offense(node, message: MSG, severity: :refactor)
61
64
  end
62
65
 
63
66
  match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
64
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if calls_tzutil?(code_property)
67
+ next unless calls_tzutil?(code_property)
68
+ add_offense(node, message: MSG, severity: :refactor)
65
69
  end
66
70
  end
67
71
 
@@ -27,24 +27,19 @@ module RuboCop
27
27
  # # bad
28
28
  # # ~FC013
29
29
  #
30
- class FoodcriticComments < Cop
31
- MSG = 'Remove legacy code comments that disable Foodcritic rules'
30
+ class FoodcriticComments < Base
31
+ extend AutoCorrector
32
32
 
33
- def investigate(processed_source)
34
- return unless processed_source.ast
33
+ MSG = 'Remove legacy code comments that disable Foodcritic rules'
35
34
 
35
+ def on_new_investigation
36
36
  processed_source.comments.each do |comment|
37
- if comment.text.match?(/#\s*~FC\d{3}.*/)
38
- add_offense(comment, location: :expression, message: MSG, severity: :refactor)
37
+ next unless comment.text.match?(/#\s*~FC\d{3}.*/)
38
+ add_offense(comment, message: MSG, severity: :refactor) do |corrector|
39
+ corrector.remove(comment.loc.expression)
39
40
  end
40
41
  end
41
42
  end
42
-
43
- def autocorrect(node)
44
- lambda do |corrector|
45
- corrector.remove(node.loc.expression)
46
- end
47
- end
48
43
  end
49
44
  end
50
45
  end