cookstyle 7.32.8 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +25 -29
  3. data/LICENSE +201 -201
  4. data/bin/cookstyle +31 -31
  5. data/bin/cookstyle-profile +31 -31
  6. data/config/chefstyle.yml +892 -741
  7. data/config/cookstyle.yml +3273 -3131
  8. data/config/default.yml +2 -2
  9. data/cookstyle.gemspec +34 -30
  10. data/lib/cookstyle/chefstyle.rb +5 -5
  11. data/lib/cookstyle/version.rb +5 -5
  12. data/lib/cookstyle.rb +48 -45
  13. data/lib/rubocop/chef/autocorrect_helpers.rb +33 -33
  14. data/lib/rubocop/chef/cookbook_helpers.rb +127 -127
  15. data/lib/rubocop/chef/cookbook_only.rb +76 -76
  16. data/lib/rubocop/chef/platform_helpers.rb +72 -72
  17. data/lib/rubocop/chef.rb +11 -11
  18. data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +61 -61
  19. data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +56 -56
  20. data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +69 -69
  21. data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +55 -55
  22. data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +77 -77
  23. data/lib/rubocop/cop/chef/correctness/invalid_cookbook_name.rb +47 -47
  24. data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +48 -48
  25. data/lib/rubocop/cop/chef/correctness/invalid_notification_resource.rb +59 -59
  26. data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +55 -55
  27. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +72 -72
  28. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +70 -70
  29. data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +57 -57
  30. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +89 -89
  31. data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +70 -70
  32. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +70 -70
  33. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +69 -69
  34. data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +48 -48
  35. data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +53 -53
  36. data/lib/rubocop/cop/chef/correctness/lazy_in_resource_guard.rb +67 -67
  37. data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +67 -67
  38. data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +67 -67
  39. data/lib/rubocop/cop/chef/correctness/metadata_malformed_version.rb +58 -58
  40. data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +54 -54
  41. data/lib/rubocop/cop/chef/correctness/metadata_missing_version.rb +51 -51
  42. data/lib/rubocop/cop/chef/correctness/node_normal.rb +53 -53
  43. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +53 -53
  44. data/lib/rubocop/cop/chef/correctness/node_save.rb +46 -46
  45. data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +64 -64
  46. data/lib/rubocop/cop/chef/correctness/octal_mode_as_string.rb +48 -48
  47. data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +46 -46
  48. data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +54 -54
  49. data/lib/rubocop/cop/chef/correctness/powershell_file_exists.rb +50 -50
  50. data/lib/rubocop/cop/chef/correctness/property_without_type.rb +59 -59
  51. data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +51 -51
  52. data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +50 -50
  53. data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +56 -56
  54. data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +52 -52
  55. data/lib/rubocop/cop/chef/correctness/service_resource.rb +56 -56
  56. data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +52 -52
  57. data/lib/rubocop/cop/chef/correctness/tmp_path.rb +59 -59
  58. data/lib/rubocop/cop/chef/deprecation/cb_depends_on_self.rb +57 -57
  59. data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +52 -52
  60. data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +55 -55
  61. data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +57 -57
  62. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +98 -98
  63. data/lib/rubocop/cop/chef/deprecation/chef_shellout.rb +83 -83
  64. data/lib/rubocop/cop/chef/deprecation/chef_sugar_helpers.rb +55 -55
  65. data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +55 -55
  66. data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +56 -56
  67. data/lib/rubocop/cop/chef/deprecation/cheffile.rb +39 -39
  68. data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +49 -49
  69. data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +61 -61
  70. data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +56 -56
  71. data/lib/rubocop/cop/chef/deprecation/delivery.rb +48 -48
  72. data/lib/rubocop/cop/chef/deprecation/depends_chef_nginx_cookbook.rb +54 -54
  73. data/lib/rubocop/cop/chef/deprecation/depends_chef_reporting_cookbook.rb +51 -51
  74. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +54 -54
  75. data/lib/rubocop/cop/chef/deprecation/depends_omnibus_updater_cookbook.rb +54 -54
  76. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +50 -50
  77. data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +48 -48
  78. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +129 -129
  79. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +78 -78
  80. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +61 -61
  81. data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +64 -64
  82. data/lib/rubocop/cop/chef/deprecation/deprecated_sudo_actions.rb +65 -65
  83. data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +42 -42
  84. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_actions.rb +67 -67
  85. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +69 -69
  86. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +42 -42
  87. data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +49 -49
  88. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +51 -51
  89. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +42 -42
  90. data/lib/rubocop/cop/chef/deprecation/execute_path_property.rb +50 -50
  91. data/lib/rubocop/cop/chef/deprecation/execute_relative_creates_without_cwd.rb +66 -66
  92. data/lib/rubocop/cop/chef/deprecation/foodcritic_file.rb +41 -41
  93. data/lib/rubocop/cop/chef/deprecation/foodcritic_testing.rb +43 -43
  94. data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +140 -140
  95. data/lib/rubocop/cop/chef/deprecation/hwrp_without_unified_mode_true.rb +86 -86
  96. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +59 -59
  97. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +56 -56
  98. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +91 -91
  99. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +53 -53
  100. data/lib/rubocop/cop/chef/deprecation/librarian_chefspec.rb +42 -42
  101. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +46 -46
  102. data/lib/rubocop/cop/chef/deprecation/log_resource_notifications.rb +63 -63
  103. data/lib/rubocop/cop/chef/deprecation/macos_userdefaults_global_property.rb +60 -60
  104. data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +60 -60
  105. data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +65 -65
  106. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +80 -80
  107. data/lib/rubocop/cop/chef/deprecation/node_set.rb +54 -54
  108. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +54 -54
  109. data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +70 -70
  110. data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +67 -67
  111. data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +61 -61
  112. data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +63 -63
  113. data/lib/rubocop/cop/chef/deprecation/policyfile_community_source.rb +53 -53
  114. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +59 -59
  115. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +53 -53
  116. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +48 -48
  117. data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +46 -46
  118. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +84 -84
  119. data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +40 -40
  120. data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +50 -50
  121. data/lib/rubocop/cop/chef/deprecation/resource_without_unified_mode_true.rb +87 -87
  122. data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +56 -56
  123. data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +62 -62
  124. data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +63 -63
  125. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +136 -136
  126. data/lib/rubocop/cop/chef/deprecation/use_automatic_resource_name.rb +52 -52
  127. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +57 -57
  128. data/lib/rubocop/cop/chef/deprecation/use_yaml_dump.rb +47 -47
  129. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +71 -71
  130. data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +57 -57
  131. data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +58 -58
  132. data/lib/rubocop/cop/chef/deprecation/windows_package_installer_type_string.rb +60 -60
  133. data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +83 -83
  134. data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +71 -71
  135. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +51 -51
  136. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +53 -53
  137. data/lib/rubocop/cop/chef/effortless/berksfile.rb +39 -39
  138. data/lib/rubocop/cop/chef/effortless/chef_vault_used.rb +87 -87
  139. data/lib/rubocop/cop/chef/effortless/data_bags.rb +40 -40
  140. data/lib/rubocop/cop/chef/effortless/depends_chef_vault.rb +47 -47
  141. data/lib/rubocop/cop/chef/effortless/node_environment.rb +45 -45
  142. data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +44 -44
  143. data/lib/rubocop/cop/chef/effortless/node_roles.rb +45 -45
  144. data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +43 -43
  145. data/lib/rubocop/cop/chef/effortless/search_used.rb +40 -40
  146. data/lib/rubocop/cop/chef/modernize/action_method_in_resource.rb +57 -57
  147. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +77 -77
  148. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +54 -54
  149. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +70 -70
  150. data/lib/rubocop/cop/chef/modernize/build_essential.rb +55 -55
  151. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +60 -60
  152. data/lib/rubocop/cop/chef/modernize/chef_15_resources.rb +57 -57
  153. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +63 -63
  154. data/lib/rubocop/cop/chef/modernize/class_eval_action_class.rb +63 -63
  155. data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +53 -53
  156. data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +55 -55
  157. data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +121 -121
  158. data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +50 -50
  159. data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +59 -59
  160. data/lib/rubocop/cop/chef/modernize/declare_action_class.rb +54 -54
  161. data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +74 -74
  162. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +54 -54
  163. data/lib/rubocop/cop/chef/modernize/definitions.rb +36 -36
  164. data/lib/rubocop/cop/chef/modernize/depends_chef_vault_cookbook.rb +54 -54
  165. data/lib/rubocop/cop/chef/modernize/depends_chocolatey_cookbooks.rb +55 -55
  166. data/lib/rubocop/cop/chef/modernize/depends_kernel_module_cookbook.rb +54 -54
  167. data/lib/rubocop/cop/chef/modernize/depends_locale_cookbook.rb +54 -54
  168. data/lib/rubocop/cop/chef/modernize/depends_openssl_cookbook.rb +54 -54
  169. data/lib/rubocop/cop/chef/modernize/depends_timezone_lwrp_cookbook.rb +54 -54
  170. data/lib/rubocop/cop/chef/modernize/depends_windows_firewall_cookbook.rb +54 -54
  171. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +54 -54
  172. data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +55 -55
  173. data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +52 -52
  174. data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +81 -81
  175. data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +67 -67
  176. data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +76 -76
  177. data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +70 -70
  178. data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +83 -83
  179. data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +46 -46
  180. data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +48 -48
  181. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +83 -83
  182. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +70 -70
  183. data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +58 -58
  184. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +51 -51
  185. data/lib/rubocop/cop/chef/modernize/node_init_package.rb +89 -89
  186. data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +57 -57
  187. data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +47 -47
  188. data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +54 -54
  189. data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +60 -60
  190. data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +51 -51
  191. data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +50 -50
  192. data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +68 -68
  193. data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +53 -53
  194. data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +56 -56
  195. data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +56 -56
  196. data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +68 -68
  197. data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +63 -63
  198. data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +49 -49
  199. data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +66 -66
  200. data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +94 -94
  201. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +77 -77
  202. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +63 -63
  203. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +52 -52
  204. data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +53 -53
  205. data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +46 -46
  206. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +60 -60
  207. data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +58 -58
  208. data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +63 -63
  209. data/lib/rubocop/cop/chef/modernize/sysctl_param_resource.rb +55 -55
  210. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +51 -51
  211. data/lib/rubocop/cop/chef/modernize/use_chef_language_cloud_helpers.rb +93 -93
  212. data/lib/rubocop/cop/chef/modernize/use_chef_language_env_helpers.rb +69 -69
  213. data/lib/rubocop/cop/chef/modernize/use_chef_language_systemd_helper.rb +60 -60
  214. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +113 -113
  215. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +60 -60
  216. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +58 -58
  217. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +52 -52
  218. data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +92 -92
  219. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +46 -46
  220. data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +59 -59
  221. data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +60 -60
  222. data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +65 -65
  223. data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +60 -60
  224. data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +52 -52
  225. data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +46 -46
  226. data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +60 -60
  227. data/lib/rubocop/cop/chef/redundant/double_compile_time.rb +68 -68
  228. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +46 -46
  229. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +46 -46
  230. data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +58 -58
  231. data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +81 -81
  232. data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +65 -65
  233. data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +59 -59
  234. data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +61 -61
  235. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +46 -46
  236. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +47 -47
  237. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +46 -46
  238. data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +52 -52
  239. data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +50 -50
  240. data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +64 -64
  241. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +46 -46
  242. data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +60 -60
  243. data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +67 -67
  244. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +116 -116
  245. data/lib/rubocop/cop/chef/security/ssh_private_key.rb +49 -49
  246. data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +50 -50
  247. data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +47 -47
  248. data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +55 -55
  249. data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +52 -52
  250. data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +60 -60
  251. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +62 -62
  252. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +542 -542
  253. data/lib/rubocop/cop/chef/style/attribute_keys.rb +94 -95
  254. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +49 -49
  255. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +42 -42
  256. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +101 -101
  257. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +50 -50
  258. data/lib/rubocop/cop/chef/style/comments_format.rb +71 -71
  259. data/lib/rubocop/cop/chef/style/file_mode.rb +86 -86
  260. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +59 -59
  261. data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +58 -58
  262. data/lib/rubocop/cop/chef/style/negating_only_if.rb +69 -69
  263. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +70 -70
  264. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +89 -89
  265. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +53 -53
  266. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +103 -103
  267. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +100 -100
  268. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +86 -86
  269. data/lib/rubocop/cop/chefstyle/ruby/gemspec_license.rb +55 -55
  270. data/lib/rubocop/cop/chefstyle/ruby/gemspec_require_rubygems.rb +46 -46
  271. data/lib/rubocop/cop/chefstyle/ruby/legacy_powershell_out_methods.rb +36 -36
  272. data/lib/rubocop/cop/chefstyle/ruby/require_net_https.rb +54 -54
  273. data/lib/rubocop/cop/chefstyle/ruby/unless_defined_require.rb +122 -122
  274. data/lib/rubocop/cop/inspec/deprecation/attribute_default.rb +53 -53
  275. data/lib/rubocop/cop/inspec/deprecation/attribute_helper.rb +47 -47
  276. data/lib/rubocop/cop/target_chef_version.rb +22 -22
  277. data/lib/rubocop/monkey_patches/allow_invalid_ruby.rb +28 -28
  278. data/lib/rubocop/monkey_patches/base.rb +11 -11
  279. data/lib/rubocop/monkey_patches/config.rb +15 -15
  280. data/lib/rubocop/monkey_patches/directive_comment.rb +12 -12
  281. data/lib/rubocop/monkey_patches/registry_cop.rb +15 -15
  282. data/lib/rubocop/monkey_patches/team.rb +25 -24
  283. metadata +33 -9
