cookstyle 6.13.3 → 6.16.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/config/cookstyle.yml +81 -46
  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 +7 -7
  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 +2 -2
  15. data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +2 -2
  16. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +21 -4
  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 +2 -2
  19. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +12 -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 +4 -3
  22. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +4 -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 +67 -0
  26. data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +4 -5
  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 +11 -11
  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 +2 -2
  39. data/lib/rubocop/cop/chef/correctness/tmp_path.rb +3 -4
  40. data/lib/rubocop/cop/chef/{correctness → deprecation}/cb_depends_on_self.rb +6 -11
  41. data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +5 -8
  42. data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +7 -10
  43. data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +3 -3
  44. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +15 -28
  45. data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +5 -8
  46. data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +3 -6
  47. data/lib/rubocop/cop/chef/deprecation/cheffile.rb +5 -7
  48. data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +5 -8
  49. data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +5 -8
  50. data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +6 -8
  51. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +5 -8
  52. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +2 -2
  53. data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +2 -2
  54. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +11 -14
  55. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +11 -10
  56. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +2 -2
  57. data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +2 -2
  58. data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +2 -2
  59. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +8 -8
  60. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +2 -2
  61. data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +4 -4
  62. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +5 -6
  63. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +2 -2
  64. data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +11 -12
  65. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +6 -8
  66. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +6 -9
  67. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +5 -9
  68. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +2 -2
  69. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -2
  70. data/lib/rubocop/cop/chef/deprecation/macos_userdefaults_global_property.rb +61 -0
  71. data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +4 -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 +2 -2
  78. data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +7 -5
  79. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +5 -9
  80. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +7 -7
  81. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +2 -2
  82. data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +2 -2
  83. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +8 -12
  84. data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +2 -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 +6 -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 +4 -4
  89. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +6 -8
  90. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +5 -7
  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 +6 -8
  97. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +5 -8
  98. data/lib/rubocop/cop/chef/effortless/berksfile.rb +3 -5
  99. data/lib/rubocop/cop/chef/effortless/data_bags.rb +2 -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 +9 -6
  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 +2 -2
  105. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +17 -17
  106. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +2 -2
  107. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +9 -9
  108. data/lib/rubocop/cop/chef/modernize/build_essential.rb +6 -8
  109. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +5 -8
  110. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +11 -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 +5 -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 +12 -14
  117. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +5 -8
  118. data/lib/rubocop/cop/chef/modernize/definitions.rb +3 -3
  119. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +5 -8
  120. data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +5 -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 +6 -4
  123. data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +6 -9
  124. data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +6 -11
  125. data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +5 -9
  126. data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +7 -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 +5 -8
  130. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +12 -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 +5 -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 +2 -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 +5 -9
  143. data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +14 -16
  144. data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +11 -15
  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 +7 -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 +1 -1
  152. data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +2 -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 +4 -6
  157. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +5 -8
  158. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +14 -13
  159. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +6 -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 +5 -8
  162. data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +6 -7
  163. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +2 -2
  164. data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +3 -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 +6 -9
  171. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +4 -5
  172. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +4 -5
  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 +6 -10
  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 +4 -9
  178. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +4 -5
  179. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +4 -5
  180. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +4 -5
  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 +5 -7
  183. data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +6 -9
  184. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +4 -5
  185. data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +9 -9
  186. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +7 -9
  187. data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +2 -2
  188. data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +4 -3
  189. data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +5 -5
  190. data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +7 -7
  191. data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +6 -6
  192. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +6 -8
  193. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +7 -12
  194. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +3 -4
  195. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +5 -7
  196. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +5 -9
  197. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +5 -7
  198. data/lib/rubocop/cop/chef/style/comments_format.rb +13 -16
  199. data/lib/rubocop/cop/chef/style/file_mode.rb +38 -19
  200. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +6 -8
  201. data/lib/rubocop/cop/chef/style/negating_only_if.rb +5 -9
  202. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +5 -9
  203. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +6 -8
  204. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +4 -9
  205. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +17 -28
  206. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +6 -10
  207. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +11 -19
  208. data/lib/rubocop/monkey_patches/{cop.rb → base.rb} +1 -1
  209. metadata +9 -7
