cookstyle 6.9.0 → 6.14.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (227) 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 +146 -28
  6. data/config/disable_all.yml +18 -0
  7. data/config/upstream.yml +103 -10
  8. data/cookstyle.gemspec +1 -0
  9. data/lib/cookstyle.rb +6 -4
  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_default_action.rb +48 -0
  22. data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +2 -1
  23. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +28 -4
  24. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +2 -1
  25. data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +2 -1
  26. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +2 -1
  27. data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +2 -1
  28. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +2 -1
  29. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +2 -1
  30. data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +2 -1
  31. data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +2 -1
  32. data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +68 -0
  33. data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +1 -0
  34. data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +2 -1
  35. data/lib/rubocop/cop/chef/correctness/node_normal.rb +2 -1
  36. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +2 -1
  37. data/lib/rubocop/cop/chef/correctness/node_save.rb +2 -1
  38. data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +6 -5
  39. data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +2 -1
  40. data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +2 -1
  41. data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +2 -1
  42. data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +2 -1
  43. data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +2 -1
  44. data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +2 -1
  45. data/lib/rubocop/cop/chef/correctness/service_resource.rb +2 -1
  46. data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +52 -0
  47. data/lib/rubocop/cop/chef/correctness/tmp_path.rb +2 -1
  48. data/lib/rubocop/cop/chef/deprecation/ use_automatic_resource_name.rb +52 -0
  49. data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +55 -0
  50. data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +2 -1
  51. data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +2 -1
  52. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +2 -1
  53. data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +2 -1
  54. data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +60 -0
  55. data/lib/rubocop/cop/chef/deprecation/cheffile.rb +3 -2
  56. data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +2 -1
  57. data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +2 -1
  58. data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +2 -1
  59. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +2 -1
  60. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +2 -1
  61. data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +2 -1
  62. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +2 -1
  63. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +2 -1
  64. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +2 -1
  65. data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +2 -1
  66. data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +2 -1
  67. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +2 -1
  68. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +2 -1
  69. data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +3 -2
  70. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +2 -1
  71. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +2 -1
  72. data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +2 -1
  73. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +2 -1
  74. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +2 -1
  75. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +3 -2
  76. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +2 -1
  77. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -1
  78. data/lib/rubocop/cop/chef/deprecation/log_resource_notifications.rb +2 -1
  79. data/lib/rubocop/cop/chef/deprecation/macos_userdefaults_global_property.rb +61 -0
  80. data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +2 -1
  81. data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +8 -21
  82. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +2 -1
  83. data/lib/rubocop/cop/chef/deprecation/node_set.rb +2 -1
  84. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +2 -1
  85. data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +2 -1
  86. data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +2 -1
  87. data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +2 -1
  88. data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +4 -3
  89. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +2 -1
  90. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +2 -1
  91. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +2 -1
  92. data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +2 -1
  93. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +3 -2
  94. data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +2 -1
  95. data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +2 -1
  96. data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +3 -2
  97. data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +2 -1
  98. data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +2 -1
  99. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +2 -1
  100. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +2 -1
  101. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +2 -1
  102. data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +2 -1
  103. data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +2 -1
  104. data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +2 -1
  105. data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +2 -1
  106. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +2 -1
  107. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +2 -1
  108. data/lib/rubocop/cop/chef/effortless/berksfile.rb +2 -1
  109. data/lib/rubocop/cop/chef/effortless/data_bags.rb +2 -1
  110. data/lib/rubocop/cop/chef/effortless/node_environment.rb +3 -2
  111. data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +2 -1
  112. data/lib/rubocop/cop/chef/effortless/node_roles.rb +5 -4
  113. data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +2 -1
  114. data/lib/rubocop/cop/chef/effortless/search_used.rb +2 -1
  115. data/lib/rubocop/cop/chef/modernize/action_method_in_resource.rb +57 -0
  116. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +4 -3
  117. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +2 -1
  118. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +2 -1
  119. data/lib/rubocop/cop/chef/modernize/build_essential.rb +2 -1
  120. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +2 -1
  121. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +2 -1
  122. data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +2 -1
  123. data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +57 -0
  124. data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +88 -0
  125. data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +2 -1
  126. data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +2 -1
  127. data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +5 -4
  128. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +2 -1
  129. data/lib/rubocop/cop/chef/modernize/definitions.rb +3 -2
  130. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +2 -1
  131. data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +2 -1
  132. data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +2 -1
  133. data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +3 -2
  134. data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +2 -1
  135. data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +2 -1
  136. data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +2 -1
  137. data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +2 -1
  138. data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +2 -1
  139. data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +2 -1
  140. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +2 -1
  141. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +2 -1
  142. data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +2 -1
  143. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +2 -1
  144. data/lib/rubocop/cop/chef/modernize/node_init_package.rb +18 -9
  145. data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +2 -1
  146. data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +2 -1
  147. data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +2 -1
  148. data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +2 -1
  149. data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +2 -1
  150. data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +2 -1
  151. data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +2 -1
  152. data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +2 -1
  153. data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +2 -1
  154. data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +2 -1
  155. data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +5 -4
  156. data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +4 -3
  157. data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +2 -1
  158. data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +2 -1
  159. data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +2 -1
  160. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +2 -1
  161. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +2 -1
  162. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +2 -1
  163. data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +2 -1
  164. data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +2 -1
  165. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +2 -1
  166. data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +2 -1
  167. data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +2 -1
  168. data/lib/rubocop/cop/chef/modernize/systctl_param_resource.rb +2 -1
  169. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +2 -1
  170. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +4 -3
  171. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +2 -1
  172. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +2 -1
  173. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +2 -1
  174. data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +2 -1
  175. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +2 -1
  176. data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +2 -1
  177. data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +2 -1
  178. data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +2 -1
  179. data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +2 -1
  180. data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +2 -1
  181. data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +2 -1
  182. data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +2 -1
  183. data/lib/rubocop/cop/chef/redundant/double_compile_time.rb +65 -0
  184. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +2 -1
  185. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +2 -1
  186. data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +61 -0
  187. data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +2 -1
  188. data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +69 -0
  189. data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +2 -1
  190. data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +2 -1
  191. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +2 -1
  192. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +2 -1
  193. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +2 -1
  194. data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +2 -1
  195. data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +2 -1
  196. data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +2 -1
  197. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +2 -1
  198. data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +2 -1
  199. data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +2 -1
  200. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +2 -1
  201. data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +2 -1
  202. data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +2 -1
  203. data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +3 -2
  204. data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +3 -2
  205. data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +60 -0
  206. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +2 -1
  207. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +2 -1
  208. data/lib/rubocop/cop/chef/style/attribute_keys.rb +2 -1
  209. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +2 -1
  210. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +2 -1
  211. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +2 -1
  212. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +2 -1
  213. data/lib/rubocop/cop/chef/style/comments_format.rb +2 -1
  214. data/lib/rubocop/cop/chef/style/file_mode.rb +39 -19
  215. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +2 -1
  216. data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +58 -0
  217. data/lib/rubocop/cop/chef/style/negating_only_if.rb +2 -1
  218. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +2 -1
  219. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +2 -1
  220. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +2 -1
  221. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +3 -3
  222. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +3 -2
  223. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +3 -3
  224. data/lib/rubocop/monkey_patches/{cop.rb → base.rb} +2 -1
  225. data/lib/rubocop/monkey_patches/comment_config.rb +1 -0
  226. data/lib/rubocop/monkey_patches/registry_cop.rb +15 -0
  227. metadata +22 -5
