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
data/config/default.yml CHANGED
@@ -1,2 +1,2 @@
1
- inherit_from:
2
- - cookstyle.yml
1
+ inherit_from:
2
+ - cookstyle.yml
data/cookstyle.gemspec CHANGED
@@ -1,30 +1,34 @@
1
- # frozen_string_literal: true
2
- lib = File.expand_path('lib', __dir__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'cookstyle/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = 'cookstyle'
8
- spec.version = Cookstyle::VERSION
9
- spec.authors = ['Thom May', 'Tim Smith']
10
- spec.email = ['thom@chef.io', 'tsmith84@gmail.com']
11
- spec.summary = 'Cookstyle is a code linting tool that helps you to write better Chef Infra cookbooks by detecting and automatically correcting style, syntax, and logic mistakes in your code.'
12
- spec.license = 'Apache-2.0'
13
- spec.homepage = 'https://docs.chef.io/workstation/cookstyle/'
14
- spec.required_ruby_version = '>= 2.7'
15
-
16
- # the gemspec and Gemfile are necessary for appbundling of the gem
17
- spec.files = %w(LICENSE cookstyle.gemspec Gemfile) + Dir.glob('{lib,bin,config}/**/*')
18
- spec.executables = %w(cookstyle)
19
- spec.require_paths = ['lib']
20
-
21
- spec.add_dependency('rubocop', Cookstyle::RUBOCOP_VERSION)
22
-
23
- spec.metadata = {
24
- 'homepage_uri' => 'https://github.com/chef/cookstyle',
25
- 'changelog_uri' => 'https://github.com/chef/cookstyle/blob/main/CHANGELOG.md',
26
- 'source_code_uri' => 'https://github.com/chef/cookstyle',
27
- 'documentation_uri' => 'https://docs.chef.io/workstation/cookstyle/',
28
- 'bug_tracker_uri' => 'https://github.com/chef/cookstyle/issues',
29
- }
30
- end
1
+ # frozen_string_literal: true
2
+ lib = File.expand_path('lib', __dir__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'cookstyle/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'cookstyle'
8
+ spec.version = Cookstyle::VERSION
9
+ spec.authors = ['Thom May', 'Tim Smith']
10
+ spec.email = ['thom@chef.io', 'tsmith84@gmail.com']
11
+ spec.summary = 'Cookstyle is a code linting tool that helps you to write better Chef Infra cookbooks by detecting and automatically correcting style, syntax, and logic mistakes in your code.'
12
+ spec.license = 'Apache-2.0'
13
+ spec.homepage = 'https://docs.chef.io/workstation/cookstyle/'
14
+ spec.required_ruby_version = '>= 2.7'
15
+
16
+ # the gemspec and Gemfile are necessary for appbundling of the gem
17
+ spec.files = %w(LICENSE cookstyle.gemspec Gemfile) + Dir.glob('{lib,bin,config}/**/*')
18
+ spec.executables = %w(cookstyle)
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency('rubocop', Cookstyle::RUBOCOP_VERSION)
22
+
23
+ # remove these dependencies once we upgrade to a modern rubocop
24
+ spec.add_dependency('base64')
25
+ spec.add_dependency('ostruct')
26
+
27
+ spec.metadata = {
28
+ 'homepage_uri' => 'https://github.com/chef/cookstyle',
29
+ 'changelog_uri' => 'https://github.com/chef/cookstyle/blob/main/CHANGELOG.md',
30
+ 'source_code_uri' => 'https://github.com/chef/cookstyle',
31
+ 'documentation_uri' => 'https://docs.chef.io/workstation/cookstyle/',
32
+ 'bug_tracker_uri' => 'https://github.com/chef/cookstyle/issues',
33
+ }
34
+ end
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
- module Cookstyle
3
- CHEFSTYLE_CONFIG = true
4
- end
5
- require_relative '../cookstyle'
1
+ # frozen_string_literal: true
2
+ module Cookstyle
3
+ CHEFSTYLE_CONFIG = true
4
+ end
5
+ require_relative '../cookstyle'
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
- module Cookstyle
3
- VERSION = "7.32.8" # rubocop: disable Style/StringLiterals
4
- RUBOCOP_VERSION = '1.25.1'
5
- end
1
+ # frozen_string_literal: true
2
+ module Cookstyle
3
+ VERSION = "8.0.0" # rubocop: disable Style/StringLiterals
4
+ RUBOCOP_VERSION = '1.75.2'
5
+ end
data/lib/cookstyle.rb CHANGED
@@ -1,45 +1,48 @@
1
- # frozen_string_literal: true
2
- require_relative 'cookstyle/version'
3
-
4
- require 'pathname' unless defined?(Pathname)
5
- require 'yaml' unless defined?(YAML)
6
-
7
- # ensure the desired target version of RuboCop is gem activated
8
- gem 'rubocop', "= #{Cookstyle::RUBOCOP_VERSION}"
9
- require 'rubocop'
10
- require_relative 'rubocop/monkey_patches/directive_comment'
11
-
12
- # monkey patches needed for the TargetChefVersion config option
13
- require_relative 'rubocop/monkey_patches/config'
14
- require_relative 'rubocop/monkey_patches/base'
15
- require_relative 'rubocop/monkey_patches/team'
16
- require_relative 'rubocop/monkey_patches/registry_cop'
17
-
18
- # Cookstyle patches the RuboCop tool to set a new default configuration that
19
- # is vendored in the Cookstyle codebase.
20
- module Cookstyle
21
- # @return [String] the absolute path to the main RuboCop configuration YAML file
22
- def self.config
23
- config_file = const_defined?('CHEFSTYLE_CONFIG') ? 'chefstyle.yml' : 'default.yml'
24
- File.realpath(File.join(__dir__, '..', 'config', config_file))
25
- end
26
- end
27
-
28
- require_relative 'rubocop/chef'
29
- require_relative 'rubocop/chef/autocorrect_helpers'
30
- require_relative 'rubocop/chef/cookbook_helpers'
31
- require_relative 'rubocop/chef/platform_helpers'
32
- require_relative 'rubocop/chef/cookbook_only'
33
- require_relative 'rubocop/cop/target_chef_version'
34
-
35
- # Chef Infra specific cops
36
- Dir.glob(__dir__ + '/rubocop/cop/**/*.rb') do |file|
37
- next if File.directory?(file)
38
-
39
- require_relative file # not actually relative but require_relative is faster
40
- end
41
-
42
- # stub default value of TargetChefVersion to avoid STDERR noise
43
- RuboCop::ConfigLoader.default_configuration['AllCops']['TargetChefVersion'] = '~'
44
-
45
- RuboCop::ConfigLoader.default_configuration = RuboCop::ConfigLoader.configuration_from_file(Cookstyle.config)
1
+ # frozen_string_literal: true
2
+ require_relative 'cookstyle/version'
3
+
4
+ require 'pathname' unless defined?(Pathname)
5
+ require 'yaml' unless defined?(YAML)
6
+
7
+ # ensure the desired target version of RuboCop is gem activated
8
+ gem 'rubocop', "= #{Cookstyle::RUBOCOP_VERSION}"
9
+ require 'rubocop'
10
+ require_relative 'rubocop/monkey_patches/directive_comment'
11
+
12
+ # monkey patches needed for the TargetChefVersion config option
13
+ require_relative 'rubocop/monkey_patches/config'
14
+ require_relative 'rubocop/monkey_patches/base'
15
+ require_relative 'rubocop/monkey_patches/team'
16
+ require_relative 'rubocop/monkey_patches/registry_cop'
17
+
18
+ # Cookstyle patches the RuboCop tool to set a new default configuration that
19
+ # is vendored in the Cookstyle codebase.
20
+ module Cookstyle
21
+ # @return [String] the absolute path to the main RuboCop configuration YAML file
22
+ def self.config
23
+ config_file = const_defined?(:CHEFSTYLE_CONFIG) ? 'chefstyle.yml' : 'default.yml'
24
+ File.realpath(File.join(__dir__, '..', 'config', config_file))
25
+ end
26
+ end
27
+
28
+ require_relative 'rubocop/chef'
29
+ require_relative 'rubocop/chef/autocorrect_helpers'
30
+ require_relative 'rubocop/chef/cookbook_helpers'
31
+ require_relative 'rubocop/chef/platform_helpers'
32
+ require_relative 'rubocop/chef/cookbook_only'
33
+ require_relative 'rubocop/cop/target_chef_version'
34
+
35
+ # Chef Infra specific cops
36
+ Dir.glob(__dir__ + '/rubocop/cop/**/*.rb') do |file|
37
+ next if File.directory?(file)
38
+
39
+ require_relative file # not actually relative but require_relative is faster
40
+ end
41
+
42
+ # stub default value of TargetChefVersion to avoid STDERR noise when ConfigLoader.configuration_from_file runs
43
+ RuboCop::ConfigLoader.default_configuration['AllCops']['TargetChefVersion'] ||= nil
44
+
45
+ RuboCop::ConfigLoader.default_configuration = RuboCop::ConfigLoader.configuration_from_file(Cookstyle.config)
46
+
47
+ # re-stub TargetChefVersion to avoid STDERR noise on *next* configuration load
48
+ RuboCop::ConfigLoader.default_configuration['AllCops']['TargetChefVersion'] ||= nil
@@ -1,33 +1,33 @@
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 Chef
20
- # Helpers for use in autocorrection
21
- module AutocorrectHelpers
22
- # if the node has a heredoc as an argument you'll only get the start of the heredoc and removing
23
- # the node will result in broken ruby. This way we match the node and the entire heredoc for removal
24
- def expression_including_heredocs(node)
25
- if node.arguments.last.respond_to?(:heredoc?) && node.arguments.last.heredoc?
26
- node.loc.expression.join(node.arguments.last.loc.heredoc_end)
27
- else
28
- node.loc.expression
29
- end
30
- end
31
- end
32
- end
33
- 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 Chef
20
+ # Helpers for use in autocorrection
21
+ module AutocorrectHelpers
22
+ # if the node has a heredoc as an argument you'll only get the start of the heredoc and removing
23
+ # the node will result in broken ruby. This way we match the node and the entire heredoc for removal
24
+ def expression_including_heredocs(node)
25
+ if node.arguments.last.respond_to?(:heredoc?) && node.arguments.last.heredoc?
26
+ node.loc.expression.join(node.arguments.last.loc.heredoc_end)
27
+ else
28
+ node.loc.expression
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,127 +1,127 @@
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 Chef
20
- # Common node helpers used for matching against Chef Infra Cookbooks
21
- module CookbookHelpers
22
- def resource_block_name_if_string(node)
23
- if looks_like_resource?(node) && node.children.first.arguments.first.respond_to?(:value)
24
- node.children.first.arguments.first.value
25
- end
26
- end
27
-
28
- # Match a particular resource
29
- #
30
- # @param [String] resource_name The name of the resource to match
31
- # @param [RuboCop::AST::Node] node The rubocop ast node to search
32
- #
33
- # @yield
34
- #
35
- def match_resource_type?(resource_name, node)
36
- return unless looks_like_resource?(node)
37
- # bail out if we're not in the resource we care about or nil was passed (all resources)
38
- yield(node) if node.children.first.method?(resource_name.to_sym)
39
- end
40
-
41
- # Match particular properties within a resource
42
- #
43
- # @param [Symbol, Array<Symbol>] resource_names The name of the resources to match
44
- # @param [String] property_names The name of the property to match (or action)
45
- # @param [RuboCop::AST::Node] node The rubocop ast node to search
46
- #
47
- # @yield
48
- #
49
- def match_property_in_resource?(resource_names, property_names, node)
50
- return unless looks_like_resource?(node)
51
- # bail out if we're not in the resource we care about or nil was passed (all resources)
52
- return unless resource_names.nil? || Array(resource_names).include?(node.children.first.method_name) # see if we're in the right resource
53
-
54
- resource_block = node.children[2] # the 3rd child is the actual block in the resource
55
- return unless resource_block # nil would be an empty block
56
-
57
- if resource_block.begin_type? # if begin_type we need to iterate over the children
58
- resource_block.children.each do |resource_blk_child|
59
- extract_send_types(resource_blk_child) do |p|
60
- yield(p) if symbolized_property_types(property_names).include?(p.method_name)
61
- end
62
- end
63
- else # there's only a single property to check
64
- extract_send_types(resource_block) do |p|
65
- yield(p) if symbolized_property_types(property_names).include?(p.method_name)
66
- end
67
- end
68
- end
69
-
70
- def method_arg_ast_to_string(ast)
71
- # a property without a value. This is totally bogus, but they exist
72
- return if ast.children[2].nil?
73
- # https://rubular.com/r/6uzOMd6WCHewOu
74
- m = ast.children[2].source.match(/^("|')(.*)("|')$/)
75
- return m[2] unless m.nil?
76
- end
77
-
78
- private
79
-
80
- # @param [String, Array] property
81
- #
82
- # @return [Array]
83
- def symbolized_property_types(property)
84
- Array(property).map(&:to_sym)
85
- end
86
-
87
- #
88
- # given a node object does it look like a chef resource or not?
89
- # warning: currently this requires a resource with properties since we key off blocks and property-less resources look like methods
90
- #
91
- # @param [RuboCop::AST::Node] node AST object to test
92
- #
93
- # @return [boolean]
94
- #
95
- def looks_like_resource?(node)
96
- return false unless node.block_type? # resources are blocks if they have properties
97
- return false unless node.children.first.receiver.nil? # resource blocks don't have a receiver
98
- return false if node.send_node.arguments.first.is_a?(RuboCop::AST::SymbolNode) # resources have a string name. resource actions have symbols
99
-
100
- # bail if the block doesn't have a name a resource *generally* has a name.
101
- # This isn't 100% true with things like apt_update and build_essential, but we'll live
102
- # with that for now to avoid the false positives of getting stuck in generic blocks in resources
103
- return false if node.children.first.arguments.empty?
104
-
105
- # if we made it this far we're probably in a resource
106
- true
107
- end
108
-
109
- def extract_send_types(node)
110
- return if node.nil? # there are cases we can be passed an empty node
111
- case node.type
112
- when :send
113
- yield(node) if node.receiver.nil? # if it's not nil then we're not in a property foo we're in bar.foo
114
- when :block # ie: not_if { ruby_foo }
115
- yield(node)
116
- when :while
117
- extract_send_types(node.body) { |t| yield(t) }
118
- when :if
119
- node.branches.each { |n| extract_send_types(n) { |t| yield(t) } }
120
- when :case
121
- node.when_branches.each { |n| extract_send_types(n.body) { |t| yield(t) } } # unless node.when_branches.nil?
122
- extract_send_types(node.else_branch) { |t| yield(t) } if node.else_branch
123
- end
124
- end
125
- end
126
- end
127
- 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 Chef
20
+ # Common node helpers used for matching against Chef Infra Cookbooks
21
+ module CookbookHelpers
22
+ def resource_block_name_if_string(node)
23
+ if looks_like_resource?(node) && node.children.first.arguments.first.respond_to?(:value)
24
+ node.children.first.arguments.first.value
25
+ end
26
+ end
27
+
28
+ # Match a particular resource
29
+ #
30
+ # @param [String] resource_name The name of the resource to match
31
+ # @param [RuboCop::AST::Node] node The rubocop ast node to search
32
+ #
33
+ # @yield
34
+ #
35
+ def match_resource_type?(resource_name, node)
36
+ return unless looks_like_resource?(node)
37
+ # bail out if we're not in the resource we care about or nil was passed (all resources)
38
+ yield(node) if node.children.first.method?(resource_name.to_sym)
39
+ end
40
+
41
+ # Match particular properties within a resource
42
+ #
43
+ # @param [Symbol, Array<Symbol>] resource_names The name of the resources to match
44
+ # @param [String] property_names The name of the property to match (or action)
45
+ # @param [RuboCop::AST::Node] node The rubocop ast node to search
46
+ #
47
+ # @yield
48
+ #
49
+ def match_property_in_resource?(resource_names, property_names, node)
50
+ return unless looks_like_resource?(node)
51
+ # bail out if we're not in the resource we care about or nil was passed (all resources)
52
+ return unless resource_names.nil? || Array(resource_names).include?(node.children.first.method_name) # see if we're in the right resource
53
+
54
+ resource_block = node.children[2] # the 3rd child is the actual block in the resource
55
+ return unless resource_block # nil would be an empty block
56
+
57
+ if resource_block.begin_type? # if begin_type we need to iterate over the children
58
+ resource_block.children.each do |resource_blk_child|
59
+ extract_send_types(resource_blk_child) do |p|
60
+ yield(p) if symbolized_property_types(property_names).include?(p.method_name)
61
+ end
62
+ end
63
+ else # there's only a single property to check
64
+ extract_send_types(resource_block) do |p|
65
+ yield(p) if symbolized_property_types(property_names).include?(p.method_name)
66
+ end
67
+ end
68
+ end
69
+
70
+ def method_arg_ast_to_string(ast)
71
+ # a property without a value. This is totally bogus, but they exist
72
+ return if ast.children[2].nil?
73
+ # https://rubular.com/r/6uzOMd6WCHewOu
74
+ m = ast.children[2].source.match(/^("|')(.*)("|')$/)
75
+ m[2] unless m.nil?
76
+ end
77
+
78
+ private
79
+
80
+ # @param [String, Array] property
81
+ #
82
+ # @return [Array]
83
+ def symbolized_property_types(property)
84
+ Array(property).map(&:to_sym)
85
+ end
86
+
87
+ #
88
+ # given a node object does it look like a chef resource or not?
89
+ # warning: currently this requires a resource with properties since we key off blocks and property-less resources look like methods
90
+ #
91
+ # @param [RuboCop::AST::Node] node AST object to test
92
+ #
93
+ # @return [boolean]
94
+ #
95
+ def looks_like_resource?(node)
96
+ return false unless node.block_type? # resources are blocks if they have properties
97
+ return false unless node.children.first.receiver.nil? # resource blocks don't have a receiver
98
+ return false if node.send_node.arguments.first.is_a?(RuboCop::AST::SymbolNode) # resources have a string name. resource actions have symbols
99
+
100
+ # bail if the block doesn't have a name a resource *generally* has a name.
101
+ # This isn't 100% true with things like apt_update and build_essential, but we'll live
102
+ # with that for now to avoid the false positives of getting stuck in generic blocks in resources
103
+ return false if node.children.first.arguments.empty?
104
+
105
+ # if we made it this far we're probably in a resource
106
+ true
107
+ end
108
+
109
+ def extract_send_types(node)
110
+ return if node.nil? # there are cases we can be passed an empty node
111
+ case node.type
112
+ when :send
113
+ yield(node) if node.receiver.nil? # if it's not nil then we're not in a property foo we're in bar.foo
114
+ when :block # ie: not_if { ruby_foo }
115
+ yield(node)
116
+ when :while
117
+ extract_send_types(node.body) { |t| yield(t) }
118
+ when :if
119
+ node.branches.each { |n| extract_send_types(n) { |t| yield(t) } }
120
+ when :case
121
+ node.when_branches.each { |n| extract_send_types(n.body) { |t| yield(t) } } # unless node.when_branches.nil?
122
+ extract_send_types(node.else_branch) { |t| yield(t) } if node.else_branch
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end