@@ -31,8 +31,9 @@ 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."
38
39
 
@@ -44,14 +45,8 @@ module RuboCop
44
45
  PATTERN
45
46
 
46
47
  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|
48
+ name_property_with_default?(node) do |default|
49
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
55
50
  range = range_with_surrounding_comma(range_with_surrounding_space(range: default.loc.expression, side: :left), :left)
56
51
  corrector.remove(range)
57
52
  end
@@ -37,7 +37,9 @@ module RuboCop
37
37
  # node['platform_version']
38
38
  # node['hostname']
39
39
  #
40
- class NodeMethodsInsteadofAttributes < Cop
40
+ class NodeMethodsInsteadofAttributes < Base
41
+ extend AutoCorrector
42
+
41
43
  MSG = 'Use node attributes to access Ohai data instead of node methods, which were deprecated in Chef Infra Client 13.'
42
44
 
43
45
  def_node_matcher :node_ohai_methods?, <<-PATTERN
@@ -46,13 +48,9 @@ module RuboCop
46
48
 
47
49
  def on_send(node)
48
50
  node_ohai_methods?(node) do
49
- add_offense(node, location: :selector, message: MSG, severity: :warning)
50
- end
51
- end
52
-
53
- def autocorrect(node)
54
- lambda do |corrector|
55
- corrector.replace(node.loc.expression, "node['#{node.method_name}']")
51
+ add_offense(node.loc.selector, message: MSG, severity: :warning) do |corrector|
52
+ corrector.replace(node.loc.expression, "node['#{node.method_name}']")
53
+ end
56
54
  end
57
55
  end
58
56
 
@@ -30,7 +30,9 @@ module RuboCop
30
30
  # # good
31
31
  # node.normal['foo'] = true
32
32
  #
33
- class NodeSet < Cop
33
+ class NodeSet < Base
34
+ extend AutoCorrector
35
+
34
36
  MSG = 'Do not use node.set. Replace with node.normal to keep identical behavior.'
35
37
 
36
38
  def_node_matcher :node_set?, <<-PATTERN
@@ -39,13 +41,9 @@ module RuboCop
39
41
 
40
42
  def on_send(node)
41
43
  node_set?(node) do
42
- add_offense(node, location: :selector, message: MSG, severity: :warning)
43
- end
44
- end
45
-
46
- def autocorrect(node)
47
- lambda do |corrector|
48
- corrector.replace(node.loc.selector, 'normal')
44
+ add_offense(node.loc.selector, message: MSG, severity: :warning) do |corrector|
45
+ corrector.replace(node.loc.selector, 'normal')
46
+ end
49
47
  end
50
48
  end
51
49
  end
@@ -30,7 +30,9 @@ module RuboCop
30
30
  # # good
31
31
  # node.normal_unless['foo'] = true
32
32
  #
33
- class NodeSetUnless < Cop
33
+ class NodeSetUnless < Base
34
+ extend AutoCorrector
35
+
34
36
  MSG = 'Do not use node.set_unless. Replace with node.normal_unless to keep identical behavior.'
35
37
 
36
38
  def_node_matcher :node_set_unless?, <<-PATTERN
@@ -39,13 +41,9 @@ module RuboCop
39
41
 
40
42
  def on_send(node)
41
43
  node_set_unless?(node) do
42
- add_offense(node, location: :selector, message: MSG, severity: :warning)
43
- end
44
- end
45
-
46
- def autocorrect(node)
47
- lambda do |corrector|
48
- corrector.replace(node.loc.selector, 'normal_unless')
44
+ add_offense(node.loc.selector, message: MSG, severity: :warning) do |corrector|
45
+ corrector.replace(node.loc.selector, 'normal_unless')
46
+ end
49
47
  end
50
48
  end
51
49
  end
@@ -34,7 +34,7 @@ module RuboCop
34
34
  # node.default['foo']['bar'] += 1
35
35
  # node.default['foo']['bar'] -= 1
36
36
  #
