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
@@ -26,11 +26,12 @@ module RuboCop
26
26
  # # bad
27
27
  # provider_base ::Chef::Provider::SomethingSomething
28
28
  #
29
- class ResourceUsesProviderBaseMethod < Cop
29
+ class ResourceUsesProviderBaseMethod < Base
30
30
  MSG = "Don't use the deprecated provider_base method in a resource to specify the provider module to use. Instead, the provider should call provides to register itself, or the resource should call provider to specify the provider to use. This will cause failures in Chef Infra Client 13 and later."
31
+ RESTRICT_ON_SEND = [:provider_base].freeze
31
32
 
32
33
  def on_send(node)
33
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :provider_base
34
+ add_offense(node, message: MSG, severity: :warning)
34
35
  end
35
36
  end
36
37
  end
@@ -34,11 +34,11 @@ module RuboCop
34
34
  # # code that causes the resource to converge
35
35
  # end
36
36
  #
37
- class ResourceUsesUpdatedMethod < Cop
37
+ class ResourceUsesUpdatedMethod < Base
38
38
  MSG = "Don't use updated = true/false to update resource state. This will cause failures in Chef Infra Client 13 and later."
39
39
 
40
40
  def on_lvasgn(node)
41
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.node_parts.first == :updated
41
+ add_offense(node, message: MSG, severity: :warning) if node.node_parts.first == :updated
42
42
  end
43
43
 
44
44
  # potential autocorrect is new_resource.updated_by_last_action true, but we need to actually see what class we were called from
@@ -36,6 +36,7 @@ module RuboCop
36
36
  extend RuboCop::Cop::AutoCorrector
37
37
 
38
38
  MSG = 'Pass options to shell_out helpers without the brackets to avoid Ruby 2.7 deprecation warnings.'
39
+ RESTRICT_ON_SEND = [:shell_out!, :shell_out].freeze
39
40
 
40
41
  def_node_matcher :positional_shellout?, <<-PATTERN
41
42
  (send nil? {:shell_out :shell_out!} ... $(hash ... ))
@@ -40,24 +40,22 @@ module RuboCop
40
40
  # action :run
41
41
  # end
42
42
  #
43
- class RubyBlockCreateAction < Cop
43
+ class RubyBlockCreateAction < Base
44
44
  include RuboCop::Chef::CookbookHelpers
45
+ extend AutoCorrector
45
46
 
46
47
  MSG = 'Use the :run action in the ruby_block resource instead of the deprecated :create action'
47
48
 
48
49
  def on_block(node)
49
50
  match_property_in_resource?(:ruby_block, 'action', node) do |ruby_action|
50
51
  ruby_action.arguments.each do |action|
51
- add_offense(action, location: :expression, message: MSG, severity: :warning) if action.source == ':create'
52
+ next unless action.source == ':create'
53
+ add_offense(action.loc.expression, message: MSG, severity: :warning) do |corrector|
54
+ corrector.replace(action.loc.expression, ':run')
55
+ end
52
56
  end
53
57
  end
54
58
  end
55
-
56
- def autocorrect(node)
57
- lambda do |corrector|
58
- corrector.replace(node.loc.expression, ':run')
59
- end
60
- end
61
59
  end
62
60
  end
63
61
  end
@@ -33,8 +33,9 @@ module RuboCop
33
33
  # # good
34
34
  # shell_out!('/bin/foo')
35
35
  #
36
- class UsesRunCommandHelper < Cop
36
+ class UsesRunCommandHelper < Base
37
37
  MSG = "Use 'shell_out!' instead of the legacy 'run_command' or 'run_command_with_systems_locale' helpers for shelling out. The run_command helper was removed in Chef Infra Client 13."
38
+ RESTRICT_ON_SEND = [:require, :run_command, :run_command_with_systems_locale, :include].freeze
38
39
 
39
40
  def_node_matcher :calls_run_command?, '(send nil? {:run_command :run_command_with_systems_locale} ...)'
40
41
  def_node_matcher :require_mixin_command?, '(send nil? :require (str "chef/mixin/command"))'
@@ -44,15 +45,15 @@ module RuboCop
44
45
 
45
46
  def on_send(node)
46
47
  calls_run_command?(node) do
47
- add_offense(node, location: :expression, message: MSG, severity: :warning) unless defines_run_command?(processed_source.ast)
48
+ add_offense(node, message: MSG, severity: :warning) unless defines_run_command?(processed_source.ast)
48
49
  end
49
50
 
50
51
  require_mixin_command?(node) do
51
- add_offense(node, location: :expression, message: MSG, severity: :warning)
52
+ add_offense(node, message: MSG, severity: :warning)
52
53
  end
53
54
 
