cookstyle 6.7.3 → 6.12.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (221) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -0
  3. data/bin/cookstyle +1 -0
  4. data/bin/cookstyle-profile +31 -0
  5. data/config/cookstyle.yml +79 -4
  6. data/config/disable_all.yml +22 -0
  7. data/config/upstream.yml +132 -11
  8. data/cookstyle.gemspec +1 -0
  9. data/lib/cookstyle.rb +2 -0
  10. data/lib/cookstyle/version.rb +3 -2
  11. data/lib/rubocop/chef.rb +1 -0
  12. data/lib/rubocop/chef/autocorrect_helpers.rb +1 -0
  13. data/lib/rubocop/chef/cookbook_helpers.rb +1 -0
  14. data/lib/rubocop/chef/platform_helpers.rb +1 -0
  15. data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +2 -1
  16. data/lib/rubocop/cop/chef/correctness/cb_depends_on_self.rb +2 -1
  17. data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +2 -1
  18. data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +2 -1
  19. data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +2 -1
  20. data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +12 -1
  21. data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +2 -1
  22. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +2 -1
  23. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +2 -1
  24. data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +2 -1
  25. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +2 -1
  26. data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +2 -1
  27. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +2 -1
  28. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +2 -1
  29. data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +3 -2
  30. data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +2 -1
  31. data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +1 -0
  32. data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +2 -1
  33. data/lib/rubocop/cop/chef/correctness/node_normal.rb +2 -1
  34. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +2 -1
  35. data/lib/rubocop/cop/chef/correctness/node_save.rb +2 -1
  36. data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +2 -1
  37. data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +2 -1
  38. data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +2 -1
  39. data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +2 -1
  40. data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +2 -1
  41. data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +2 -1
  42. data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +2 -1
  43. data/lib/rubocop/cop/chef/correctness/service_resource.rb +2 -1
  44. data/lib/rubocop/cop/chef/correctness/tmp_path.rb +2 -1
  45. data/lib/rubocop/cop/chef/deprecation/ use_automatic_resource_name.rb +52 -0
  46. data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +55 -0
  47. data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +2 -1
  48. data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +2 -1
  49. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +2 -1
  50. data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +2 -1
  51. data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +60 -0
  52. data/lib/rubocop/cop/chef/deprecation/cheffile.rb +2 -1
  53. data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +2 -1
  54. data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +2 -1
  55. data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +2 -1
  56. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +2 -1
  57. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +2 -1
  58. data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +2 -1
  59. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +2 -1
  60. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +2 -1
  61. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +2 -1
  62. data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +2 -1
  63. data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +2 -1
  64. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +2 -1
  65. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +2 -1
  66. data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +2 -1
  67. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +2 -1
  68. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +2 -1
  69. data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +142 -0
  70. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +2 -1
  71. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +2 -1
  72. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +3 -2
  73. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +2 -1
  74. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -1
  75. data/lib/rubocop/cop/chef/deprecation/log_resource_notifications.rb +2 -1
  76. data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +2 -1
  77. data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +8 -21
  78. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +2 -1
  79. data/lib/rubocop/cop/chef/deprecation/node_set.rb +2 -1
  80. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +2 -1
  81. data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +2 -1
  82. data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +2 -1
  83. data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +2 -1
  84. data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +2 -1
  85. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +2 -1
  86. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +2 -1
  87. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +2 -1
  88. data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +2 -1
  89. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +23 -13
  90. data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +2 -1
  91. data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +2 -1
  92. data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +2 -1
  93. data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +2 -1
  94. data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +2 -1
  95. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +2 -1
  96. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +2 -1
  97. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +2 -1
  98. data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +2 -1
  99. data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +2 -1
  100. data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +2 -1
  101. data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +2 -1
  102. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +2 -1
  103. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +2 -1
  104. data/lib/rubocop/cop/chef/effortless/berksfile.rb +2 -1
  105. data/lib/rubocop/cop/chef/effortless/data_bags.rb +2 -1
  106. data/lib/rubocop/cop/chef/effortless/node_environment.rb +2 -1
  107. data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +2 -1
  108. data/lib/rubocop/cop/chef/effortless/node_roles.rb +2 -1
  109. data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +2 -1
  110. data/lib/rubocop/cop/chef/effortless/search_used.rb +2 -1
  111. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +2 -1
  112. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +2 -1
  113. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +2 -1
  114. data/lib/rubocop/cop/chef/modernize/build_essential.rb +2 -1
  115. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +2 -1
  116. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +2 -1
  117. data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +2 -1
  118. data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +57 -0
  119. data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +2 -1
  120. data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +2 -1
  121. data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +2 -1
  122. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +2 -1
  123. data/lib/rubocop/cop/chef/modernize/definitions.rb +2 -1
  124. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +2 -1
  125. data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +2 -1
  126. data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +2 -1
  127. data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +3 -2
  128. data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +2 -1
  129. data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +2 -1
  130. data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +2 -1
  131. data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +2 -1
  132. data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +2 -1
  133. data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +2 -1
  134. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +2 -1
  135. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +2 -1
  136. data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +2 -1
  137. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +2 -1
  138. data/lib/rubocop/cop/chef/modernize/node_init_package.rb +18 -9
  139. data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +2 -1
  140. data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +2 -1
  141. data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +2 -1
  142. data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +2 -1
  143. data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +2 -1
  144. data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +2 -1
  145. data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +2 -1
  146. data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +2 -1
  147. data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +2 -1
  148. data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +2 -1
  149. data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +2 -1
  150. data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +2 -1
  151. data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +2 -1
  152. data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +2 -1
  153. data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +2 -1
  154. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +2 -1
  155. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +2 -1
  156. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +2 -1
  157. data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +2 -1
  158. data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +2 -1
  159. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +2 -1
  160. data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +2 -1
  161. data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +2 -1
  162. data/lib/rubocop/cop/chef/modernize/systctl_param_resource.rb +2 -1
  163. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +2 -1
  164. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +2 -1
  165. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +2 -1
  166. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +2 -1
  167. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +2 -1
  168. data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +2 -1
  169. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +2 -1
  170. data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +2 -1
  171. data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +2 -1
  172. data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +2 -1
  173. data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +2 -1
  174. data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +2 -1
  175. data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +2 -1
  176. data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +2 -1
  177. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +2 -1
  178. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +2 -1
  179. data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +61 -0
  180. data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +2 -1
  181. data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +69 -0
  182. data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +2 -1
  183. data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +2 -1
  184. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +2 -1
  185. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +2 -1
  186. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +2 -1
  187. data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +2 -1
  188. data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +2 -1
  189. data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +2 -1
  190. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +2 -1
  191. data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +2 -1
  192. data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +2 -1
  193. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +2 -1
  194. data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +2 -1
  195. data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +2 -1
  196. data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +2 -1
  197. data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +2 -1
  198. data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +60 -0
  199. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +2 -1
  200. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +3 -2
  201. data/lib/rubocop/cop/chef/style/attribute_keys.rb +2 -1
  202. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +2 -1
  203. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +2 -1
  204. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +2 -1
  205. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +2 -1
  206. data/lib/rubocop/cop/chef/style/comments_format.rb +2 -1
  207. data/lib/rubocop/cop/chef/style/file_mode.rb +2 -1
  208. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +2 -1
  209. data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +58 -0
  210. data/lib/rubocop/cop/chef/style/negating_only_if.rb +2 -1
  211. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +2 -1
  212. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +2 -1
  213. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +2 -1
  214. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +3 -3
  215. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +2 -1
  216. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +3 -3
  217. data/lib/rubocop/monkey_patches/comment_config.rb +1 -0
  218. data/lib/rubocop/monkey_patches/cop.rb +1 -0
  219. data/lib/rubocop/monkey_patches/registry_cop.rb +15 -0
  220. metadata +15 -5
  221. data/lib/rubocop/cop/chef/deprecation/resource_without_name_or_provides.rb +0 -81
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software, Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -46,7 +47,7 @@ module RuboCop
46
47
 
