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
@@ -37,7 +37,9 @@ module RuboCop
37
37
  # # better
38
38
  # Write a custom resource using the custom resource DSL and avoid class based HWRPs entirely
39
39
  #
40
- class ResourceInheritsFromCompatResource < Cop
40
+ class ResourceInheritsFromCompatResource < Base
41
+ extend AutoCorrector
42
+
41
43
  MSG = "HWRP style resource should inherit from the 'Chef::Resource' class and not the 'ChefCompat::Resource' class from the deprecated compat_resource cookbook."
42
44
 
43
45
  def_node_matcher :inherits_from_compat_resource?, <<-PATTERN
@@ -46,13 +48,9 @@ module RuboCop
46
48
 
47
49
  def on_class(node)
48
50
  inherits_from_compat_resource?(node) do
49
- add_offense(node, location: :expression, message: MSG, severity: :warning)
50
- end
51
- end
52
-
53
- def autocorrect(node)
54
- lambda do |corrector|
55
- corrector.replace(node.loc.expression, node.loc.expression.source.gsub('ChefCompat', 'Chef'))
51
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
52
+ corrector.replace(node.loc.expression, node.loc.expression.source.gsub('ChefCompat', 'Chef'))
53
+ end
56
54
  end
57
55
  end
58
56
  end
@@ -33,23 +33,20 @@ module RuboCop
33
33
  # plist_hash foo: 'bar'
34
34
  # end
35
35
  #
36
- class LaunchdDeprecatedHashProperty < Cop
36
+ class LaunchdDeprecatedHashProperty < Base
37
37
  include RuboCop::Chef::CookbookHelpers
38
38
  extend TargetChefVersion
39
+ extend AutoCorrector
39
40
 
40
41
  minimum_target_chef_version '12.19'
41
42
 
42
43
  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."
43
44
 
44
45
  def on_block(node)
45
- match_property_in_resource?(:launchd, 'hash', node) do |hash_prop|
46
- add_offense(hash_prop, location: :expression, message: MSG, severity: :warning)
47
- end
48
- end
49
-
50
- def autocorrect(node)
51
- lambda do |corrector|
52
- corrector.replace(node.loc.expression, node.loc.expression.source.gsub(/^hash/, 'plist_hash'))
46
+ match_property_in_resource?(:launchd, 'hash', node) do |offense|
47
+ add_offense(offense.loc.expression, message: MSG, severity: :warning) do |corrector|
48
+ corrector.replace(offense.loc.expression, offense.loc.expression.source.gsub(/^hash/, 'plist_hash'))
49
+ end
53
50
  end
54
51
  end
55
52
  end
@@ -57,22 +57,19 @@ module RuboCop
57
57
  # subscribes :restart, "service[#{service_name_variable}]", :immediately
58
58
  # end
59
59
  #
60
- class LegacyNotifySyntax < Cop
60
+ class LegacyNotifySyntax < Base
61
+ extend AutoCorrector
62
+
61
63
  MSG = 'Use the new-style notification syntax which allows you to notify resources defined later in a recipe or resource.'
64
+ RESTRICT_ON_SEND = [:notifies, :subscribes].freeze
62
65
 
63
66
  def_node_matcher :legacy_notify?, <<-PATTERN
64
67
  (send nil? ${:notifies :subscribes} $(sym _) (send nil? :resources (hash (pair $(sym _) $(...) ) ) ) $... )
65
68
  PATTERN
66
69
 
67
70
  def on_send(node)
68
- legacy_notify?(node) do
69
- add_offense(node, location: :expression, message: MSG, severity: :warning)
70
- end
71
- end
72
-
73
- def autocorrect(node)
74
- lambda do |corrector|
75
- legacy_notify?(node) do |notify_type, action, type, name, timing|
71
+ legacy_notify?(node) do |notify_type, action, type, name, timing|
72
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
76
73
  service_value = case name.type
77
74
  when :str
78
75
  "'#{type.source}[#{name.value}]'"
@@ -33,8 +33,9 @@ module RuboCop
33
33
  # include_recipe 'yum::repoforge'
34
34
  # include_recipe 'yum::yum'