@@ -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
  class DefinesChefSpecMatchers < Cop
33
34
  include RangeHelp
34
35
 
35
- MSG = 'ChefSpec matchers are now auto generated by ChefSpec 7.1+ and do not need to be defined in a cookbook'.freeze
36
+ MSG = 'ChefSpec matchers are now auto generated by ChefSpec 7.1+ and do not need to be defined in a cookbook'
36
37
 
37
38
  def_node_matcher :chefspec_matcher?, <<-PATTERN
38
39
  (if ( :defined? (const nil? :ChefSpec)) ... )
@@ -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>)
@@ -18,12 +19,12 @@ module RuboCop
18
19
  module Cop
19
20
  module Chef
20
21
  module ChefModernize
21
- # 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, commmon properties like not_if/only_if, and resource reporting.
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.
22
23
  #
23
24
  class Definitions < Cop
24
25
  include RuboCop::Chef::CookbookHelpers
25
26
 
26
- MSG = 'Legacy Chef Infra definitions should be rewritten as custom resources to take full advantage of the Chef Infra feature set.'.freeze
27
+ MSG = 'Legacy Chef Infra definitions should be rewritten as custom resources to take full advantage of the Chef Infra feature set.'
27
28
 
28
29
  def on_block(node)
29
30
  add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.respond_to?(:method_name) && node.method_name == :define
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019-2020, Chef Software, Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -31,7 +32,7 @@ module RuboCop
31
32
 
