cookstyle 6.15.3 → 6.16.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (210) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/config/cookstyle.yml +9 -8
  4. data/config/disable_all.yml +20 -0
  5. data/config/upstream.yml +79 -11
  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_windows_platform_helper.rb +5 -8
  47. data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +3 -6
  48. data/lib/rubocop/cop/chef/deprecation/cheffile.rb +3 -5
  49. data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +5 -8
  50. data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +5 -8
  51. data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +6 -8
  52. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +6 -8
  53. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +3 -2
  54. data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +3 -2
  55. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +11 -14
  56. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +12 -10
  57. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +2 -2
  58. data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +11 -12
  59. data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +3 -2
  60. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +8 -8
  61. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +3 -2
  62. data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +3 -2
  63. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +5 -6
  64. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +3 -2
  65. data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +11 -12
  66. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +6 -8
  67. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +6 -9
  68. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +6 -9
  69. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +3 -2
  70. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -2
  71. data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +5 -9
  72. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +6 -8
  73. data/lib/rubocop/cop/chef/deprecation/node_set.rb +6 -8
  74. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +6 -8
  75. data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +6 -4
  76. data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +2 -2
  77. data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +3 -2
  78. data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +4 -3
  79. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +5 -9
  80. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +8 -7
  81. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +4 -4
  82. data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +3 -2
  83. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +6 -9
  84. data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +3 -2
  85. data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +2 -2
  86. data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +7 -10
  87. data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +6 -8
  88. data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +5 -4
  89. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +7 -8
  90. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +10 -13
  91. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +11 -14
  92. data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +6 -8
  93. data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +2 -2
  94. data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +11 -16
  95. data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +4 -9
  96. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +7 -8
  97. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +6 -8
  98. data/lib/rubocop/cop/chef/effortless/berksfile.rb +3 -5
  99. data/lib/rubocop/cop/chef/effortless/data_bags.rb +3 -2
  100. data/lib/rubocop/cop/chef/effortless/node_environment.rb +6 -3
  101. data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +6 -3
  102. data/lib/rubocop/cop/chef/effortless/node_roles.rb +6 -3
  103. data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +4 -3
  104. data/lib/rubocop/cop/chef/effortless/search_used.rb +3 -2
  105. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +16 -16
  106. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +3 -2
  107. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +10 -9
  108. data/lib/rubocop/cop/chef/modernize/build_essential.rb +7 -8
  109. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +6 -8
  110. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +12 -10
  111. data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +2 -2
  112. data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +6 -8
  113. data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +2 -2
  114. data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +4 -6
  115. data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +7 -8
  116. data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +11 -13
  117. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +5 -8
  118. data/lib/rubocop/cop/chef/modernize/definitions.rb +2 -2
  119. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +6 -8
  120. data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +6 -8
  121. data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +5 -8
  122. data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +7 -4
  123. data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +7 -9
  124. data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +7 -11
  125. data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +6 -9
  126. data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +8 -4
  127. data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +7 -12
  128. data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +4 -6
  129. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +6 -8
  130. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +13 -9
  131. data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +4 -6
  132. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +6 -8
  133. data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +5 -9
  134. data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +3 -2
  135. data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +4 -6
  136. data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +4 -6
  137. data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +5 -6
  138. data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +3 -4
  139. data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +5 -9
  140. data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +3 -4
  141. data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +3 -4
  142. data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +6 -9
  143. data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +13 -15
  144. data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +10 -14
  145. data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +3 -4
  146. data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +8 -8
  147. data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +4 -9
  148. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +20 -16
  149. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +6 -8
  150. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +6 -8
  151. data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +2 -1
  152. data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +3 -2
  153. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +3 -8
  154. data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +5 -7
  155. data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +6 -10
  156. data/lib/rubocop/cop/chef/modernize/{systctl_param_resource.rb → sysctl_param_resource.rb} +4 -6
  157. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +6 -8
  158. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +11 -10
  159. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +7 -9
  160. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +5 -8
  161. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +6 -8
  162. data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +6 -7
  163. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +3 -2
  164. data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +4 -3
  165. data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +4 -6
  166. data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +5 -8
  167. data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +6 -8
  168. data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +4 -6
  169. data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +4 -6
  170. data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +8 -13
  171. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +4 -6
  172. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +4 -6
  173. data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +7 -9
  174. data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +2 -2
  175. data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +4 -8
  176. data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +8 -9
  177. data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +5 -9
  178. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +4 -6
  179. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +4 -6
  180. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +4 -6
  181. data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +5 -8
  182. data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +6 -7
  183. data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +7 -9
  184. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +4 -6
  185. data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +1 -0
  186. data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +10 -9
  187. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +7 -9
  188. data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +3 -2
  189. data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +4 -3
  190. data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +4 -3
  191. data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +5 -5
  192. data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +4 -4
  193. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +7 -8
  194. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +8 -12
  195. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +3 -4
  196. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +5 -7
  197. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +5 -9
  198. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +5 -7
  199. data/lib/rubocop/cop/chef/style/comments_format.rb +13 -16
  200. data/lib/rubocop/cop/chef/style/file_mode.rb +1 -0
  201. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +7 -8
  202. data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +1 -0
  203. data/lib/rubocop/cop/chef/style/negating_only_if.rb +5 -9
  204. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +5 -9
  205. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +6 -8
  206. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +6 -9
  207. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +17 -28
  208. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +5 -9
  209. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +11 -19
  210. metadata +6 -6