35
35
  #
36
- class LegacyYumCookbookRecipes < Cop
36
+ class LegacyYumCookbookRecipes < Base
37
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).'
38
+ RESTRICT_ON_SEND = [:include_recipe].freeze
38
39
 
39
40
  def_node_matcher :old_yum_recipe?, <<-PATTERN
40
41
  (send nil? :include_recipe (str {"yum::elrepo" "yum::epel" "yum::ius" "yum::remi" "yum::repoforge" "yum::yum"}))
@@ -42,7 +43,7 @@ module RuboCop
42
43
 
43
44
  def on_send(node)
44
45
  old_yum_recipe?(node) do
45
- add_offense(node, location: :expression, message: MSG, severity: :warning)
46
+ add_offense(node, message: MSG, severity: :warning)
46
47
  end
47
48
  end
48
49
  end
@@ -29,14 +29,14 @@ module RuboCop
29
29
  # lc_all 'en_gb.utf-8'
30
30
  # end
31
31
  #
32
- class LocaleDeprecatedLcAllProperty < Cop
32
+ class LocaleDeprecatedLcAllProperty < Base
33
33
  include RuboCop::Chef::CookbookHelpers
34
34
 
35
35
  MSG = "The local resource's lc_all property has been deprecated and will be removed in Chef Infra Client 17"
36
36
 
37
37
  def on_block(node)
38
38
  match_property_in_resource?(:locale, 'lc_all', node) do |property|
39
- add_offense(property, location: :expression, message: MSG, severity: :warning)
39
+ add_offense(property, message: MSG, severity: :warning)
40
40
  end
41
41
  end
42
42
  end
@@ -31,10 +31,12 @@ module RuboCop
31
31
  # property :config_file, String, name_property: true
32
32
  # attribute :config_file, String, name_attribute: true
33
33
  #
34
- class NamePropertyWithDefaultValue < Cop
34
+ class NamePropertyWithDefaultValue < Base
35
35
  include RangeHelp
36
+ extend AutoCorrector
36
37
 
37
38
  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."
39
+ RESTRICT_ON_SEND = [:attribute, :property].freeze
38
40
 
39
41
  # match on a property or attribute that has any name and any type and a hash that
40
42
  # contains name_property/name_attribute true and any default value. These are wrapped in
@@ -44,14 +46,8 @@ module RuboCop
44
46
  PATTERN
45
47
 
46
48
  def on_send(node)
47
- name_property_with_default?(node) do
48
- add_offense(node, location: :expression, message: MSG, severity: :warning)
49
- end
50
- end
51
-
52
- def autocorrect(node)
53
- lambda do |corrector|
54
- name_property_with_default?(node) do |default|
49
+ name_property_with_default?(node) do |default|
50
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
55
51
  range = range_with_surrounding_comma(range_with_surrounding_space(range: default.loc.expression, side: :left), :left)
56
52
  corrector.remove(range)
57
53
  end
@@ -37,7 +37,9 @@ module RuboCop
37
37
  # node['platform_version']
38
38
  # node['hostname']
39
39
  #
40
- class NodeMethodsInsteadofAttributes < Cop
40
+ class NodeMethodsInsteadofAttributes < Base
41
+ extend AutoCorrector
42
+
41
43
  MSG = 'Use node attributes to access Ohai data instead of node methods, which were deprecated in Chef Infra Client 13.'
42
44
 
43
45
  def_node_matcher :node_ohai_methods?, <<-PATTERN
@@ -46,13 +48,9 @@ module RuboCop
46
48
 
47
49
  def on_send(node)
48
50
  node_ohai_methods?(node) do
49
- add_offense(node, location: :selector, message: MSG, severity: :warning)
50
- end
51
- end
52
-
53
- def autocorrect(node)
54
- lambda do |corrector|
55
- corrector.replace(node.loc.expression, "node['#{node.method_name}']")
51
+ add_offense(node.loc.selector, message: MSG, severity: :warning) do |corrector|
52
+ corrector.replace(node.loc.expression, "node['#{node.method_name}']")
53
+ end
56
54
  end
57
55
  end
