cookstyle 6.14.7 → 6.16.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/config/cookstyle.yml +54 -16
  4. data/config/disable_all.yml +48 -4
  5. data/config/upstream.yml +175 -27
  6. data/cookstyle.gemspec +1 -0
  7. data/lib/cookstyle.rb +2 -2
  8. data/lib/cookstyle/version.rb +2 -2
  9. data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +7 -9
  10. data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +5 -9
  11. data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +5 -9
  12. data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +5 -8
  13. data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +11 -9
  14. data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +3 -2
  15. data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +3 -2
  16. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +16 -21
  17. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +15 -23
  18. data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +3 -2
  19. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +13 -14
  20. data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +13 -22
  21. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +5 -3
  22. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +5 -3
  23. data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +3 -4
  24. data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +5 -8
  25. data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +2 -3
  26. data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +6 -7
  27. data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +5 -12
  28. data/lib/rubocop/cop/chef/correctness/node_normal.rb +2 -2
  29. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +2 -2
  30. data/lib/rubocop/cop/chef/correctness/node_save.rb +2 -2
  31. data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +7 -7
  32. data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +2 -2
  33. data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +4 -4
  34. data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +2 -2
  35. data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +2 -2
  36. data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +6 -2
  37. data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +6 -8
  38. data/lib/rubocop/cop/chef/correctness/service_resource.rb +3 -2
  39. data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +1 -0
  40. data/lib/rubocop/cop/chef/correctness/tmp_path.rb +4 -4
  41. data/lib/rubocop/cop/chef/deprecation/ use_automatic_resource_name.rb +1 -2
  42. data/lib/rubocop/cop/chef/{correctness → deprecation}/cb_depends_on_self.rb +7 -11
  43. data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +6 -8
  44. data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +7 -10
  45. data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +4 -3
  46. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +16 -28
  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 +11 -14
  57. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +12 -10
  58. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +2 -2
  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/hwrp_without_provides.rb +11 -12
  67. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +6 -8
  68. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +6 -9
  69. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +6 -9
  70. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +3 -2
  71. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -2
  72. data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +5 -9
  73. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +6 -8
  74. data/lib/rubocop/cop/chef/deprecation/node_set.rb +6 -8
  75. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +6 -8
  76. data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +6 -4
  77. data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +2 -2
  78. data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +3 -2
  79. data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +6 -3
  80. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +5 -9
  81. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +8 -7
  82. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +3 -4
  83. data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +3 -2
  84. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +8 -11
  85. data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +3 -2
  86. data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +2 -2
  87. data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +7 -10
  88. data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +6 -8
  89. data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +5 -4
  90. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +7 -8
  91. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +10 -13
  92. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +11 -14
  93. data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +6 -8
  94. data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +2 -2
  95. data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +11 -16
  96. data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +4 -9
  97. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +7 -8
  98. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +6 -8
  99. data/lib/rubocop/cop/chef/effortless/berksfile.rb +3 -5
  100. data/lib/rubocop/cop/chef/effortless/data_bags.rb +3 -2
  101. data/lib/rubocop/cop/chef/effortless/node_environment.rb +6 -3
  102. data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +6 -3
  103. data/lib/rubocop/cop/chef/effortless/node_roles.rb +6 -3
  104. data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +4 -3
  105. data/lib/rubocop/cop/chef/effortless/search_used.rb +3 -2
  106. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +16 -16
  107. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +3 -2
  108. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +10 -9
  109. data/lib/rubocop/cop/chef/modernize/build_essential.rb +7 -8
  110. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +6 -8
  111. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +12 -10
  112. data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +2 -2
  113. data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +6 -8
  114. data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +2 -2
  115. data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +4 -6
  116. data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +7 -8
  117. data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +11 -13
  118. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +5 -8
  119. data/lib/rubocop/cop/chef/modernize/definitions.rb +2 -2
  120. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +6 -8
  121. data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +6 -8
  122. data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +5 -8
  123. data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +7 -4
  124. data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +7 -9
  125. data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +7 -11
  126. data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +6 -9
  127. data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +8 -4
  128. data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +7 -12
  129. data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +4 -6
  130. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +6 -8
  131. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +13 -9
  132. data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +4 -6
  133. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +6 -8
  134. data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +5 -9
  135. data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +3 -2
  136. data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +4 -6
  137. data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +4 -6
  138. data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +5 -6
  139. data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +3 -4
  140. data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +5 -9
  141. data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +3 -4
  142. data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +3 -4
  143. data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +6 -9
  144. data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +13 -15
  145. data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +10 -14
  146. data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +3 -4
  147. data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +8 -8
  148. data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +4 -9
  149. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +20 -16
  150. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +6 -8
  151. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +6 -8
  152. data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +2 -1
  153. data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +3 -2
  154. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +3 -8
  155. data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +5 -7
  156. data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +6 -10
  157. data/lib/rubocop/cop/chef/modernize/{systctl_param_resource.rb → sysctl_param_resource.rb} +4 -6
  158. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +6 -8
  159. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +11 -10
  160. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +7 -9
  161. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +5 -8
  162. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +6 -8
  163. data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +6 -7
  164. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +3 -2
  165. data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +4 -3
  166. data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +4 -6
  167. data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +5 -8
  168. data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +6 -8
  169. data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +4 -6
  170. data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +4 -6
  171. data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +5 -13
  172. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +4 -6
  173. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +4 -6
  174. data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +7 -9
  175. data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +2 -2
  176. data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +4 -8
  177. data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +8 -9
  178. data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +5 -9
  179. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +4 -6
  180. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +4 -6
  181. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +4 -6
  182. data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +5 -8
  183. data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +6 -7
  184. data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +7 -9
  185. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +4 -6
  186. data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +1 -0
  187. data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +10 -9
  188. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +7 -9
  189. data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +3 -2
  190. data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +4 -3
  191. data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +4 -3
  192. data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +5 -5
  193. data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +4 -4
  194. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +7 -8
  195. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +8 -12
  196. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +3 -4
  197. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +5 -7
  198. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +5 -9
  199. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +5 -7
  200. data/lib/rubocop/cop/chef/style/comments_format.rb +13 -16
  201. data/lib/rubocop/cop/chef/style/file_mode.rb +1 -0
  202. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +7 -8
  203. data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +1 -0
  204. data/lib/rubocop/cop/chef/style/negating_only_if.rb +5 -9
  205. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +5 -9
  206. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +6 -8
  207. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +6 -9
  208. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +17 -28
  209. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +5 -9
  210. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +11 -19
  211. metadata +7 -7