47
48
  minimum_target_chef_version '12.14'
48
49
 
49
- MSG = 'With the release of Chef Infra Client 12.14 and the yum cookbook 3.0 several properties in the yum_repository resource were renamed. url -> baseurl, keyurl -> gpgkey, and mirrorexpire -> mirror_expire.'.freeze
50
+ MSG = 'With the release of Chef Infra Client 12.14 and the yum cookbook 3.0 several properties in the yum_repository resource were renamed. url -> baseurl, keyurl -> gpgkey, and mirrorexpire -> mirror_expire.'
50
51
 
51
52
  def on_block(node)
52
53
  %w(url keyurl mirrorexpire).each do |prop|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -29,7 +30,7 @@ module RuboCop
29
30
  # end
30
31
  #
31
32
  class EasyInstallResource < Cop
32
- MSG = "Don't use the deprecated easy_install resource removed in Chef Infra Client 13".freeze
33
+ MSG = "Don't use the deprecated easy_install resource removed in Chef Infra Client 13"
33
34
 
34
35
  def on_send(node)
35
36
  add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :easy_install
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -32,7 +33,7 @@ module RuboCop
32
33
  # end
33
34
 
34
35
  class EOLAuditModeUsage < Cop
35
- MSG = 'The beta Audit Mode feature in Chef Infra Client was removed in Chef Infra Client 15.0. Users should instead use InSpec and the audit cookbook. See https://www.inspec.io/ for more informmation.'.freeze
36
+ MSG = 'The beta Audit Mode feature in Chef Infra Client was removed in Chef Infra Client 15.0. Users should instead use InSpec and the audit cookbook. See https://www.inspec.io/ for more informmation.'
36
37
 