32
33
  minimum_target_chef_version '13.3'
33
34
 
34
- MSG = "Don't depend on the zypper cookbook as the zypper_repository resource is built into Chef Infra Client 13.3+".freeze
35
+ MSG = "Don't depend on the zypper cookbook as the zypper_repository resource is built into Chef Infra Client 13.3+"
35
36
 
36
37
  def_node_matcher :zypper_depends?, <<-PATTERN
37
38
  (send nil? :depends (str "zypper"))
@@ -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>)
@@ -27,7 +28,7 @@ module RuboCop
27
28
  class DslIncludeInResource < Cop
28
29
  include RangeHelp
29
30
 
30
- 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.'.freeze
31
+ 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.'
31
32
 
32
33
  def_node_matcher :dsl_include?, <<-PATTERN
33
34
  (send nil? :include
@@ -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>)
@@ -30,7 +31,7 @@ module RuboCop
30
31
  class EmptyResourceInitializeMethod < Cop
31
32
  include RangeHelp
32
33
 
33
- MSG = 'There is no need for an empty initialize method in a resource'.freeze
34
+ MSG = 'There is no need for an empty initialize method in a resource'
34
35
 
35
36
  def_node_matcher :empty_initialize?, <<-PATTERN
36
37
  (def :initialize (args (restarg :args)) (zsuper))
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019-2020, Chef Software, Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -42,10 +43,10 @@ module RuboCop
42
43
  # end
43
44
  #
44
45
  class ExecuteAptUpdate < Cop
45
- MSG = 'Use the apt_update resource instead of the execute resource to run an apt-get update package cache update'.freeze
46
+ MSG = 'Use the apt_update resource instead of the execute resource to run an apt-get update package cache update'
46
47
 
47
48
  def_node_matcher :execute_apt_update?, <<-PATTERN
48
- (send nil? :execute (str "apt-get update"))
49
+ (send nil? :execute (str { "apt-get update" "apt-get update -y" "apt-get -y update" }))
49
50
  PATTERN
50
51
 
51
52
  def_node_matcher :notification_property?, <<-PATTERN
@@ -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
 
38
39
  minimum_target_chef_version '14.0'
39
40
 
40
- 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'.freeze
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'
41
42
 
42
43
  # non block execute resources
43
44
  def on_send(node)
@@ -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>)
@@ -41,7 +42,7 @@ module RuboCop
41
42
 
42
43
  minimum_target_chef_version '15.5'
43
44
 
44
- 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.'.freeze
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.'
45
46
 
46
47
  # non block execute resources
47
48
  def on_send(node)
@@ -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>)
@@ -41,7 +42,7 @@ module RuboCop
41
42
 
42
43
  minimum_target_chef_version '14.0'
43
44
 
44
- 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.'.freeze
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.'
45
46
 
46
47
  # non block execute resources
47
48
  def on_send(node)
@@ -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>)
@@ -42,7 +43,7 @@ module RuboCop
42
43
 
43
44
  minimum_target_chef_version '14.6'
44
45
 
45
- MSG = 'Use the timezone resource included in Chef Infra Client 14.6+ instead of shelling out to tzutil'.freeze
46
+ MSG = 'Use the timezone resource included in Chef Infra Client 14.6+ instead of shelling out to tzutil'
46
47
 
47
48
  def_node_matcher :execute_resource?, <<-PATTERN
48
49
  (send nil? :execute $str)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2016-2019, Chef Software, Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -27,7 +28,7 @@ module RuboCop
27
28
  # # ~FC013
28
29
  #
29
30
  class FoodcriticComments < Cop
30
- MSG = 'Remove legacy code comments that disable Foodcritic rules'.freeze
31
+ MSG = 'Remove legacy code comments that disable Foodcritic rules'
31
32
 
32
33
  def investigate(processed_source)