@@ -38,7 +38,7 @@ module RuboCop
38
38
  # resource = Chef::Resource::File.new("/tmp/foo.xyz", run_context)
39
39
  # provider = resource.provider_for_action(:create)
40
40
  #
41
- class DeprecatedPlatformMethods < Cop
41
+ class DeprecatedPlatformMethods < Base
42
42
  MSG = 'Use provider_for_action instead of the deprecated Chef::Platform methods in resources, which were removed in Chef Infra Client 13.'
43
43
 
44
44
  def_node_matcher :platform_method?, <<-PATTERN
@@ -47,7 +47,7 @@ module RuboCop
47
47
 
48
48
  def on_send(node)
49
49
  platform_method?(node) do
50
- add_offense(node, location: :expression, message: MSG, severity: :warning)
50
+ add_offense(node, message: MSG, severity: :warning)
51
51
  end
52
52
  end
53
53
  end
@@ -39,25 +39,24 @@ module RuboCop
39
39
  # shell_out!('foo')
40
40
  # shell_out!('foo', default_env: false) # replaces shell_out_with_systems_locale
41
41
  #
42
- class DeprecatedShelloutMethods < Cop
42
+ class DeprecatedShelloutMethods < Base
43
43
  extend TargetChefVersion
44
44
 
45
45
  minimum_target_chef_version '14.3'
46
46
 
47
- DEPRECATED_SHELLOUT_METHODS = %i( shell_out_compact
48
- shell_out_compact!
49
- shell_out_compact_timeout
50
- shell_out_compact_timeout!
51
- shell_out_with_timeout
52
- shell_out_with_timeout!
53
- shell_out_with_systems_locale
54
- shell_out_with_systems_locale!
55
- ).freeze
56
-
57
47
  MSG = 'Many legacy specialized shell_out methods were replaced in Chef Infra Client 14.3 and removed in Chef Infra Client 15. Use shell_out and any additional options if necessary.'
48
+ RESTRICT_ON_SEND = %i( shell_out_compact
49
+ shell_out_compact!
50
+ shell_out_compact_timeout
51
+ shell_out_compact_timeout!
52
+ shell_out_with_timeout
53
+ shell_out_with_timeout!
54
+ shell_out_with_systems_locale
55
+ shell_out_with_systems_locale!
56
+ ).freeze
58
57
 
59
58
  def on_send(node)
60
- add_offense(node, location: :expression, message: MSG, severity: :warning) if DEPRECATED_SHELLOUT_METHODS.include?(node.method_name)
59
+ add_offense(node, message: MSG, severity: :warning)
61
60
  end
62
61
  end
63
62
  end
@@ -28,11 +28,12 @@ module RuboCop
28
28
  # # do some legacy things
29
29
  # end
30
30
  #
31
- class DeprecatedWindowsVersionCheck < Cop
31
+ class DeprecatedWindowsVersionCheck < Base
32
32
  MSG = "Don't use the deprecated older_than_win_2012_or_8? helper. Windows versions before 2012 and 8 are now end of life and this helper will always return false."
33
+ RESTRICT_ON_SEND = [:older_than_win_2012_or_8?].freeze
33
34
 
34
35
  def on_send(node)
35
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :older_than_win_2012_or_8?
36
+ add_offense(node, message: MSG, severity: :warning)
36
37
  end
37
38
  end
38
39
  end
@@ -41,9 +41,10 @@ module RuboCop
41
41
  # action :create
42
42
  # end
43
43
  #
44
- class DeprecatedYumRepositoryProperties < Cop
44
+ class DeprecatedYumRepositoryProperties < Base
45
45
  include RuboCop::Chef::CookbookHelpers
46
46
  extend TargetChefVersion
47
+ extend AutoCorrector
47
48
 
48
49
  minimum_target_chef_version '12.14'
49
50
 
@@ -52,16 +53,15 @@ module RuboCop
52
53
  def on_block(node)
53
54
  %w(url keyurl mirrorexpire).each do |prop|
54
55
  match_property_in_resource?(:yum_repository, prop, node) do |prop_node|
55
- add_offense(prop_node, location: :expression, message: MSG, severity: :warning)
56
+ add_offense(prop_node, message: MSG, severity: :warning) do |corrector|
57
+ corrector.replace(prop_node.loc.expression, prop_node.loc.expression.source
58
+ .gsub(/^url/, 'baseurl')
59
+ .gsub(/^keyurl/, 'gpgkey')
60
+ .gsub(/^mirrorexpire/, 'mirror_expire'))
61
+ end
56
62
  end
57
63
  end
58
64
  end