37
38
  def_node_matcher :control_group?, '(send nil? :control_group ...)'
38
39
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -34,7 +35,7 @@ module RuboCop
34
35
  # end
35
36
  #
36
37
  class EpicFail < Cop
37
- MSG = 'Use ignore_failure method instead of the deprecated epic_fail method'.freeze
38
+ MSG = 'Use ignore_failure method instead of the deprecated epic_fail method'
38
39
 
39
40
  def on_send(node)
40
41
  add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :epic_fail
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -29,7 +30,7 @@ module RuboCop
29
30
  # end
30
31
  #
31
32
  class ErlCallResource < Cop
32
- MSG = "Don't use the deprecated erl_call resource removed in Chef Infra Client 13".freeze
33
+ MSG = "Don't use the deprecated erl_call resource removed in Chef Infra Client 13"
33
34
 
34
35
  def on_send(node)
35
36
  add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :erl_call
@@ -0,0 +1,142 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright (c) 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
+
19
+ module RuboCop
20
+ module Cop
21
+ module Chef
22
+ module ChefDeprecations
23
+ # Chef Infra Client 16 and later a legacy HWRP resource must use `provides` to define how the resource is called in recipes or other resources. To maintain compatibility with Chef Infra Client < 16 use both `resource_name` and `provides`.
24
+ #
25
+ # @example
26
+ #
27
+ # # bad
28
+ # class Chef
29
+ # class Resource
30
+ # class UlimitRule < Chef::Resource
31
+ # property :type, [Symbol, String], required: true
32
+ # property :item, [Symbol, String], required: true
33
+ #
34
+ # # additional resource code
35
+ # end
36
+ # end
37
+ # end
38
+ #
39
+ # # bad
40
+ # class Chef
41
+ # class Resource
42
+ # class UlimitRule < Chef::Resource
43
+ # resource_name :ulimit_rule
44
+ #
45
+ # property :type, [Symbol, String], required: true
46
+ # property :item, [Symbol, String], required: true
47
+ #
48
+ # # additional resource code
49
+ # end
50
+ # end
51
+ # end
52
+ #
53
+ # # good when Chef Infra Client < 15 (but compatible with 16+ as well)
54
+ # class Chef
55
+ # class Resource
56
+ # class UlimitRule < Chef::Resource
57
+ # resource_name :ulimit_rule
58
+ # provides :ulimit_rule
59
+ #
60
+ # property :type, [Symbol, String], required: true
61
+ # property :item, [Symbol, String], required: true
62
+ #
63
+ # # additional resource code
64
+ # end
65
+ # end
66
+ # end
67
+ #
68
+ # # good when Chef Infra Client 16+
69
+ # class Chef
70
+ # class Resource
71
+ # class UlimitRule < Chef::Resource
72
+ # provides :ulimit_rule
73
+ #
74
+ # property :type, [Symbol, String], required: true
75
+ # property :item, [Symbol, String], required: true
76
+ #
77
+ # # additional resource code
78
+ # end
79
+ # end
80
+ # end
81
+ #
82
+ # # better
83
+ # Convert your legacy HWRPs to custom resources
84
+ #
85
+ class HWRPWithoutProvides < Cop
86
+ MSG = 'In Chef Infra Client 16 and later a legacy HWRP resource must use `provides` to define how the resource is called in recipes or other resources. To maintain compatibility with Chef Infra Client < 16 use both `resource_name` and `provides`.'
87
+
88
+ def_node_matcher :HWRP?, <<-PATTERN
89
+ (class
90
+ (const nil? :Chef) nil?
91
+ (class
92
+ (const nil? :Resource) nil?
93
+ $(class
94
+ (const nil? ... )
95
+ (const
96
+ (const nil? :Chef) :Resource)
97
+ (begin ... ))))
98
+ PATTERN
99
+
100
+ def_node_search :provides, '(send nil? :provides (sym $_) ...)'
101
+ def_node_search :resource_name_ast, '$(send nil? :resource_name ...)'
102
+ def_node_search :resource_name, '(send nil? :resource_name (sym $_))'
103
+
104
+ def on_class(node)
105
+ HWRP?(node) do |inherit|
106
+ add_offense(inherit, location: :expression, message: MSG, severity: :warning) unless has_provides?
107
+ end
108
+ end
109
+
110
+ def has_provides?
111
+ provides_ast = provides(processed_source.ast)
112
+ return false if provides_ast.count == 0
113
+
114
+ resource_ast = resource_name(processed_source.ast)
115
+
116
+ if resource_ast.count == 0
117
+ true # no resource_name, but provides
118
+ else
119
+ # since we have a resource and provides make sure the there is a provides that
120
+ # matches the resource name
121
+ provides_ast.include?(resource_ast.first)
122
+ end
123
+ end
124
+
125
+ def indentation(node)
126
+ node.source_range.source_line =~ /\S/
127
+ end
128
+
129
+ def autocorrect(node)
130
+ lambda do |corrector|
131
+ resource_name_ast(node) do |ast_match|
132
+ # build a new string to add after that includes the new line and the proper indentation
133
+ new_string = "\n" + ast_match.source.dup.gsub('resource_name', 'provides').prepend(' ' * indentation(ast_match))
134
+ corrector.insert_after(ast_match.source_range, new_string)
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -37,7 +38,7 @@ module RuboCop
37
38
  # Write a custom resource using the custom resource DSL and avoid class based HWRPs entirely