58
56
 
@@ -30,7 +30,9 @@ module RuboCop
30
30
  # # good
31
31
  # node.normal['foo'] = true
32
32
  #
33
- class NodeSet < Cop
33
+ class NodeSet < Base
34
+ extend AutoCorrector
35
+
34
36
  MSG = 'Do not use node.set. Replace with node.normal to keep identical behavior.'
35
37
 
36
38
  def_node_matcher :node_set?, <<-PATTERN
@@ -39,13 +41,9 @@ module RuboCop
39
41
 
40
42
  def on_send(node)
41
43
  node_set?(node) do
42
- add_offense(node, location: :selector, message: MSG, severity: :warning)
43
- end
44
- end
45
-
46
- def autocorrect(node)
47
- lambda do |corrector|
48
- corrector.replace(node.loc.selector, 'normal')
44
+ add_offense(node.loc.selector, message: MSG, severity: :warning) do |corrector|
45
+ corrector.replace(node.loc.selector, 'normal')
46
+ end
49
47
  end
50
48
  end
51
49
  end
@@ -30,7 +30,9 @@ module RuboCop
30
30
  # # good
31
31
  # node.normal_unless['foo'] = true
32
32
  #
33
- class NodeSetUnless < Cop
33
+ class NodeSetUnless < Base
34
+ extend AutoCorrector
35
+
34
36
  MSG = 'Do not use node.set_unless. Replace with node.normal_unless to keep identical behavior.'
35
37
 
36
38
  def_node_matcher :node_set_unless?, <<-PATTERN
@@ -39,13 +41,9 @@ module RuboCop
39
41
 
40
42
  def on_send(node)
41
43
  node_set_unless?(node) do
42
- add_offense(node, location: :selector, message: MSG, severity: :warning)
43
- end
44
- end
45
-
46
- def autocorrect(node)
47
- lambda do |corrector|
48
- corrector.replace(node.loc.selector, 'normal_unless')
44
+ add_offense(node.loc.selector, message: MSG, severity: :warning) do |corrector|
45
+ corrector.replace(node.loc.selector, 'normal_unless')
46
+ end
49
47
  end
50
48
  end
51
49
  end
@@ -34,7 +34,7 @@ module RuboCop
34
34
  # node.default['foo']['bar'] += 1
35
35
  # node.default['foo']['bar'] -= 1
36
36
  #
37
- class NodeSetWithoutLevel < Cop
37
+ class NodeSetWithoutLevel < Base
38
38
  MSG = 'When setting a node attribute in Chef Infra Client 11 and later you must specify the precedence level.'
39
39
 
40
40
  def on_op_asgn(node)
@@ -55,9 +55,11 @@ module RuboCop
55
55
 
56
56
  def add_offense_for_bare_assignment(sub_node)
57
57
  if sub_node.receiver == s(:send, nil, :node) # node['foo'] scenario
58
- add_offense(sub_node.receiver, location: :selector, message: MSG, severity: :warning)
59
- elsif sub_node.receiver && sub_node.receiver&.node_parts[0] == s(:send, nil, :node) && sub_node.receiver&.node_parts[1] == :[] # node['foo']['bar'] scenario
60
- add_offense(sub_node.receiver.node_parts.first, location: :selector, message: MSG, severity: :warning)
58
+ add_offense(sub_node.receiver.loc.selector, message: MSG, severity: :warning)
59
+ elsif sub_node.receiver &&
60
+ sub_node.receiver&.node_parts[0] == s(:send, nil, :node) &&
61
+ sub_node.receiver&.node_parts[1] == :[] # node['foo']['bar'] scenario
62
+ add_offense(sub_node.receiver.node_parts.first.loc.selector, message: MSG, severity: :warning)
61
63
  end
62
64
  end
63
65
  end
@@ -47,7 +47,7 @@ module RuboCop
47
47
  # puts result['kernel_version']
48
48
  # end
49
49
  #
50
- class PartialSearchClassUsage < Cop
50
+ class PartialSearchClassUsage < Base
51
51
  MSG = 'Legacy Chef::PartialSearch class usage should be updated to use the search helper instead with the filter_result key.'