33
34
  return unless processed_source.ast
@@ -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
  # default_action :foo
30
31
  #
31
32
  class IfProvidesDefaultAction < Cop
32
- MSG = 'if defined?(default_action) is no longer necessary in Chef Resources as default_action shipped in Chef 10.8.'.freeze
33
+ MSG = 'if defined?(default_action) is no longer necessary in Chef Resources as default_action shipped in Chef 10.8.'
33
34
 
34
35
  def on_defined?(node)
35
36
  return unless node.arguments.first == s(:send, nil, :default_action)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019-2020, Chef Software Inc.
3
4
  # Author:: Tim Smith (<tsmith@chef.io>)
@@ -32,7 +33,7 @@ module RuboCop
32
33
  class IncludingMixinShelloutInResources < Cop
33
34
  include RangeHelp
34
35
 
35
- MSG = 'There is no need to include Chef::Mixin::ShellOut or Chef::Mixin::PowershellOut in resources or providers as this is already done by Chef Infra Client 12.4+.'.freeze
36
+ MSG = 'There is no need to include Chef::Mixin::ShellOut or Chef::Mixin::PowershellOut in resources or providers as this is already done by Chef Infra Client 12.4+.'
36
37
 
37
38
  def_node_matcher :include_shellout?, <<-PATTERN
38
39
  (send nil? :include (const (const (const nil? :Chef) :Mixin) {:ShellOut :PowershellOut}))
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019-2020, 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 '15.0'
40
41
 
41
- MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of the libarchive file resource'.freeze
42
+ MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of the libarchive file resource'
42
43
 
43
44
  def_node_matcher :notification_property?, <<-PATTERN
44
45
  (send nil? {:notifies :subscribes} (sym _) $(...) (sym _))
@@ -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>)
@@ -40,7 +41,7 @@ module RuboCop
40
41
 
41
42
  minimum_target_chef_version '14.0'
42
43
 
43
- MSG = 'The mac_os_x_userdefaults resource was renamed to macos_userdefaults when it was added to Chef Infra Client 14.0. The new resource name should be used.'.freeze
44
+ MSG = 'The mac_os_x_userdefaults resource was renamed to macos_userdefaults when it was added to Chef Infra Client 14.0. The new resource name should be used.'
44
45
 
45
46
  def on_send(node)
46
47
  add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :mac_os_x_userdefaults
@@ -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>)
@@ -28,7 +29,7 @@ module RuboCop
28
29
  class MinitestHandlerUsage < Cop
29
30
  include RangeHelp
30
31
 
31
- MSG = 'Use Chef InSpec for testing instead of the Minitest Handler cookbook pattern.'.freeze
32
+ MSG = 'Use Chef InSpec for testing instead of the Minitest Handler cookbook pattern.'
32
33
 
33
34
  def_node_matcher :minitest_depends?, <<-PATTERN
34
35
  (send nil? :depends (str "minitest-handler"))
@@ -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>)
@@ -27,19 +28,21 @@ module RuboCop
27
28
  # ::File.open('/proc/1/comm').chomp == 'systemd'
28
29
  # File.open('/proc/1/comm').gets.chomp == 'systemd'
29
30
  # File.open('/proc/1/comm').chomp == 'systemd'
30
- # File.exist?('/proc/1/comm') && File.open('/proc/1/comm').chomp == 'systemd'
31
- #
32
31
  # IO.read('/proc/1/comm').chomp == 'systemd'
33
32
  # IO.read('/proc/1/comm').gets.chomp == 'systemd'
34
33
  # ::IO.read('/proc/1/comm').chomp == 'systemd'
35
34
  # ::IO.read('/proc/1/comm').gets.chomp == 'systemd'
36
35
  # File.exist?('/proc/1/comm') && File.open('/proc/1/comm').chomp == 'systemd'
36
+ # only_if 'test -f /bin/systemctl && /bin/systemctl'
37
37
  #
38
38
  # # good
39
39
  # node['init_package'] == 'systemd'
40
+ # only_if { node['init_package'] == 'systemd' }
40
41
  #
41
- class NodeInitPackage < Cop
42
- MSG = "Use node['init_package'] to check for systemd instead of reading the contents of '/proc/1/comm'".freeze
42
+ class NodeInitPackage < Base
43
+ extend RuboCop::Cop::AutoCorrector
44
+
45
+ MSG = "Use node['init_package'] to check for systemd instead of reading the contents of '/proc/1/comm'"
43
46
 