37
- class NodeSetWithoutLevel < Cop
37
+ class NodeSetWithoutLevel < Base
38
38
  MSG = 'When setting a node attribute in Chef Infra Client 11 and later you must specify the precedence level.'
39
39
 
40
40
  def on_op_asgn(node)
@@ -55,9 +55,11 @@ module RuboCop
55
55
 
56
56
  def add_offense_for_bare_assignment(sub_node)
57
57
  if sub_node.receiver == s(:send, nil, :node) # node['foo'] scenario
58
- add_offense(sub_node.receiver, location: :selector, message: MSG, severity: :warning)
59
- elsif sub_node.receiver && sub_node.receiver&.node_parts[0] == s(:send, nil, :node) && sub_node.receiver&.node_parts[1] == :[] # node['foo']['bar'] scenario
60
- add_offense(sub_node.receiver.node_parts.first, location: :selector, message: MSG, severity: :warning)
58
+ add_offense(sub_node.receiver.loc.selector, message: MSG, severity: :warning)
59
+ elsif sub_node.receiver &&
60
+ sub_node.receiver&.node_parts[0] == s(:send, nil, :node) &&
61
+ sub_node.receiver&.node_parts[1] == :[] # node['foo']['bar'] scenario
62
+ add_offense(sub_node.receiver.node_parts.first.loc.selector, message: MSG, severity: :warning)
61
63
  end
62
64
  end
63
65
  end
@@ -47,7 +47,7 @@ module RuboCop
47
47
  # puts result['kernel_version']
48
48
  # end
49
49
  #
50
- class PartialSearchClassUsage < Cop
50
+ class PartialSearchClassUsage < Base
51
51
  MSG = 'Legacy Chef::PartialSearch class usage should be updated to use the search helper instead with the filter_result key.'
52
52
 
53
53
  def_node_matcher :partial_search_class?, <<-PATTERN
@@ -56,7 +56,7 @@ module RuboCop
56
56
 
57
57
  def on_send(node)
58
58
  partial_search_class?(node) do
59
- add_offense(node, location: :expression, message: MSG, severity: :warning)
59
+ add_offense(node, message: MSG, severity: :warning)
60
60
  end
61
61
  end
62
62
  end
@@ -47,11 +47,11 @@ 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
52
 
53
53
  def on_send(node)
54
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :partial_search
54
+ add_offense(node, message: MSG, severity: :warning) if node.method_name == :partial_search
55
55
  end
56
56
  end
57
57
  end
@@ -25,16 +25,18 @@ module RuboCop
25
25
  #
26
26
  # # bad
27
27
  # poise_archive 'https://example.com/myapp.tgz' do
28
- # destination '/opt/myapp'
28
+ # destination '/opt/my_app'
29
29
  # end
30
30
  #
31
31
  # # good
32
32
  # archive_file 'https://example.com/myapp.tgz' do
33
- # destination '/opt/myapp'
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+'
40
42
 
@@ -44,13 +46,13 @@ module RuboCop
44
46
 
45
47
  def on_send(node)
46
48
  depends_poise_archive?(node) do
47
- add_offense(node, location: :expression, message: MSG, severity: :warning)
49
+ add_offense(node, message: MSG, severity: :warning)
48
50
  end
49
51
  end
50
52
 
51
53
  def on_block(node)
52
54
  match_resource_type?(:poise_archive, node) do
53
- add_offense(node, location: :expression, message: MSG, severity: :warning)
55
+ add_offense(node, message: MSG, severity: :warning)
54
56
  end
55
57
  end
56
58
  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,7 +30,9 @@ 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'
35
37
 
36
38
  def_node_matcher :require_recipe?, <<-PATTERN
@@ -38,12 +40,10 @@ module RuboCop
38
40
  PATTERN
39
41
 
40
42
  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')
43
+ require_recipe?(node) do
44
+ add_offense(node.loc.selector, message: MSG, severity: :warning) do |corrector|
45
+ corrector.replace(node.loc.selector, 'include_recipe')
46
+ end
47
47
  end
48
48
  end
49
49
  end