52
52
 
53
53
  def_node_matcher :partial_search_class?, <<-PATTERN
@@ -56,7 +56,7 @@ module RuboCop
56
56
 
57
57
  def on_send(node)
58
58
  partial_search_class?(node) do
59
- add_offense(node, location: :expression, message: MSG, severity: :warning)
59
+ add_offense(node, message: MSG, severity: :warning)
60
60
  end
61
61
  end
62
62
  end
@@ -47,11 +47,12 @@ module RuboCop
47
47
  # puts result['kernel_version']
48
48
  # end
49
49
  #
50
- class PartialSearchHelperUsage < Cop
50
+ class PartialSearchHelperUsage < Base
51
51
  MSG = 'Legacy partial_search usage should be updated to use :filter_result in the search helper instead'
52
+ RESTRICT_ON_SEND = [:partial_search].freeze
52
53
 
53
54
  def on_send(node)
54
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :partial_search
55
+ add_offense(node, message: MSG, severity: :warning)
55
56
  end
56
57
  end
57
58
  end
@@ -33,12 +33,13 @@ module RuboCop
33
33
  # destination '/opt/my_app'
34
34
  # end
35
35
  #
36
- class PoiseArchiveUsage < Cop
36
+ class PoiseArchiveUsage < Base
37
37
  include RuboCop::Chef::CookbookHelpers
38
38
  extend TargetChefVersion
39
39
  minimum_target_chef_version '15.0'
40
40
 
41
41
  MSG = 'The poise_archive resource in the deprecated poise-archive should be replaced with the archive_file resource found in Chef Infra Client 15+'
42
+ RESTRICT_ON_SEND = [:depends].freeze
42
43
 
43
44
  def_node_matcher :depends_poise_archive?, <<-PATTERN
44
45
  (send nil? :depends (str "poise-archive"))
@@ -46,13 +47,13 @@ module RuboCop
46
47
 
47
48
  def on_send(node)
48
49
  depends_poise_archive?(node) do
49
- add_offense(node, location: :expression, message: MSG, severity: :warning)
50
+ add_offense(node, message: MSG, severity: :warning)
50
51
  end
51
52
  end
52
53
 
53
54
  def on_block(node)
54
55
  match_resource_type?(:poise_archive, node) do
55
- add_offense(node, location: :expression, message: MSG, severity: :warning)
56
+ add_offense(node, message: MSG, severity: :warning)
56
57
  end
57
58
  end
58
59
  end
@@ -32,7 +32,9 @@ module RuboCop
32
32
  # # better (Chef Infra Client 15.8+)
33
33
  # powershell_version == 4.0
34
34
  #
35
- class PowershellCookbookHelpers < Cop
35
+ class PowershellCookbookHelpers < Base
36
+ extend AutoCorrector
37
+
36
38
  MSG = "Use node['powershell']['version'] or the new powershell_version helper available in Chef Infra Client 15.8+ instead of the deprecated PowerShell cookbook helpers."
37
39
 
38
40
  def_node_matcher :ps_cb_helper?, <<-PATTERN
@@ -43,14 +45,8 @@ module RuboCop
43
45
  PATTERN
44
46
 
45
47
  def on_send(node)
46
- ps_cb_helper?(node) do
47
- add_offense(node, location: :expression, message: MSG, severity: :warning)
48
- end
49
- end
50
-
51
- def autocorrect(node)
52
- lambda do |corrector|
53
- ps_cb_helper?(node) do |ver|
48
+ ps_cb_helper?(node) do |ver|
49
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
54
50
  corrector.replace(node.loc.expression, "node['powershell']['version'].to_f == #{ver.source}")
55
51
  end
56
52
  end
@@ -30,20 +30,21 @@ module RuboCop
30
30
  # # good
31
31
  # include_recipe 'foo'
32
32
  #
33
- class RequireRecipe < Cop
33
+ class RequireRecipe < Base
34
+ extend AutoCorrector
35
+
34
36
  MSG = 'Use include_recipe instead of the require_recipe method'
37
+ RESTRICT_ON_SEND = [:require_recipe].freeze
35
38
 
