cookstyle 7.32.8 → 8.1.1

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 +30 -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 +9 -9
@@ -1,103 +1,103 @@
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 Style
22
- # Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match one-to-one with OS values. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic. All values of `os` from Ohai match one-to-one with `platform_family` values except for `linux`, which has no single equivalent `platform_family`.
23
- #
24
- # @example
25
- #
26
- # ### incorrect
27
- # node['os'] == 'darwin'
28
- # node['os'] == 'windows'
29
- # node['os'].eql?('aix')
30
- # %w(netbsd openbsd freebsd).include?(node['os'])
31
- #
32
- # ### correct
33
- # platform_family?('mac_os_x')
34
- # platform_family?('windows')
35
- # platform_family?('aix')
36
- # platform_family?('netbsd', 'openbsd', 'freebsd)
37
- #
38
- class UnnecessaryOSCheck < Base
39
- extend AutoCorrector
40
-
41
- MSG = "Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match 1:1 with OS values."
42
- RESTRICT_ON_SEND = [:==, :!=, :eql?, :include?].freeze
43
-
44
- # sorted list of all the os values that match 1:1 with a platform_family
45
- UNNECESSARY_OS_VALUES = %w(aix darwin dragonflybsd freebsd netbsd openbsd solaris2 windows).freeze
46
-
47
- def_node_matcher :os_equals?, <<-PATTERN
48
- (send (send (send nil? :node) :[] (str "os") ) ${:== :!=} $str )
49
- PATTERN
50
-
51
- def_node_matcher :os_eql?, <<-PATTERN
52
- (send (send (send nil? :node) :[] (str "os") ) :eql? $str )
53
- PATTERN
54
-
55
- def_node_matcher :os_include?, <<-PATTERN
56
- (send $(array ...) :include? (send (send nil? :node) :[] (str "os")))
57
- PATTERN
58
-
59
- def on_send(node)
60
- os_equals?(node) do |operator, val|
61
- return unless UNNECESSARY_OS_VALUES.include?(val.value)
62
- add_offense(node, severity: :refactor) do |corrector|
63
- corrected_string = (operator == :!= ? '!' : '') + "platform_family?('#{sanitized_platform(val.value)}')"
64
- corrector.replace(node, corrected_string)
65
- end
66
- end
67
-
68
- os_eql?(node) do |val|
69
- return unless UNNECESSARY_OS_VALUES.include?(val.value)
70
- add_offense(node, severity: :refactor) do |corrector|
71
- corrected_string = "platform_family?('#{sanitized_platform(val.value)}')"
72
- corrector.replace(node, corrected_string)
73
- end
74
- end
75
-
76
- os_include?(node) do |val|
77
- array_of_plats = array_from_ast(val)
78
- # see if all the values in the .include? usage are in our list of 1:1 platform family to os values
79
- return unless (UNNECESSARY_OS_VALUES & array_of_plats) == array_of_plats
80
- add_offense(node, severity: :refactor) do |corrector|
81
- platforms = val.values.map { |x| x.str_type? ? "'#{sanitized_platform(x.value)}'" : x.source }
82
- corrected_string = "platform_family?(#{platforms.join(', ')})"
83
- corrector.replace(node, corrected_string)
84
- end
85
- end
86
- end
87
-
88
- # return the passed value unless the value is darwin and then return mac_os_x
89
- def sanitized_platform(plat)
90
- plat == 'darwin' ? 'mac_os_x' : plat
91
- end
92
-
93
- # given an ast array spit out a ruby array
94
- def array_from_ast(ast)
95
- vals = []
96
- ast.each_child_node { |x| vals << x.value }
97
- vals.sort
98
- end
99
- end
100
- end
101
- end
102
- end
103
- 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 Style
22
+ # Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match one-to-one with OS values. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic. All values of `os` from Ohai match one-to-one with `platform_family` values except for `linux`, which has no single equivalent `platform_family`.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # node['os'] == 'darwin'
28
+ # node['os'] == 'windows'
29
+ # node['os'].eql?('aix')
30
+ # %w(netbsd openbsd freebsd).include?(node['os'])
31
+ #
32
+ # ### correct
33
+ # platform_family?('mac_os_x')
34
+ # platform_family?('windows')
35
+ # platform_family?('aix')
36
+ # platform_family?('netbsd', 'openbsd', 'freebsd)
37
+ #
38
+ class UnnecessaryOSCheck < Base
39
+ extend AutoCorrector
40
+
41
+ MSG = "Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match 1:1 with OS values."
42
+ RESTRICT_ON_SEND = [:==, :!=, :eql?, :include?].freeze
43
+
44
+ # sorted list of all the os values that match 1:1 with a platform_family
45
+ UNNECESSARY_OS_VALUES = %w(aix darwin dragonflybsd freebsd netbsd openbsd solaris2 windows).freeze
46
+
47
+ def_node_matcher :os_equals?, <<-PATTERN
48
+ (send (send (send nil? :node) :[] (str "os") ) ${:== :!=} $str )
49
+ PATTERN
50
+
51
+ def_node_matcher :os_eql?, <<-PATTERN
52
+ (send (send (send nil? :node) :[] (str "os") ) :eql? $str )
53
+ PATTERN
54
+
55
+ def_node_matcher :os_include?, <<-PATTERN
56
+ (send $(array ...) :include? (send (send nil? :node) :[] (str "os")))
57
+ PATTERN
58
+
59
+ def on_send(node)
60
+ os_equals?(node) do |operator, val|
61
+ return unless UNNECESSARY_OS_VALUES.include?(val.value)
62
+ add_offense(node, severity: :refactor) do |corrector|
63
+ corrected_string = (operator == :!= ? '!' : '') + "platform_family?('#{sanitized_platform(val.value)}')"
64
+ corrector.replace(node, corrected_string)
65
+ end
66
+ end
67
+
68
+ os_eql?(node) do |val|
69
+ return unless UNNECESSARY_OS_VALUES.include?(val.value)
70
+ add_offense(node, severity: :refactor) do |corrector|
71
+ corrected_string = "platform_family?('#{sanitized_platform(val.value)}')"
72
+ corrector.replace(node, corrected_string)
73
+ end
74
+ end
75
+
76
+ os_include?(node) do |val|
77
+ array_of_plats = array_from_ast(val)
78
+ # see if all the values in the .include? usage are in our list of 1:1 platform family to os values
79
+ return unless (UNNECESSARY_OS_VALUES & array_of_plats) == array_of_plats
80
+ add_offense(node, severity: :refactor) do |corrector|
81
+ platforms = val.values.map { |x| x.str_type? ? "'#{sanitized_platform(x.value)}'" : x.source }
82
+ corrected_string = "platform_family?(#{platforms.join(', ')})"
83
+ corrector.replace(node, corrected_string)
84
+ end
85
+ end
86
+ end
87
+
88
+ # return the passed value unless the value is darwin and then return mac_os_x
89
+ def sanitized_platform(plat)
90
+ plat == 'darwin' ? 'mac_os_x' : plat
91
+ end
92
+
93
+ # given an ast array spit out a ruby array
94
+ def array_from_ast(ast)
95
+ vals = []
96
+ ast.each_child_node { |x| vals << x.value }
97
+ vals.sort
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -1,100 +1,100 @@
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 Style
22
- # Use the platform?() and platform_family?() helpers instead of a case statement that only includes a single when statement.
23
- #
24
- # @example
25
- #
26
- # ### incorrect
27
- # case node['platform']
28
- # when 'ubuntu'
29
- # log "We're on Ubuntu"
30
- # apt_update
31
- # end
32
- #
33
- # case node['platform_family']
34
- # when 'rhel'
35
- # include_recipe 'yum'
36
- # end
37
- #
38
- # ### correct
39
- # if platform?('ubuntu')
40
- # log "We're on Ubuntu"
41
- # apt_update
42
- # end
43
- #
44
- # include_recipe 'yum' if platform_family?('rhel')
45
- #
46
- class UnnecessaryPlatformCaseStatement < Base
47
- extend AutoCorrector
48
- include RangeHelp
49
-
50
- MSG = 'Use the platform?() and platform_family?() helpers instead of a case statement that only includes a single when statement.'
51
-
52
- def_node_matcher :platform_case?, <<-PATTERN
53
- ( case $( send (send nil? :node) :[] $(str {"platform" "platform_family"})) ... )
54
- PATTERN
55
-
56
- def on_case(node)
57
- platform_case?(node) do |node_, type|
58
- return unless node&.when_branches&.count == 1
59
- add_offense(node, severity: :refactor) do |corrector|
60
- # we have at least one supermarket cookbook with an entirely empty platform case statement
61
- # we can't actually fix that so let's do nothing here.
62
- unless empty_case_statement?(node)
63
- condition_string = node.when_branches.first.conditions.map(&:source).join(', ')
64
-
65
- # single line bodies without an else statement should be transformed into `X if platform?('ubuntu')` style statements
66
- # while multi-line statements should just have the case and when bits replace with `if platform?('ubuntu')`
67
- if !node.else? && !node.when_branches.first.body.multiline?
68
- new_source = "#{node.when_branches.first.body.source} if #{type.value}?(#{condition_string})"
69
- corrector.replace(node, new_source)
70
- else
71
- # find the range from the beginning of the case to the end of the node['platform'] or node['platform_family']
72
- case_range = node.loc.keyword.join(node_.loc.expression.end)
73
-
74
- # replace the complete conditional range with a new if statement
75
- corrector.replace(case_range, "if #{type.value}?(#{condition_string})")
76
-
77
- # find the range from the start of the when to the end of the last argument
78
- conditional_range = node.when_branches.first.conditions[-1].source_range.join(node.when_branches.first.loc.keyword.begin)
79
-
80
- # remove the when XYZ condition along with any leading spaces so that we remove the whole empty line
81
- corrector.remove(range_with_surrounding_space(range: conditional_range, side: :left))
82
- end
83
- end
84
- end
85
- end
86
- end
87
-
88
- private
89
-
90
- # determine if each branch of the case statement contains no code
91
- #
92
- # @private
93
- def empty_case_statement?(node)
94
- node.else_branch.nil? && node.when_branches.all? { |x| x.body.nil? }
95
- end
96
- end
97
- end
98
- end
99
- end
100
- 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 Style
22
+ # Use the platform?() and platform_family?() helpers instead of a case statement that only includes a single when statement.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # case node['platform']
28
+ # when 'ubuntu'
29
+ # log "We're on Ubuntu"
30
+ # apt_update
31
+ # end
32
+ #
33
+ # case node['platform_family']
34
+ # when 'rhel'
35
+ # include_recipe 'yum'
36
+ # end
37
+ #
38
+ # ### correct
39
+ # if platform?('ubuntu')
40
+ # log "We're on Ubuntu"
41
+ # apt_update
42
+ # end
43
+ #
44
+ # include_recipe 'yum' if platform_family?('rhel')
45
+ #
46
+ class UnnecessaryPlatformCaseStatement < Base
47
+ extend AutoCorrector
48
+ include RangeHelp
49
+
50
+ MSG = 'Use the platform?() and platform_family?() helpers instead of a case statement that only includes a single when statement.'
51
+
52
+ def_node_matcher :platform_case?, <<-PATTERN
53
+ ( case $( send (send nil? :node) :[] $(str {"platform" "platform_family"})) ... )
54
+ PATTERN
55
+
56
+ def on_case(node)
57
+ platform_case?(node) do |node_, type|
58
+ return unless node&.when_branches&.count == 1
59
+ add_offense(node, severity: :refactor) do |corrector|
60
+ # we have at least one supermarket cookbook with an entirely empty platform case statement
61
+ # we can't actually fix that so let's do nothing here.
62
+ unless empty_case_statement?(node)
63
+ condition_string = node.when_branches.first.conditions.map(&:source).join(', ')
64
+
65
+ # single line bodies without an else statement should be transformed into `X if platform?('ubuntu')` style statements
66
+ # while multi-line statements should just have the case and when bits replace with `if platform?('ubuntu')`
67
+ if !node.else? && !node.when_branches.first.body.multiline?
68
+ new_source = "#{node.when_branches.first.body.source} if #{type.value}?(#{condition_string})"
69
+ corrector.replace(node, new_source)
70
+ else
71
+ # find the range from the beginning of the case to the end of the node['platform'] or node['platform_family']
72
+ case_range = node.loc.keyword.join(node_.loc.expression.end)
73
+
74
+ # replace the complete conditional range with a new if statement
75
+ corrector.replace(case_range, "if #{type.value}?(#{condition_string})")
76
+
77
+ # find the range from the start of the when to the end of the last argument
78
+ conditional_range = node.when_branches.first.conditions.last.source_range.join(node.when_branches.first.loc.keyword.begin)
79
+
80
+ # remove the when XYZ condition along with any leading spaces so that we remove the whole empty line
81
+ corrector.remove(range_with_surrounding_space(range: conditional_range, side: :left))
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ private
89
+
90
+ # determine if each branch of the case statement contains no code
91
+ #
92
+ # @private
93
+ def empty_case_statement?(node)
94
+ node.else_branch.nil? && node.when_branches.all? { |x| x.body.nil? }
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -1,86 +1,86 @@
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 Style
22
- # Use the platform?() and platform_family?() helpers instead of node['platform] == 'foo' and node['platform_family'] == 'bar'. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic.
23
- #
24
- # @example
25
- #
26
- # ### incorrect
27
- # node['platform'] == 'ubuntu'
28
- # node['platform_family'] == 'debian'
29
- # node['platform'] != 'ubuntu'
30
- # node['platform_family'] != 'debian'
31
- # %w(rhel suse).include?(node['platform_family'])
32
- # node['platform'].eql?('ubuntu')
33
- #
34
- # ### correct
35
- # platform?('ubuntu')
36
- # !platform?('ubuntu')
37
- # platform_family?('debian')
38
- # !platform_family?('debian')
39
- # platform_family?('rhel', 'suse')
40
- #
41
- class UsePlatformHelpers < Base
42
- extend AutoCorrector
43
-
44
- MSG = "Use platform? and platform_family? helpers to check a node's platform"
45
- RESTRICT_ON_SEND = [:==, :!=, :eql?, :include?].freeze
46
-
47
- def_node_matcher :platform_equals?, <<-PATTERN
48
- (send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) ${:== :!=} $str )
49
- PATTERN
50
-
51
- def_node_matcher :platform_include?, <<-PATTERN
52
- (send $(array ...) :include? (send (send nil? :node) :[] $(str {"platform" "platform_family"})))
53
- PATTERN
54
-
55
- def_node_matcher :platform_eql?, <<-PATTERN
56
- (send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) :eql? $str )
57
- PATTERN
58
-
59
- def on_send(node)
60
- platform_equals?(node) do |type, operator, plat|
61
- add_offense(node, severity: :refactor) do |corrector|
62
- corrected_string = (operator == :!= ? '!' : '') + "#{type.value}?('#{plat.value}')"
63
- corrector.replace(node, corrected_string)
64
- end
65
- end
66
-
67
- platform_include?(node) do |plats, type|
68
- add_offense(node, severity: :refactor) do |corrector|
69
- platforms = plats.values.map { |x| x.str_type? ? "'#{x.value}'" : x.source }
70
- corrected_string = "#{type.value}?(#{platforms.join(', ')})"
71
- corrector.replace(node, corrected_string)
72
- end
73
- end
74
-
75
- platform_eql?(node) do |type, plat|
76
- add_offense(node, severity: :refactor) do |corrector|
77
- corrected_string = "#{type.value}?('#{plat.value}')"
78
- corrector.replace(node, corrected_string)
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
86
- 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 Style
22
+ # Use the platform?() and platform_family?() helpers instead of node['platform] == 'foo' and node['platform_family'] == 'bar'. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # node['platform'] == 'ubuntu'
28
+ # node['platform_family'] == 'debian'
29
+ # node['platform'] != 'ubuntu'
30
+ # node['platform_family'] != 'debian'
31
+ # %w(rhel suse).include?(node['platform_family'])
32
+ # node['platform'].eql?('ubuntu')
33
+ #
34
+ # ### correct
35
+ # platform?('ubuntu')
36
+ # !platform?('ubuntu')
37
+ # platform_family?('debian')
38
+ # !platform_family?('debian')
39
+ # platform_family?('rhel', 'suse')
40
+ #
41
+ class UsePlatformHelpers < Base
42
+ extend AutoCorrector
43
+
44
+ MSG = "Use platform? and platform_family? helpers to check a node's platform"
45
+ RESTRICT_ON_SEND = [:==, :!=, :eql?, :include?].freeze
46
+
47
+ def_node_matcher :platform_equals?, <<-PATTERN
48
+ (send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) ${:== :!=} $str )
49
+ PATTERN
50
+
51
+ def_node_matcher :platform_include?, <<-PATTERN
52
+ (send $(array ...) :include? (send (send nil? :node) :[] $(str {"platform" "platform_family"})))
53
+ PATTERN
54
+
55
+ def_node_matcher :platform_eql?, <<-PATTERN
56
+ (send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) :eql? $str )
57
+ PATTERN
58
+
59
+ def on_send(node)
60
+ platform_equals?(node) do |type, operator, plat|
61
+ add_offense(node, severity: :refactor) do |corrector|
62
+ corrected_string = (operator == :!= ? '!' : '') + "#{type.value}?('#{plat.value}')"
63
+ corrector.replace(node, corrected_string)
64
+ end
65
+ end
66
+
67
+ platform_include?(node) do |plats, type|
68
+ add_offense(node, severity: :refactor) do |corrector|
69
+ platforms = plats.values.map { |x| x.str_type? ? "'#{x.value}'" : x.source }
70
+ corrected_string = "#{type.value}?(#{platforms.join(', ')})"
71
+ corrector.replace(node, corrected_string)
72
+ end
73
+ end
74
+
75
+ platform_eql?(node) do |type, plat|
76
+ add_offense(node, severity: :refactor) do |corrector|
77
+ corrected_string = "#{type.value}?('#{plat.value}')"
78
+ corrector.replace(node, corrected_string)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end