@@ -31,14 +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
36
 
37
37
  def_node_search :provides, '(send nil? :provides ...)'
38
38
 
39
39
  def on_def(node)
40
40
  if node.method_name == :provides?
41
- add_offense(node, location: :expression, message: MSG, severity: :warning) if provides(processed_source.ast).count == 0
41
+ add_offense(node, message: MSG, severity: :warning) if provides(processed_source.ast).count == 0
42
42
  end
43
43
  end
44
44
  end
@@ -29,11 +29,11 @@ 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
34
 
35
35
  def on_send(node)
36
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :dsl_name
36
+ add_offense(node, message: MSG, severity: :warning) if node.method_name == :dsl_name
37
37
  end
38
38
 
39
39
  # potential autocorrect is new_resource.updated_by_last_action true, but we need to actually see what class we were called from
@@ -27,9 +27,10 @@ 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.'
35
36
 
@@ -39,9 +40,9 @@ module RuboCop
39
40
 
40
41
  def_node_search :provides, '(send nil? :provides (sym $_) ...)'
41
42
 
42
- # determine the cookbook name either by parsing metdata.rb or by parsing metata.json
43
+ # determine the cookbook name either by parsing metadata.rb or by parsing metadata.json
43
44
  #
44
- # @returns [String] the cookbook name
45
+ # @return [String] the cookbook name
45
46
  def cookbook_name
46
47
  cb_path = File.expand_path(File.join(processed_source.file_path, '../..'))
47
48
 
@@ -55,7 +56,7 @@ module RuboCop
55
56
 
56
57
  # given a resource name make sure there's a provides that matches that name
57
58
  #
58
- # @returns [TrueClass, FalseClass]
59
+ # @return [TrueClass, FalseClass]
59
60
  def valid_provides?(resource_name)
60
61
  provides_ast = provides(processed_source.ast)
61
62
  return false unless provides_ast
@@ -64,14 +65,9 @@ module RuboCop
64
65
  end
65
66
 
66
67
  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|
68
+ resource_name?(node) do |name|
69
+ return if valid_provides?(name)
70
+ add_offense(node, message: MSG, severity: :warning) do |corrector|
75
71
  if name.to_s == "#{cookbook_name}_#{File.basename(processed_source.path, '.rb')}"
76
72
  corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
77
73
  else
@@ -26,11 +26,11 @@ 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
31
 
32
32
  def on_send(node)
33
- add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :provider_base
33
+ add_offense(node, message: MSG, severity: :warning) if node.method_name == :provider_base
34
34
  end
35
35
  end
36
36
  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,8 +32,8 @@ 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
39
 
@@ -43,14 +43,10 @@ module RuboCop
43
43
 
44
44
  def on_send(node)
45
45
  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(/}$/, ''))
46
+ next unless h.braces?
47
+ add_offense(h.loc.expression, message: MSG, severity: :refactor) do |corrector|
48
+ corrector.replace(h.loc.expression, h.loc.expression.source[1..-2])
49
+ end
54
50
  end
55
51
  end
56
52
  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,7 +33,7 @@ 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
38
 
39
39
  def_node_matcher :calls_run_command?, '(send nil? {:run_command :run_command_with_systems_locale} ...)'
@@ -44,15 +44,15 @@ module RuboCop
44
44
 
45
45
  def on_send(node)
46
46
  calls_run_command?(node) do
47
- add_offense(node, location: :expression, message: MSG, severity: :warning) unless defines_run_command?(processed_source.ast)
47
+ add_offense(node, message: MSG, severity: :warning) unless defines_run_command?(processed_source.ast)
48
48
  end
49
49
 
50
50
  require_mixin_command?(node) do
51
- add_offense(node, location: :expression, message: MSG, severity: :warning)
51
+ add_offense(node, message: MSG, severity: :warning)
52
52
  end
53
53
 
54
54
  include_mixin_command?(node) do
55
- add_offense(node, location: :expression, message: MSG, severity: :warning)
55
+ add_offense(node, message: MSG, severity: :warning)
56
56
  end
57
57
  end
58
58
  end