36
39
  def_node_matcher :require_recipe?, <<-PATTERN
37
40
  (send nil? :require_recipe $str)
38
41
  PATTERN
39
42
 
40
43
  def on_send(node)
41
- require_recipe?(node) { add_offense(node, location: :selector, message: MSG, severity: :warning) }
42
- end
43
-
44
- def autocorrect(node)
45
- lambda do |corrector|
46
- corrector.replace(node.loc.selector, 'include_recipe')
44
+ require_recipe?(node) do
45
+ add_offense(node.loc.selector, message: MSG, severity: :warning) do |corrector|
46
+ corrector.replace(node.loc.selector, 'include_recipe')
47
+ end
47
48
  end
48
49
  end
49
50
  end
@@ -31,15 +31,15 @@ module RuboCop
31
31
  # # good
32
32
  # provides :SOME_PROVIDER_NAME
33
33
  #
34
- class ResourceOverridesProvidesMethod < Cop
34
+ class ResourceOverridesProvidesMethod < Base
35
35
  MSG = "Don't override the provides? method in a resource provider. Use provides :SOME_PROVIDER_NAME instead. This will cause failures in Chef Infra Client 13 and later."
36
36
 
37
37
  def_node_search :provides, '(send nil? :provides ...)'
38
38
 
39
39
  def on_def(node)
40
- if node.method_name == :provides?
41
- add_offense(node, location: :expression, message: MSG, severity: :warning) if provides(processed_source.ast).count == 0
42
- end
40
+ return unless node.method_name == :provides?
41
+
42
+ add_offense(node, message: MSG, severity: :warning) if provides(processed_source.ast).count == 0
43
43
  end
44
44
  end
45
45
  end
@@ -29,11 +29,12 @@ module RuboCop
29
29
  # # good
30
30
  # my_resource = MyResource.resource_name
31
31
  #
32
- class ResourceUsesDslNameMethod < Cop
32
+ class ResourceUsesDslNameMethod < Base
33
33
  MSG = 'Use resource_name instead of the dsl_name method in resources. This will cause failures in Chef Infra Client 13 and later.'
34
+ RESTRICT_ON_SEND = [:dsl_name].freeze
34
35
 
35
36
  def on_send(node)
36
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :dsl_name
37
+ add_offense(node, message: MSG, severity: :warning)
37
38
  end
38
39
 
39
40
  # potential autocorrect is new_resource.updated_by_last_action true, but we need to actually see what class we were called from
@@ -27,11 +27,13 @@ module RuboCop
27
27
  # mycookbook/resources/myresource.rb:
28
28
  # resource_name :mycookbook_myresource
29
29
  #
30
- class ResourceUsesOnlyResourceName < Cop
30
+ class ResourceUsesOnlyResourceName < Base
31
31
  include RuboCop::Chef::CookbookHelpers
32
32
  include RangeHelp
33
+ extend AutoCorrector
33
34
 
34
35
  MSG = 'Starting with Chef Infra Client 16, using `resource_name` without also using `provides` will result in resource failures. Make sure to use both `resource_name` and `provides` to change the name of the resource. You can also omit `resource_name` entirely if the value set matches the name Chef Infra Client automatically assigns based on COOKBOOKNAME_FILENAME.'
36
+ RESTRICT_ON_SEND = [:resource_name].freeze
35
37
 
36
38
  def_node_matcher :resource_name?, '(send nil? :resource_name (sym $_ ))'
37
39
 
@@ -64,14 +66,9 @@ module RuboCop
64
66
  end
65
67
 
66
68
  def on_send(node)
67
- resource_name?(node) do |r_name|
68
- add_offense(node, location: :expression, message: MSG, severity: :warning) unless valid_provides?(r_name)
69
- end
70
- end
71
-
72
- def autocorrect(node)
73
- lambda do |corrector|
74
- resource_name?(node) do |name|
69
+ resource_name?(node) do |name|
70
+ return if valid_provides?(name)
71
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
75
72
  if name.to_s == "#{cookbook_name}_#{File.basename(processed_source.path, '.rb')}"
76
73
  corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
77
74
  else