38
39
  #
39
40
  class ResourceInheritsFromCompatResource < Cop
40
- MSG = "HWRP style resource should inherit from the 'Chef::Resource' class and not the 'ChefCompat::Resource' class from the deprecated compat_resource cookbook.".freeze
41
+ MSG = "HWRP style resource should inherit from the 'Chef::Resource' class and not the 'ChefCompat::Resource' class from the deprecated compat_resource cookbook."
41
42
 
42
43
  def_node_matcher :inherits_from_compat_resource?, <<-PATTERN
43
44
  (class (const nil? _ ) (const (const nil? :ChefCompat) :Resource) ... )
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software, Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -38,7 +39,7 @@ module RuboCop
38
39
 
39
40
  minimum_target_chef_version '12.19'
40
41
 
41
- MSG = "The launchd resource's hash property was renamed to plist_hash in Chef Infra Client 13+ to avoid conflicts with Ruby's hash class.".freeze
42
+ MSG = "The launchd resource's hash property was renamed to plist_hash in Chef Infra Client 13+ to avoid conflicts with Ruby's hash class."
42
43
 
43
44
  def on_block(node)
44
45
  match_property_in_resource?(:launchd, 'hash', node) do |hash_prop|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software, Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -57,7 +58,7 @@ module RuboCop
57
58
  # end
58
59
  #
59
60
  class LegacyNotifySyntax < Cop
60
- MSG = 'Use the new-style notification syntax which allows you to notify resources defined later in a recipe or resource.'.freeze
61
+ MSG = 'Use the new-style notification syntax which allows you to notify resources defined later in a recipe or resource.'
61
62
 
62
63
  def_node_matcher :legacy_notify?, <<-PATTERN
63
64
  (send nil? ${:notifies :subscribes} $(sym _) (send nil? :resources (hash (pair $(sym _) $(...) ) ) ) $... )