54
55
  include_mixin_command?(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
@@ -35,8 +35,11 @@ module RuboCop
35
35
  # search(:node, '*:*', start: 0, rows: 1000)
36
36
  # search(:node, '*:*', start: 0)
37
37
  #
38
- class SearchUsesPositionalParameters < Cop
38
+ class SearchUsesPositionalParameters < Base
39
+ extend AutoCorrector
40
+
39
41
  MSG = "Don't use deprecated positional parameters in cookbook search queries."
42
+ RESTRICT_ON_SEND = [:search].freeze
40
43
 
41
44
  NAMED_PARAM_LOOKUP_TABLE = [nil, nil, 'start', 'rows', 'filter_result'].freeze
42
45
 
@@ -46,18 +49,16 @@ module RuboCop
46
49
 
47
50
  def on_send(node)
48
51
  search_method?(node) do
49
- add_offense(node, location: :expression, message: MSG, severity: :warning) if positional_arguments?(node)
50
- end
51
- end
52
-
53
- def autocorrect(node)
54
- lambda do |corrector|
55
- corrector.replace(node.loc.expression, corrected_string(node))
52
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
53
+ corrector.replace(node.loc.expression, corrected_string(node))
54
+ end if positional_arguments?(node)
56
55
  end
57
56
  end
58
57
 
59
58
  private
60
59
 
60
+ VALID_TYPES = %i(send hash block_pass).freeze
61
+
61
62
  #
62
63
  # Are the arguments in the passed node object positional
63
64
  #
@@ -69,7 +70,7 @@ module RuboCop
69
70
  return false if node.arguments.count < 3
70
71
  node.arguments[2..-1].each do |arg|
71
72
  # hashes, blocks, or variable/methods are valid. Anything else is not
72
- return true unless %i(send hash block_pass).include?(arg.type)
73
+ return true unless VALID_TYPES.include?(arg.type)
73
74
  end
74
75
  false
75
76
  end
@@ -82,7 +83,7 @@ module RuboCop
82
83
  # @return [String]
83
84
  #
84
85
  def corrected_string(node)
85
- args = node.arguments
86
+ args = node.arguments.dup
86
87
 
87
88
  # If the 2nd argument is a String and not an Integer as a String
88
89
  # then it's the old sort field and we need to delete it. Same thing
@@ -29,27 +29,24 @@ module RuboCop
29
29
  # use_inline_resources if defined?(use_inline_resources)
30
30
  # use_inline_resources if respond_to?(:use_inline_resources)
31
31
  #
32
- class UseInlineResourcesDefined < Cop
32
+ class UseInlineResourcesDefined < Base
33
33
  include RangeHelp
34
+ extend AutoCorrector
34
35
 
35
36
  MSG = 'use_inline_resources is now the default for resources in Chef Infra Client 13+ and does not need to be specified.'
37
+ RESTRICT_ON_SEND = [:use_inline_resources].freeze
36
38
 
37
39
  def on_send(node)
38
- if node.method_name == :use_inline_resources
39
- # don't alert on the use_inline_resources within the defined? check
40
- # that would result in 2 alerts on the same line and wouldn't be useful
41
- return if node.parent && node.parent.defined_type?
40
+ # don't alert on the use_inline_resources within the defined? check
41
+ # that would result in 2 alerts on the same line and wouldn't be useful
42
+ return if node.parent && node.parent.defined_type?
42
43
 
43
- # catch the full offense if the method is gated like this: use_inline_resources if defined?(use_inline_resources)
44
- if node.parent && node.parent.if_type? && %i(defined? respond_to?).include?(node.parent.children.first.method_name)
45
- node = node.parent
46
- end
47
- add_offense(node, location: :expression, message: MSG, severity: :warning)
44
+ # catch the full offense if the method is gated like this: use_inline_resources if defined?(use_inline_resources)
45
+ if node.parent && node.parent.if_type? && %i(defined? respond_to?).include?(node.parent.children.first.method_name)
46
+ node = node.parent
48
47
  end
49
- end
50
48
 
51
- def autocorrect(node)
52
- lambda do |corrector|
49
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
53
50
  corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
54
51
  end
55
52
  end
@@ -41,30 +41,27 @@ module RuboCop
41
41
  # non_unique true
42
42
  # end
43
43
  #
44
- class UserDeprecatedSupportsProperty < Cop
44
+ class UserDeprecatedSupportsProperty < Base
45
45
  include RuboCop::Chef::CookbookHelpers
46
+ extend AutoCorrector
46
47
 
47
48
  MSG = "The supports property was removed in Chef Infra Client 13 in favor of individual 'manage_home' and 'non_unique' properties."
48
49
 
49
50
  def on_block(node)
50
51
  match_property_in_resource?(:user, 'supports', node) do |property|
51
- add_offense(property, location: :expression, message: MSG, severity: :warning)
52
- end
53
- end
52
+ add_offense(property, message: MSG, severity: :warning) do |corrector|
53
+ new_text = []
54
54
 
55
- def autocorrect(node)
56
- lambda do |corrector|
57
- new_text = []
55
+ property.arguments.first.each_pair do |k, v|
56
+ # account for a strange edge case where the person incorrectly makes "manage_home a method
57
+ # the code would be broken, but without this handling cookstyle would explode
58
+ key_value = (k.send_type? && k.method_name == :manage_home) ? 'manage_home' : k.value
58
59
 
59
- node.arguments.first.each_pair do |k, v|
60
- # account for a strange edge case where the person incorrectly makes "manage_home a method
61
- # the code would be broken, but without this handling cookstyle would explode
62
- key_value = (k.send_type? && k.method_name == :manage_home) ? 'manage_home' : k.value
60
+ new_text << "#{key_value} #{v.source}"
61
+ end
63
62
 
64
- new_text << "#{key_value} #{v.source}"
63
+ corrector.replace(property.loc.expression, new_text.join("\n "))
65
64
  end
66
-
67
- corrector.replace(node.loc.expression, new_text.join("\n "))
68
65
  end
69
66
  end
70
67
  end
@@ -33,9 +33,10 @@ module RuboCop
33
33
  # verify 'nginx -t -c %{path}'
34
34
  # end
35
35
  #
36
- class VerifyPropertyUsesFileExpansion < Cop
36
+ class VerifyPropertyUsesFileExpansion < Base
37
37
  include RuboCop::Chef::CookbookHelpers
38
38
  extend TargetChefVersion
39
+ extend AutoCorrector
39
40
 
40
41
  minimum_target_chef_version '12.5'
41
42
 
@@ -43,13 +44,10 @@ module RuboCop
43
44
 
44
45
  def on_block(node)
45
46
  match_property_in_resource?(nil, 'verify', node) do |verify|
46
- add_offense(verify, location: :expression, message: MSG, severity: :warning) if verify.source.match?(/%{file}/)
47
- end
48
- end
49
-
50
- def autocorrect(node)
51
- lambda do |corrector|
52
- corrector.replace(node.loc.expression, node.loc.expression.source.gsub('%{file}', '%{path}'))
47
+ return unless verify.source.match?(/%{file}/)
48
+ add_offense(verify, message: MSG, severity: :warning) do |corrector|
49
+ corrector.replace(verify.loc.expression, verify.loc.expression.source.gsub('%{file}', '%{path}'))
50
+ end
53
51
  end
54
52
  end
55
53
  end
@@ -41,14 +41,14 @@ module RuboCop
41
41
  #
42
42
  # windows_feature_powershell 'DHCP'
43
43
  #
44
- class WindowsFeatureServermanagercmd < Cop
44
+ class WindowsFeatureServermanagercmd < Base
45
45
  include RuboCop::Chef::CookbookHelpers
46
46
 
47
47
  MSG = 'The `windows_feature` resource no longer supports setting the `install_method` to `:servermanagercmd`. `:windows_feature_dism` or `:windows_feature_powershell` should be used instead.'
48
48
 
49
49
  def on_block(node)
50
50
  match_property_in_resource?(:windows_feature, :install_method, node) do |prop_node|
51
- add_offense(prop_node, location: :expression, message: MSG, severity: :warning) if prop_node.source.match?(/:servermanagercmd/)
51
+ add_offense(prop_node, message: MSG, severity: :warning) if prop_node.source.include?(':servermanagercmd')
52
52
  end
53
53
  end
54
54
  end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: 2020, 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
+ # In Chef Infra Client 13 and later the `windows_package` resource's `installer_type` property must be a symbol.
24
+ #
25
+ # @example
26
+ #
27
+ # # bad
28
+ # windows_package 'AppveyorDeploymentAgent' do
29
+ # source 'https://www.example.com/appveyor.msi'
30
+ # installer_type 'msi'
31
+ # options "/quiet /qn /norestart /log install.log"
32
+ # end
33
+ #
34
+ # # good
35
+ # windows_package 'AppveyorDeploymentAgent' do
36
+ # source 'https://www.example.com/appveyor.msi'
37
+ # installer_type :msi
38
+ # options "/quiet /qn /norestart /log install.log"
39
+ # end
40
+ #
41
+ class WindowsPackageInstallerTypeString < Base
42
+ include RuboCop::Chef::CookbookHelpers
43
+ extend AutoCorrector
44
+
45
+ MSG = "In Chef Infra Client 13 and later the `windows_package` resource's `installer_type` property must be a symbol."
46
+
47
+ def on_block(node)
48
+ match_property_in_resource?(:windows_package, 'installer_type', node) do |offense|
49
+ return unless offense.arguments.count == 1 # we can only analyze simple string args
50
+ return unless offense.arguments.first.str_type? # anything else is fine
51
+
52
+ add_offense(offense.loc.expression, message: MSG, severity: :warning) do |corrector|
53
+ corrector.replace(offense.arguments.first.source_range, ":#{offense.arguments.first.value}")
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -40,9 +40,10 @@ module RuboCop
40
40
  # action :create
41
41
  # end
42
42
  #
43
- class WindowsTaskChangeAction < Cop
43
+ class WindowsTaskChangeAction < Base
44
44
  include RuboCop::Chef::CookbookHelpers
45
45
  extend TargetChefVersion
46
+ extend AutoCorrector
46
47
 
47
48
  minimum_target_chef_version '13.0'
48
49
 
@@ -60,25 +61,19 @@ module RuboCop
60
61
  end
61
62
  end
62
63
 
63
- def autocorrect(node)
64
- if node.parent.send_type? # :change was the only action
65
- lambda do |corrector|
66
- corrector.replace(node.loc.expression, ':create')
67
- end
68
- # chances are it's [:create, :change] since that's all that makes sense, but double check that theory
69
- elsif node.parent.child_nodes.count == 2 &&
70
- node.parent.child_nodes.map(&:value).sort == [:change, :create]
71
- lambda do |corrector|
72
- corrector.replace(node.parent.loc.expression, ':create')
73
- end
74
- end
75
- end
76
-
77
64
  private
78
65
 
79
66
  def check_action(ast_obj)
80
67
  if ast_obj.respond_to?(:value) && ast_obj.value == :change
81
- add_offense(ast_obj, location: :expression, message: MSG, severity: :warning)
68
+ add_offense(ast_obj, message: MSG, severity: :warning) do |corrector|
69
+ if ast_obj.parent.send_type? # :change was the only action
70
+ corrector.replace(ast_obj.loc.expression, ':create')
71
+ # chances are it's [:create, :change] since that's all that makes sense, but double check that theory
72
+ elsif ast_obj.parent.child_nodes.count == 2 &&
73
+ ast_obj.parent.child_nodes.map(&:value).sort == [:change, :create]
74
+ corrector.replace(ast_obj.parent.loc.expression, ':create')
75
+ end
76
+ end
82
77
  end
83
78
  end
84
79
  end
@@ -35,8 +35,9 @@ module RuboCop
35
35
  # node['kernel']['server_core']
36
36
  # node['kernel']['product_type'] == 'Workstation'
37
37
  #
38
- class WindowsVersionHelpers < Cop
38
+ class WindowsVersionHelpers < Base
39
39
  extend TargetChefVersion
40
+ extend AutoCorrector
40
41
 
41
42
  minimum_target_chef_version '14.0'
42
43
 
@@ -47,14 +48,8 @@ module RuboCop
47
48
  PATTERN
48
49
 
49
50
  def on_send(node)
50
- windows_helper?(node) do
51
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
52
- end
53
- end
54
-
55
- def autocorrect(node)
56
- lambda do |corrector|
57
- windows_helper?(node) do |method|
51
+ windows_helper?(node) do |method|
52
+ add_offense(node, message: MSG, severity: :refactor) do |corrector|
58
53
  case method
59
54
  when :nt_version
60
55
  corrector.replace(node.loc.expression, 'node[\'platform_version\'].to_f')
@@ -26,8 +26,11 @@ module RuboCop
26
26
  # # bad
27
27
  # include_recipe 'xml::ruby'
28
28
  #
29
- class IncludingXMLRubyRecipe < Cop
29
+ class IncludingXMLRubyRecipe < Base
30
+ extend AutoCorrector
31
+
30
32
  MSG = 'Do not include the deprecated xml::ruby recipe to install the nokogiri gem. Chef Infra Client 12 and later ships with nokogiri included.'
33
+ RESTRICT_ON_SEND = [:include_recipe].freeze
31
34
 
32
35
  def_node_matcher :xml_ruby_recipe?, <<-PATTERN
33
36
  (send nil? :include_recipe (str "xml::ruby"))
@@ -36,13 +39,9 @@ module RuboCop
36
39
  def on_send(node)
37
40
  xml_ruby_recipe?(node) do
38
41
  node = node.parent if node.parent&.conditional? && node.parent&.single_line_condition? # make sure we catch any inline conditionals
39
- add_offense(node, location: :expression, message: MSG, severity: :warning)
40
- end
41
- end
42
-
43
- def autocorrect(node)
44
- lambda do |corrector|
45
- corrector.remove(node.loc.expression)
42
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
43
+ corrector.remove(node.loc.expression)
44
+ end
46
45
  end
47
46
  end
48
47
  end