59
-
60
- def autocorrect(node)
61
- lambda do |corrector|
62
- corrector.replace(node.loc.expression, node.loc.expression.source.gsub(/^url/, 'baseurl').gsub(/^keyurl/, 'gpgkey').gsub(/^mirrorexpire/, 'mirror_expire'))
63
- end
64
- end
65
65
  end
66
66
  end
67
67
  end
@@ -29,11 +29,12 @@ module RuboCop
29
29
  # bar
30
30
  # end
31
31
  #
32
- class EasyInstallResource < Cop
32
+ class EasyInstallResource < Base
33
33
  MSG = "Don't use the deprecated easy_install resource removed in Chef Infra Client 13"
34
+ RESTRICT_ON_SEND = [:easy_install].freeze
34
35
 
35
36
  def on_send(node)
36
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :easy_install
37
+ add_offense(node, message: MSG, severity: :warning)
37
38
  end
38
39
  end
39
40
  end
@@ -32,14 +32,15 @@ module RuboCop
32
32
  # end
33
33
  # end
34
34
 
35
- class EOLAuditModeUsage < Cop
35
+ class EOLAuditModeUsage < Base
36
36
  MSG = 'The beta Audit Mode feature in Chef Infra Client was removed in Chef Infra Client 15.0. Users should instead use InSpec and the audit cookbook. See https://www.inspec.io/ for more information.'
37
+ RESTRICT_ON_SEND = [:control_group].freeze
37
38
 
38
39
  def_node_matcher :control_group?, '(send nil? :control_group ...)'
39
40
 
40
41
  def on_send(node)
41
42
  control_group?(node) do
42
- add_offense(node, location: :selector, message: MSG, severity: :warning)
43
+ add_offense(node.loc.selector, message: MSG, severity: :warning)
43
44
  end
44
45
  end
45
46
  end
@@ -34,15 +34,14 @@ module RuboCop
34
34
  # ignore_failure true
35
35
  # end
36
36
  #
37
- class EpicFail < Cop
37
+ class EpicFail < Base
38
+ extend AutoCorrector
39
+
38
40
  MSG = 'Use ignore_failure method instead of the deprecated epic_fail method'
41
+ RESTRICT_ON_SEND = [:epic_fail].freeze
39
42
 
40
43
  def on_send(node)
41
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :epic_fail
42
- end
43
-
44
- def autocorrect(node)
45
- lambda do |corrector|
44
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
46
45
  corrector.replace(node.loc.expression, 'ignore_failure true')
47
46
  end
48
47
  end
@@ -29,11 +29,12 @@ module RuboCop
29
29
  # bar
30
30
  # end
31
31
  #
32
- class ErlCallResource < Cop
32
+ class ErlCallResource < Base
33
33
  MSG = "Don't use the deprecated erl_call resource removed in Chef Infra Client 13"
34
+ RESTRICT_ON_SEND = [:erl_call].freeze
34
35
 
35
36
  def on_send(node)
36
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :erl_call
37
+ add_offense(node, message: MSG, severity: :warning)
37
38
  end
38
39
  end
39
40
  end
@@ -82,7 +82,9 @@ module RuboCop
82
82
  # # better
83
83
  # Convert your legacy HWRPs to custom resources
84
84
  #
85
- class HWRPWithoutProvides < Cop
85
+ class HWRPWithoutProvides < Base
86
+ extend AutoCorrector
87
+
86
88
  MSG = 'In Chef Infra Client 16 and later a legacy HWRP resource must use `provides` to define how the resource is called in recipes or other resources. To maintain compatibility with Chef Infra Client < 16 use both `resource_name` and `provides`.'
87
89
 
88
90
  def_node_matcher :HWRP?, <<-PATTERN
@@ -102,8 +104,15 @@ module RuboCop
102
104
  def_node_search :resource_name, '(send nil? :resource_name (sym $_))'
103
105
 
104
106
  def on_class(node)
107
+ return if has_provides?
105
108
  HWRP?(node) do |inherit|
106
- add_offense(inherit, location: :expression, message: MSG, severity: :warning) unless has_provides?
109
+ add_offense(inherit, message: MSG, severity: :warning) do |corrector|
110
+ resource_name_ast(node) do |ast_match|
111
+ # build a new string to add after that includes the new line and the proper indentation
112
+ new_string = "\n" + ast_match.source.dup.gsub('resource_name', 'provides').prepend(' ' * indentation(ast_match))
113
+ corrector.insert_after(ast_match.source_range, new_string)
114
+ end
115
+ end
107
116
  end
108
117
  end
109
118
 
@@ -125,16 +134,6 @@ module RuboCop
125
134
  def indentation(node)
126
135
  node.source_range.source_line =~ /\S/
127
136
  end
128
-
129
- def autocorrect(node)
130
- lambda do |corrector|
131
- resource_name_ast(node) do |ast_match|
132
- # build a new string to add after that includes the new line and the proper indentation
133
- new_string = "\n" + ast_match.source.dup.gsub('resource_name', 'provides').prepend(' ' * indentation(ast_match))
134
- corrector.insert_after(ast_match.source_range, new_string)
135
- end
136
- end
137
- end
138
137
  end
139
138
  end
140
139
  end
@@ -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