@@ -80,7 +81,7 @@ module RuboCop
80
81
  else
81
82
  "\"#{type.source}[\#{#{name.source}}]\""
82
83
  end
83
- new_val = "#{notify_type} #{action.source}, #{service_value}"
84
+ new_val = "#{notify_type} #{action.source}, #{service_value}".dup
84
85
  new_val << ", #{timing.first.source}" unless timing.empty?
85
86
  corrector.replace(node.loc.expression, new_val)
86
87
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software, Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -33,7 +34,7 @@ module RuboCop
33
34
  # include_recipe 'yum::yum'
34
35
  #
35
36
  class LegacyYumCookbookRecipes < Cop
36
- MSG = 'The elrepo, epel, ius, remi, and repoforge recipes were split into their own cookbooks and the yum recipe was renamed to be default with the release of yum cookbook 3.0 (Dec 2013).'.freeze
37
+ MSG = 'The elrepo, epel, ius, remi, and repoforge recipes were split into their own cookbooks and the yum recipe was renamed to be default with the release of yum cookbook 3.0 (Dec 2013).'
37
38
 
38
39
  def_node_matcher :old_yum_recipe?, <<-PATTERN
39
40
  (send nil? :include_recipe (str {"yum::elrepo" "yum::epel" "yum::ius" "yum::remi" "yum::repoforge" "yum::yum"}))
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software, Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -31,7 +32,7 @@ module RuboCop
31
32
  class LocaleDeprecatedLcAllProperty < Cop
32
33
  include RuboCop::Chef::CookbookHelpers
33
34
 
34
- MSG = "The local resource's lc_all property has been deprecated and will be removed in Chef Infra Client 17".freeze
35
+ MSG = "The local resource's lc_all property has been deprecated and will be removed in Chef Infra Client 17"
35
36
 
36
37
  def on_block(node)
37
38
  match_property_in_resource?(:locale, 'lc_all', node) do |property|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2020, Chef Software, Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -49,7 +50,7 @@ module RuboCop
49
50
 
50
51
  minimum_target_chef_version '15.8'
51
52
 
52
- MSG = 'In Chef Infra Client 16 the log resource no longer notifies when logging so notifications should not be triggered from log resources. Use the notify_group resource introduced in Chef Infra Client 15.8 instead to aggregate notifications.'.freeze
53
+ MSG = 'In Chef Infra Client 16 the log resource no longer notifies when logging so notifications should not be triggered from log resources. Use the notify_group resource introduced in Chef Infra Client 15.8 instead to aggregate notifications.'
53
54
 
54
55
  def on_block(node)
55
56
  match_property_in_resource?(:log, 'notifies', node) do |prop_node|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: Copyright 2019, Chef Software Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -33,7 +34,7 @@ module RuboCop
33
34
  class NamePropertyWithDefaultValue < Cop
34
35
  include RangeHelp
35
36
 
36
- MSG = "A resource property can't be marked as a name_property and also have a default value. This will fail in Chef Infra Client 13 or later.".freeze
37
+ MSG = "A resource property can't be marked as a name_property and also have a default value. This will fail in Chef Infra Client 13 or later."
37
38
 
38
39
  # match on a property or attribute that has any name and any type and a hash that
39
40
  # contains name_property/name_attribute true and any default value. These are wrapped in
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: Copyright 2019, Chef Software Inc.
3
4
  #
@@ -17,8 +18,7 @@ module RuboCop
17
18
  module Cop
18
19
  module Chef
19
20
  module ChefDeprecations
20
- # The node.deep_fetch method has been removed from Chef-Sugar, and must be replaced by
21
- # the node.read API.
21
+ # The node.deep_fetch method has been removed from Chef-Sugar, and must be replaced by the node.read API.
22
22
  #
23
23
  # @example
24
24
  #
@@ -34,31 +34,18 @@ module RuboCop
34
34
  # # good
35
35
  # node.read!("foo")
36
36
  #
37
- class NodeDeepFetch < Cop
38
- MSG = 'Do not use node.deep_fetch. Replace with node.read to keep identical behavior.'.freeze
39
- MSG2 = 'Do not use node.deep_fetch!. Replace with node.read! to keep identical behavior.'.freeze
37
+ class NodeDeepFetch < Base
38
+ extend RuboCop::Cop::AutoCorrector
40
39
 