@@ -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,10 +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
+ extend TargetChefVersion
39
+ minimum_target_chef_version '15.0'
38
40
 
39
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
40
43
 
41
44
  def_node_matcher :depends_poise_archive?, <<-PATTERN
42
45
  (send nil? :depends (str "poise-archive"))
@@ -44,13 +47,13 @@ module RuboCop
44
47
 
45
48
  def on_send(node)
46
49
  depends_poise_archive?(node) do
47
- add_offense(node, location: :expression, message: MSG, severity: :warning)
50
+ add_offense(node, message: MSG, severity: :warning)
48
51
  end
49
52
  end
50
53
 
51
54
  def on_block(node)
52
55
  match_resource_type?(:poise_archive, node) do
53
- add_offense(node, location: :expression, message: MSG, severity: :warning)
56
+ add_offense(node, message: MSG, severity: :warning)
54
57
  end
55
58
  end
56
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,14 @@ 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
+ RESTRICT_ON_SEND = [:provides?].freeze
36
37
 
37
38
  def_node_search :provides, '(send nil? :provides ...)'
38
39
 
39
40
  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
41
+ add_offense(node, message: MSG, severity: :warning) if provides(processed_source.ast).count == 0
43
42
  end
44
43
  end
45
44
  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
 
@@ -41,7 +43,7 @@ module RuboCop
41
43
 
42
44
  # determine the cookbook name either by parsing metadata.rb or by parsing metadata.json
43
45
  #
44
- # @returns [String] the cookbook name
46
+ # @return [String] the cookbook name
45
47
  def cookbook_name
46
48
  cb_path = File.expand_path(File.join(processed_source.file_path, '../..'))
47
49
 
@@ -55,7 +57,7 @@ module RuboCop
55
57
 
56
58
  # given a resource name make sure there's a provides that matches that name
57
59
  #
58
- # @returns [TrueClass, FalseClass]
60
+ # @return [TrueClass, FalseClass]
59
61
  def valid_provides?(resource_name)
60
62
  provides_ast = provides(processed_source.ast)
61
63
  return false unless provides_ast
@@ -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
@@ -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
@@ -32,10 +32,11 @@ module RuboCop
32
32
  # shell_out!('hostnamectl status', returns: [0, 1])
33
33
  # shell_out('hostnamectl status', returns: [0, 1])
34
34
  #
35
- class Ruby27KeywordArgumentWarnings < Cop
36
- include RuboCop::Chef::CookbookHelpers
35
+ class Ruby27KeywordArgumentWarnings < Base
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 ... ))
@@ -43,14 +44,10 @@ module RuboCop
43
44
 
44
45
  def on_send(node)
45
46
  positional_shellout?(node) do |h|
46
- add_offense(h, location: :expression, message: MSG, severity: :refactor) if h.braces?
47
- end
48
- end
49
-
50
- def autocorrect(node)
51
- lambda do |corrector|
52
- # @todo when we drop ruby 2.4 support we can convert this to just delete_prefix delete_suffix
53
- corrector.replace(node.loc.expression, node.loc.expression.source.gsub(/^{/, '').gsub(/}$/, ''))
47
+ next unless h.braces?
48
+ add_offense(h.loc.expression, message: MSG, severity: :refactor) do |corrector|
49
+ corrector.replace(h.loc.expression, h.loc.expression.source[1..-2])
50
+ end
54
51
  end
55
52
  end
56
53
  end
@@ -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,13 +49,9 @@ 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
 
@@ -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