44
47
  def_node_matcher :file_reads_proc_1_comm?, <<-PATTERN
45
48
  (send (const {(cbase) nil?} {:File :IO}) {:open :read} (str "/proc/1/comm"))
@@ -58,18 +61,24 @@ module RuboCop
58
61
  :== (str "systemd"))
59
62
  PATTERN
60
63
 
64
+ def_node_matcher :file_systemd_conditional?, <<~PATTERN
65
+ (send nil? {:not_if :only_if} $(str "test -f /bin/systemctl && /bin/systemctl"))
66
+ PATTERN
67
+
61
68
  def on_send(node)
62
69
  compare_init_system?(node) do
63
70
  # if there's a ::File.exist?('/proc/1/comm') check first we want to match that as well
64
71
  node = node.parent if node.parent&.and_type? && proc_1_comm_exists?(node.parent.conditions.first)
65
72
 
66
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
73
+ add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
74
+ corrector.replace(node, "node['init_package'] == 'systemd'")
75
+ end
67
76
  end
68
- end
69
77
 
70
- def autocorrect(node)
71
- lambda do |corrector|
72
- corrector.replace(node.loc.expression, "node['init_package'] == 'systemd'")
78
+ file_systemd_conditional?(node) do |conditional|
79
+ add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
80
+ corrector.replace(conditional.loc.expression, "{ node['init_package'] == 'systemd' }")
81
+ end
73
82
  end
74
83
  end
75
84
  end
@@ -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>)
@@ -29,7 +30,7 @@ module RuboCop
29
30
  # node.role?('foo')
30
31
  #
31
32
  class NodeRolesInclude < Cop
32
- MSG = "Use `node.role?('foo')` to check if a node includes a role instead of `node['roles'].include?('foo')`.".freeze
33
+ MSG = "Use `node.role?('foo')` to check if a node includes a role instead of `node['roles'].include?('foo')`."
33
34
 
34
35
  def_node_matcher :node_role_include?, <<-PATTERN
35
36
  (send
@@ -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
  # include_recipe 'ohai'
30
31
  #
31
32
  class IncludingOhaiDefaultRecipe < Cop
32
- MSG = "Use the ohai_plugin resource to ship custom Ohai plugins instead of using the ohai::default recipe. If you're not shipping custom Ohai plugins, then you can remove this recipe entirely".freeze
33
+ MSG = "Use the ohai_plugin resource to ship custom Ohai plugins instead of using the ohai::default recipe. If you're not shipping custom Ohai plugins, then you can remove this recipe entirely"
33
34
 
34
35
  def_node_matcher :ohai_recipe_usage?, <<-PATTERN
35
36
  (send nil? :include_recipe (str {"ohai" "ohai::default"}))
@@ -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>)
@@ -36,7 +37,7 @@ module RuboCop
36
37
 
37
38
  minimum_target_chef_version '14.0'
38
39
 
39
- MSG = 'The openssl_rsa_key resource was renamed to openssl_rsa_private_key in Chef Infra Client 14.0. The new resource name should be used.'.freeze
40
+ MSG = 'The openssl_rsa_key resource was renamed to openssl_rsa_private_key in Chef Infra Client 14.0. The new resource name should be used.'
40
41
 
41
42
  def on_send(node)
42
43
  add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :openssl_rsa_key
@@ -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>)
@@ -42,7 +43,7 @@ module RuboCop
42
43
 
43
44
  minimum_target_chef_version '14.4'
44
45
 
45
- MSG = 'The openssl_x509 resource was renamed to openssl_x509_certificate in Chef Infra Client 14.4. The new resource name should be used.'.freeze
46
+ MSG = 'The openssl_x509 resource was renamed to openssl_x509_certificate in Chef Infra Client 14.4. The new resource name should be used.'
46
47
 
47
48
  def on_send(node)
48
49
  add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :openssl_x509
@@ -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 OsxConfigProfileResource < Cop
35
- MSG = 'The osx_config_profile resource was renamed to osx_profile. The new resource name should be used.'.freeze
36
+ MSG = 'The osx_config_profile resource was renamed to osx_profile. The new resource name should be used.'
36
37
 