41
40
  def_node_matcher :node_deep_fetch?, <<-PATTERN
42
- (send (send _ :node) $:deep_fetch _)
43
- PATTERN
44
-
45
- def_node_matcher :node_deep_fetch_bang?, <<-PATTERN
46
- (send (send _ :node) $:deep_fetch! _)
41
+ (send (send _ :node) ${:deep_fetch :deep_fetch!} _)
47
42
  PATTERN
48
43
 
49
44
  def on_send(node)
50
45
  node_deep_fetch?(node) do
51
- add_offense(node, location: :selector, message: MSG, severity: :warning)
52
- end
53
-
54
- node_deep_fetch_bang?(node) do
55
- add_offense(node, location: :selector, message: MSG2, severity: :warning)
56
- end
57
- end
58
-
59
- def autocorrect(node)
60
- lambda do |corrector|
61
- corrector.replace(node.loc.selector, fix_name(node.method_name))
46
+ add_offense(node.loc.selector, message: "Do not use node.#{node.method_name}. Replace with node.#{fix_name(node.method_name)} to keep identical behavior.", severity: :warning) do |corrector|
47
+ corrector.replace(node.loc.selector, fix_name(node.method_name))
48
+ end
62
49
  end
63
50
  end
64
51
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -37,7 +38,7 @@ module RuboCop
37
38
  # node['hostname']
38
39
  #
39
40
  class NodeMethodsInsteadofAttributes < Cop
40
- MSG = 'Use node attributes to access Ohai data instead of node methods, which were deprecated in Chef Infra Client 13.'.freeze
41
+ MSG = 'Use node attributes to access Ohai data instead of node methods, which were deprecated in Chef Infra Client 13.'
41
42
 
42
43
  def_node_matcher :node_ohai_methods?, <<-PATTERN
43
44
  (send (send nil? :node) #non_nested_ohai_attribute?)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: Copyright 2019, Chef Software Inc.
3
4
  #
@@ -30,7 +31,7 @@ module RuboCop
30
31
  # node.normal['foo'] = true
31
32
  #
32
33
  class NodeSet < Cop
33
- MSG = 'Do not use node.set. Replace with node.normal to keep identical behavior.'.freeze
34
+ MSG = 'Do not use node.set. Replace with node.normal to keep identical behavior.'
34
35
 
35
36
  def_node_matcher :node_set?, <<-PATTERN
36
37
  (send (send _ :node) $:set)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: Copyright 2019, Chef Software Inc.
3
4
  #
@@ -30,7 +31,7 @@ module RuboCop
30
31
  # node.normal_unless['foo'] = true
31
32
  #
32
33
  class NodeSetUnless < Cop
33
- MSG = 'Do not use node.set_unless. Replace with node.normal_unless to keep identical behavior.'.freeze
34
+ MSG = 'Do not use node.set_unless. Replace with node.normal_unless to keep identical behavior.'
34
35
 
35
36
  def_node_matcher :node_set_unless?, <<-PATTERN
36
37
  (send (send _ :node) $:set_unless)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: Copyright 2019, Chef Software Inc.
3
4
  #
@@ -34,7 +35,7 @@ module RuboCop
34
35
  # node.default['foo']['bar'] -= 1
35
36
  #
36
37
  class NodeSetWithoutLevel < Cop
37
- MSG = 'When setting a node attribute in Chef Infra Client 11 and later you must specify the precedence level.'.freeze
38
+ MSG = 'When setting a node attribute in Chef Infra Client 11 and later you must specify the precedence level.'
38
39
 
39
40
  def on_op_asgn(node)
40
41
  # make sure it was a += or -=
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019, Chef Software, Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -47,7 +48,7 @@ module RuboCop
47
48
  # end
48
49
  #
49
50
  class PartialSearchClassUsage < Cop
50
- MSG = 'Legacy Chef::PartialSearch class usage should be updated to use the search helper instead with the filter_result key.'.freeze
51
+ MSG = 'Legacy Chef::PartialSearch class usage should be updated to use the search helper instead with the filter_result key.'
51
52
 
52
53
  def_node_matcher :partial_search_class?, <<-PATTERN
53
54
  (send (const (const ... :Chef) :PartialSearch) :new)