@@ -1,48 +1,48 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: 2019, Chef Software Inc.
4
- # Author:: Tim Smith (<tsmith84@gmail.com>)
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
- module RuboCop
19
- module Cop
20
- module Chef
21
- module Correctness
22
- # Cookbook metadata.rb version field should follow X.Y.Z version format.
23
- #
24
- # @example
25
- #
26
- # ### incorrect
27
- # version '1.2.3.4'
28
- #
29
- # ### correct
30
- # version '1.2.3'
31
- #
32
- class InvalidVersionMetadata < Base
33
- MSG = 'Cookbook metadata.rb version field should follow X.Y.Z version format.'
34
- RESTRICT_ON_SEND = [:version].freeze
35
-
36
- def_node_matcher :version?, '(send nil? :version $str ...)'
37
-
38
- def on_send(node)
39
- version?(node) do |ver|
40
- next if /\A\d+\.\d+(\.\d+)?\z/.match?(ver.value) # entirely borrowed from Foodcritic.
41
- add_offense(ver, severity: :refactor)
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: 2019, Chef Software Inc.
4
+ # Author:: Tim Smith (<tsmith84@gmail.com>)
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ module RuboCop
19
+ module Cop
20
+ module Chef
21
+ module Correctness
22
+ # Cookbook metadata.rb version field should follow X.Y.Z version format.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # version '1.2.3.4'
28
+ #
29
+ # ### correct
30
+ # version '1.2.3'
31
+ #
32
+ class InvalidVersionMetadata < Base
33
+ MSG = 'Cookbook metadata.rb version field should follow X.Y.Z version format.'
34
+ RESTRICT_ON_SEND = [:version].freeze
35
+
36
+ def_node_matcher :version?, '(send nil? :version $str ...)'
37
+
38
+ def on_send(node)
39
+ version?(node) do |ver|
40
+ next if /\A\d+\.\d+(\.\d+)?\z/.match?(ver.value) # entirely borrowed from Foodcritic.
41
+ add_offense(ver, severity: :refactor)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,53 +1,53 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: 2020, Chef Software Inc.
4
- # Author:: Tim Smith (<tsmith84@gmail.com>)
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
- module RuboCop
19
- module Cop
20
- module Chef
21
- module Correctness
22
- # When setting a node attribute as the default value for a custom resource property, wrap the node attribute in `lazy {}` so that its value is available when the resource executes.
23
- #
24
- # @example
25
- #
26
- # ### incorrect
27
- # property :Something, String, default: node['hostname']
28
- #
29
- # ### correct
30
- # property :Something, String, default: lazy { node['hostname'] }
31
- #
32
- class LazyEvalNodeAttributeDefaults < Base
33
- extend AutoCorrector
34
- include RuboCop::Chef::CookbookHelpers
35
-
36
- MSG = 'When setting a node attribute as the default value for a custom resource property, wrap the node attribute in `lazy {}` so that its value is available when the resource executes.'
37
-
38
- def_node_matcher :non_lazy_node_attribute_default?, <<-PATTERN
39
- (send nil? :property (sym _) ... (hash <(pair (sym :default) $(send (send _ :node) :[] _) ) ...>))
40
- PATTERN
41
-
42
- def on_send(node)
43
- non_lazy_node_attribute_default?(node) do |default|
44
- add_offense(default, severity: :refactor) do |corrector|
45
- corrector.replace(default, "lazy { #{default.source} }")
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: 2020, Chef Software Inc.
4
+ # Author:: Tim Smith (<tsmith84@gmail.com>)
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ module RuboCop
19
+ module Cop
20
+ module Chef
21
+ module Correctness
22
+ # When setting a node attribute as the default value for a custom resource property, wrap the node attribute in `lazy {}` so that its value is available when the resource executes.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # property :Something, String, default: node['hostname']
28
+ #
29
+ # ### correct
30
+ # property :Something, String, default: lazy { node['hostname'] }
31
+ #
32
+ class LazyEvalNodeAttributeDefaults < Base
33
+ extend AutoCorrector
34
+ include RuboCop::Chef::CookbookHelpers
35
+
36
+ MSG = 'When setting a node attribute as the default value for a custom resource property, wrap the node attribute in `lazy {}` so that its value is available when the resource executes.'
37
+
38
+ def_node_matcher :non_lazy_node_attribute_default?, <<-PATTERN
39
+ (send nil? :property (sym _) ... (hash <(pair (sym :default) $(send (send _ :node) :[] _) ) ...>))
40
+ PATTERN
41
+
42
+ def on_send(node)
43
+ non_lazy_node_attribute_default?(node) do |default|
44
+ add_offense(default, severity: :refactor) do |corrector|
45
+ corrector.replace(default, "lazy { #{default.source} }")
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,67 +1,67 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: Copyright 2020, Chef Software Inc.
4
- # Author:: Tim Smith (<tsmith84@gmail.com>)
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
- module RuboCop
19
- module Cop
20
- module Chef
21
- module Correctness
22
- # Using `lazy {}` within a resource guard (not_if/only_if) will cause failures and is unnecessary as resource guards are always lazily evaluated.
23
- #
24
- # @example
25
- #
26
- # ### incorrect
27
- # template '/etc/foo' do
28
- # mode '0644'
29
- # source 'foo.erb'
30
- # only_if { lazy { ::File.exist?('/etc/foo')} }
31
- # end
32
- #
33
- # ### correct
34
- # template '/etc/foo' do
35
- # mode '0644'
36
- # source 'foo.erb'
37
- # only_if { ::File.exist?('/etc/foo') }
38
- # end
39
- #
40
- class LazyInResourceGuard < Base
41
- extend AutoCorrector
42
-
43
- MSG = 'Using `lazy {}` within a resource guard (not_if/only_if) will cause failures and is unnecessary as resource guards are always lazily evaluated.'
44
-
45
- def_node_matcher :lazy_in_guard?, <<-PATTERN
46
- (block
47
- (send nil? ${:not_if :only_if})
48
- (args)
49
- (block
50
- (send nil? :lazy)
51
- (args)
52
- $(...)
53
- ))
54
- PATTERN
55
-
56
- def on_block(node)
57
- lazy_in_guard?(node) do |type, code|
58
- add_offense(node, severity: :refactor) do |corrector|
59
- corrector.replace(node, "#{type} { #{code.source} }")
60
- end
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright 2020, Chef Software Inc.
4
+ # Author:: Tim Smith (<tsmith84@gmail.com>)
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ module RuboCop
19
+ module Cop
20
+ module Chef
21
+ module Correctness
22
+ # Using `lazy {}` within a resource guard (not_if/only_if) will cause failures and is unnecessary as resource guards are always lazily evaluated.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # template '/etc/foo' do
28
+ # mode '0644'
29
+ # source 'foo.erb'
30
+ # only_if { lazy { ::File.exist?('/etc/foo')} }
31
+ # end
32
+ #
33
+ # ### correct
34
+ # template '/etc/foo' do
35
+ # mode '0644'
36
+ # source 'foo.erb'
37
+ # only_if { ::File.exist?('/etc/foo') }
38
+ # end
39
+ #
40
+ class LazyInResourceGuard < Base
41
+ extend AutoCorrector
42
+
43
+ MSG = 'Using `lazy {}` within a resource guard (not_if/only_if) will cause failures and is unnecessary as resource guards are always lazily evaluated.'
44
+
45
+ def_node_matcher :lazy_in_guard?, <<-PATTERN
46
+ (block
47
+ (send nil? ${:not_if :only_if})
48
+ (args)
49
+ (block
50
+ (send nil? :lazy)
51
+ (args)
52
+ $(...)
53
+ ))
54
+ PATTERN
55
+
56
+ def on_block(node)
57
+ lazy_in_guard?(node) do |type, code|
58
+ add_offense(node, severity: :refactor) do |corrector|
59
+ corrector.replace(node, "#{type} { #{code.source} }")
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,67 +1,67 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: Copyright 2020, Chef Software Inc.
4
- # Author:: Tim Smith (<tsmith84@gmail.com>)
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
- module RuboCop
19
- module Cop
20
- module Chef
21
- module Correctness
22
- # The macos_userdefaults resource prior to Chef Infra Client 16.3 would silently continue if invalid types were passed resulting in unexpected behavior. Valid values are: "array", "bool", "dict", "float", "int", and "string".
23
- #
24
- # @example
25
- #
26
- # ### incorrect
27
- # macos_userdefaults 'set a value' do
28
- # global true
29
- # key 'key'
30
- # type 'boolean'
31
- # end
32
- #
33
- # ### correct
34
- # macos_userdefaults 'set a value' do
35
- # global true
36
- # key 'key'
37
- # type 'bool'
38
- # end
39
- #
40
- class MacosUserdefaultsInvalidType < Base
41
- include RuboCop::Chef::CookbookHelpers
42
- extend RuboCop::Cop::AutoCorrector
43
-
44
- VALID_VALUES = %w(array bool dict float int string).freeze
45
- INVALID_VALUE_MAP = {
46
- 'boolean' => 'bool',
47
- 'str' => 'string',
48
- 'integer' => 'int',
49
- }.freeze
50
-
51
- MSG = 'The macos_userdefaults resource prior to Chef Infra Client 16.3 would silently continue if invalid types were passed resulting in unexpected behavior. Valid values are: "array", "bool", "dict", "float", "int", and "string".'
52
-
53
- def on_block(node)
54
- match_property_in_resource?(:macos_userdefaults, 'type', node) do |type|
55
- type_val = method_arg_ast_to_string(type)
56
- return if VALID_VALUES.include?(type_val)
57
- add_offense(type, severity: :refactor) do |corrector|
58
- next unless INVALID_VALUE_MAP[type_val]
59
- corrector.replace(type, "type '#{INVALID_VALUE_MAP[type_val]}'")
60
- end
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright 2020, Chef Software Inc.
4
+ # Author:: Tim Smith (<tsmith84@gmail.com>)
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ module RuboCop
19
+ module Cop
20
+ module Chef
21
+ module Correctness
22
+ # The macos_userdefaults resource prior to Chef Infra Client 16.3 would silently continue if invalid types were passed resulting in unexpected behavior. Valid values are: "array", "bool", "dict", "float", "int", and "string".
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # macos_userdefaults 'set a value' do
28
+ # global true
29
+ # key 'key'
30
+ # type 'boolean'
31
+ # end
32
+ #
33
+ # ### correct
34
+ # macos_userdefaults 'set a value' do
35
+ # global true
36
+ # key 'key'
37
+ # type 'bool'
38
+ # end
39
+ #
40
+ class MacosUserdefaultsInvalidType < Base
41
+ include RuboCop::Chef::CookbookHelpers
42
+ extend RuboCop::Cop::AutoCorrector
43
+
44
+ VALID_VALUES = %w(array bool dict float int string).freeze
45
+ INVALID_VALUE_MAP = {
46
+ 'boolean' => 'bool',
47
+ 'str' => 'string',
48
+ 'integer' => 'int',
49
+ }.freeze
50
+
51
+ MSG = 'The macos_userdefaults resource prior to Chef Infra Client 16.3 would silently continue if invalid types were passed resulting in unexpected behavior. Valid values are: "array", "bool", "dict", "float", "int", and "string".'
52
+
53
+ def on_block(node)
54
+ match_property_in_resource?(:macos_userdefaults, 'type', node) do |type|
55
+ type_val = method_arg_ast_to_string(type)
56
+ return if VALID_VALUES.include?(type_val)
57
+ add_offense(type, severity: :refactor) do |corrector|
58
+ next unless INVALID_VALUE_MAP[type_val]
59
+ corrector.replace(type, "type '#{INVALID_VALUE_MAP[type_val]}'")
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,67 +1,67 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: Copyright 2019, Chef Software Inc.
4
- # Author:: Tim Smith (<tsmith84@gmail.com>)
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
- module RuboCop
19
- module Cop
20
- module Chef
21
- module Correctness
22
- # When using the value_for_platform helper you must include a hash of possible platforms where each platform contains a hash of versions and potential values. If you don't wish to match on a particular version you can instead use the key 'default'.
23
- #
24
- # @example
25
- #
26
- # ### incorrect
27
- # value_for_platform(
28
- # %w(redhat oracle) => 'baz'
29
- # )
30
- #
31
- # ### correct
32
- # value_for_platform(
33
- # %w(redhat oracle) => {
34
- # '5' => 'foo',
35
- # '6' => 'bar',
36
- # 'default'd => 'baz',
37
- # }
38
- # )
39
- #
40
- # value_for_platform(
41
- # %w(redhat oracle) => {
42
- # 'default' => 'foo',
43
- # },
44
- # 'default' => 'bar'
45
- # )
46
- #
47
- class MalformedPlatformValueForPlatformHelper < Base
48
- RESTRICT_ON_SEND = [:value_for_platform].freeze
49
-
50
- def on_send(node)
51
- if node.arguments.count > 1
52
- msg = 'Malformed value_for_platform helper argument. The value_for_platform helper takes a single hash of platforms as an argument.'
53
- add_offense(node, message: msg, severity: :refactor)
54
- elsif node.arguments.first.hash_type? # if it's a variable we can't check what's in that variable so skip
55
- msg = "Malformed value_for_platform helper argument. The value for each platform in your hash must be a hash of either platform version strings or a value with a key of 'default'"
56
- node.arguments.first.each_pair do |plats, plat_vals|
57
- # instead of a platform the hash key can be default with a value of anything. Depending on the hash format this is a string or symbol
58
- next if plat_vals.hash_type? || plats == s(:str, 'default') || plats == s(:sym, :default)
59
- add_offense(plat_vals, message: msg, severity: :refactor)
60
- end
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright 2019, Chef Software Inc.
4
+ # Author:: Tim Smith (<tsmith84@gmail.com>)
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ module RuboCop
19
+ module Cop
20
+ module Chef
21
+ module Correctness
22
+ # When using the value_for_platform helper you must include a hash of possible platforms where each platform contains a hash of versions and potential values. If you don't wish to match on a particular version you can instead use the key 'default'.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # value_for_platform(
28
+ # %w(redhat oracle) => 'baz'
29
+ # )
30
+ #
31
+ # ### correct
32
+ # value_for_platform(
33
+ # %w(redhat oracle) => {
34
+ # '5' => 'foo',
35
+ # '6' => 'bar',
36
+ # 'default'd => 'baz',
37
+ # }
38
+ # )
39
+ #
40
+ # value_for_platform(
41
+ # %w(redhat oracle) => {
42
+ # 'default' => 'foo',
43
+ # },
44
+ # 'default' => 'bar'
45
+ # )
46
+ #
47
+ class MalformedPlatformValueForPlatformHelper < Base
48
+ RESTRICT_ON_SEND = [:value_for_platform].freeze
49
+
50
+ def on_send(node)
51
+ if node.arguments.count > 1
52
+ msg = 'Malformed value_for_platform helper argument. The value_for_platform helper takes a single hash of platforms as an argument.'
53
+ add_offense(node, message: msg, severity: :refactor)
54
+ elsif node.arguments.first.hash_type? # if it's a variable we can't check what's in that variable so skip
55
+ msg = "Malformed value_for_platform helper argument. The value for each platform in your hash must be a hash of either platform version strings or a value with a key of 'default'"
56
+ node.arguments.first.each_pair do |plats, plat_vals|
57
+ # instead of a platform the hash key can be default with a value of anything. Depending on the hash format this is a string or symbol
58
+ next if plat_vals.hash_type? || plats == s(:str, 'default') || plats == s(:sym, :default)
59
+ add_offense(plat_vals, message: msg, severity: :refactor)
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end