37
38
  def on_send(node)
38
39
  add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :osx_config_profile
@@ -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
 
35
36
  minimum_target_chef_version '15.0'
36
37
 
37
- MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of using Expand-Archive in a powershell_script resource'.freeze
38
+ MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of using Expand-Archive in a powershell_script resource'
38
39
 
39
40
  def on_block(node)
40
41
  match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: 2019-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 '13.0'
51
52
 
52
- MSG = 'PowerShell is already set as the default guard interpreter for `powershell_script` and `batch` resources in Chef Infra Client 13 and later and does not need to be specified.'.freeze
53
+ MSG = 'PowerShell is already set as the default guard interpreter for `powershell_script` and `batch` resources in Chef Infra Client 13 and later and does not need to be specified.'
53
54
 
54
55
  def on_block(node)
55
56
  match_property_in_resource?(%i(powershell_script batch), 'guard_interpreter', node) do |interpreter|
@@ -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
 
38
39
  minimum_target_chef_version '12.16'
39
40
 
40
- MSG = 'Use the powershell_package resource built into Chef Infra Client 12.16+ instead of using Install-Package in a powershell_script resource'.freeze
41
+ MSG = 'Use the powershell_package resource built into Chef Infra Client 12.16+ instead of using Install-Package in a powershell_script resource'
41
42
 
42
43
  def on_block(node)
43
44
  match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
@@ -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>)
@@ -40,7 +41,7 @@ module RuboCop
40
41
 
41
42
  minimum_target_chef_version '14.0'
42
43
 
43
- MSG = 'Use the windows_feature resource built into Chef Infra Client 14+ instead of using Install-WindowsFeature or Add-WindowsFeature in a powershell_script resource'.freeze
44
+ MSG = 'Use the windows_feature resource built into Chef Infra Client 14+ instead of using Install-WindowsFeature or Add-WindowsFeature in a powershell_script resource'
44
45
 
45
46
  def on_block(node)
46
47
  match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
@@ -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>)
@@ -29,7 +30,7 @@ module RuboCop
29
30
  # property :bob, String, name_property: true
30
31
  #
31
32
  class PropertyWithNameAttribute < Cop
32
- MSG = 'Resource property sets name_attribute instead of name_property'.freeze
33
+ MSG = 'Resource property sets name_attribute instead of name_property'
33
34
 
34
35
  # match on a property that has any name and any type and a hash that
35
36
  # contains name_attribute true. The hash pairs are wrapped in
@@ -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>)
@@ -34,7 +35,7 @@ module RuboCop
34
35
  class ProvidesFromInitialize < Cop
35
36
  include RangeHelp
36
37
 
37
- MSG = 'Provides should be set using the `provides` resource DSL method instead of instead of setting @provides in the initialize method.'.freeze
38
+ MSG = 'Provides should be set using the `provides` resource DSL method instead of instead of setting @provides in the initialize method.'
38
39
 
39
40
  def_node_matcher :provides_assignment?, <<-PATTERN
40
41
  (ivasgn :@provides $(sym ...))
@@ -42,19 +43,19 @@ module RuboCop
42
43
 
43
44
  def on_ivasgn(node)
44
45
  provides_assignment?(node) do
45
- add_offense(node, location: :expression, message: MSG, severity: :refactor) if intialize_method(node.parent.parent).any?
46
+ add_offense(node, location: :expression, message: MSG, severity: :refactor) if initialize_method(node.parent.parent).any?
46
47
  end
47
48
  end
48
49
 
49
50
  def_node_search :provides_method?, '(send nil? :provides ... )'
50
51
 
51
- def_node_search :intialize_method, '(def :initialize ... )'
52
+ def_node_search :initialize_method, '(def :initialize ... )'
52
53
 
53
54
  def autocorrect(node)
54
55
  lambda do |corrector|
55
56
  # insert the new provides call above the initialize method, but not if one already exists (this is sadly common)
56
57
  unless provides_method?(processed_source.ast)
57
- initialize_node = intialize_method(processed_source.ast).first
58
+ initialize_node = initialize_method(processed_source.ast).first
58
59
  corrector.insert_before(initialize_node.source_range, "provides #{node.descendants.first.source}\n\n")
59
60
  end
60
61