cookstyle-ng 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (275) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +25 -0
  3. data/LICENSE +201 -0
  4. data/bin/cookstyle +26 -0
  5. data/bin/cookstyle-profile +31 -0
  6. data/config/cookstyle.yml +3248 -0
  7. data/cookstyle.gemspec +30 -0
  8. data/lib/cookstyle/version.rb +5 -0
  9. data/lib/cookstyle.rb +44 -0
  10. data/lib/rubocop/chef/autocorrect_helpers.rb +33 -0
  11. data/lib/rubocop/chef/cookbook_helpers.rb +127 -0
  12. data/lib/rubocop/chef/cookbook_only.rb +76 -0
  13. data/lib/rubocop/chef/platform_helpers.rb +72 -0
  14. data/lib/rubocop/chef.rb +11 -0
  15. data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +61 -0
  16. data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +56 -0
  17. data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +69 -0
  18. data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +55 -0
  19. data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +77 -0
  20. data/lib/rubocop/cop/chef/correctness/invalid_cookbook_name.rb +47 -0
  21. data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +48 -0
  22. data/lib/rubocop/cop/chef/correctness/invalid_notification_resource.rb +59 -0
  23. data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +55 -0
  24. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +72 -0
  25. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +70 -0
  26. data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +57 -0
  27. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +89 -0
  28. data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +70 -0
  29. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +70 -0
  30. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +69 -0
  31. data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +48 -0
  32. data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +53 -0
  33. data/lib/rubocop/cop/chef/correctness/lazy_in_resource_guard.rb +67 -0
  34. data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +67 -0
  35. data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +67 -0
  36. data/lib/rubocop/cop/chef/correctness/metadata_malformed_version.rb +58 -0
  37. data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +54 -0
  38. data/lib/rubocop/cop/chef/correctness/metadata_missing_version.rb +51 -0
  39. data/lib/rubocop/cop/chef/correctness/node_normal.rb +53 -0
  40. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +53 -0
  41. data/lib/rubocop/cop/chef/correctness/node_save.rb +46 -0
  42. data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +64 -0
  43. data/lib/rubocop/cop/chef/correctness/octal_mode_as_string.rb +48 -0
  44. data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +46 -0
  45. data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +54 -0
  46. data/lib/rubocop/cop/chef/correctness/powershell_file_exists.rb +50 -0
  47. data/lib/rubocop/cop/chef/correctness/property_without_type.rb +59 -0
  48. data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +51 -0
  49. data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +50 -0
  50. data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +56 -0
  51. data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +52 -0
  52. data/lib/rubocop/cop/chef/correctness/service_resource.rb +56 -0
  53. data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +52 -0
  54. data/lib/rubocop/cop/chef/correctness/tmp_path.rb +59 -0
  55. data/lib/rubocop/cop/chef/deprecation/cb_depends_on_self.rb +57 -0
  56. data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +52 -0
  57. data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +55 -0
  58. data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +57 -0
  59. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +98 -0
  60. data/lib/rubocop/cop/chef/deprecation/chef_shellout.rb +83 -0
  61. data/lib/rubocop/cop/chef/deprecation/chef_sugar_helpers.rb +55 -0
  62. data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +55 -0
  63. data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +56 -0
  64. data/lib/rubocop/cop/chef/deprecation/cheffile.rb +39 -0
  65. data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +49 -0
  66. data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +61 -0
  67. data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +56 -0
  68. data/lib/rubocop/cop/chef/deprecation/delivery.rb +48 -0
  69. data/lib/rubocop/cop/chef/deprecation/depends_chef_nginx_cookbook.rb +54 -0
  70. data/lib/rubocop/cop/chef/deprecation/depends_chef_reporting_cookbook.rb +51 -0
  71. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +54 -0
  72. data/lib/rubocop/cop/chef/deprecation/depends_omnibus_updater_cookbook.rb +54 -0
  73. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +50 -0
  74. data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +48 -0
  75. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +129 -0
  76. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +78 -0
  77. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +61 -0
  78. data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +64 -0
  79. data/lib/rubocop/cop/chef/deprecation/deprecated_sudo_actions.rb +65 -0
  80. data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +42 -0
  81. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_actions.rb +67 -0
  82. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +69 -0
  83. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +42 -0
  84. data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +49 -0
  85. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +51 -0
  86. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +42 -0
  87. data/lib/rubocop/cop/chef/deprecation/execute_path_property.rb +50 -0
  88. data/lib/rubocop/cop/chef/deprecation/execute_relative_creates_without_cwd.rb +66 -0
  89. data/lib/rubocop/cop/chef/deprecation/foodcritic_file.rb +41 -0
  90. data/lib/rubocop/cop/chef/deprecation/foodcritic_testing.rb +43 -0
  91. data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +140 -0
  92. data/lib/rubocop/cop/chef/deprecation/hwrp_without_unified_mode_true.rb +86 -0
  93. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +59 -0
  94. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +56 -0
  95. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +91 -0
  96. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +53 -0
  97. data/lib/rubocop/cop/chef/deprecation/librarian_chefspec.rb +42 -0
  98. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +46 -0
  99. data/lib/rubocop/cop/chef/deprecation/log_resource_notifications.rb +63 -0
  100. data/lib/rubocop/cop/chef/deprecation/macos_userdefaults_global_property.rb +60 -0
  101. data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +60 -0
  102. data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +65 -0
  103. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +80 -0
  104. data/lib/rubocop/cop/chef/deprecation/node_set.rb +54 -0
  105. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +54 -0
  106. data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +70 -0
  107. data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +67 -0
  108. data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +61 -0
  109. data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +63 -0
  110. data/lib/rubocop/cop/chef/deprecation/policyfile_community_source.rb +53 -0
  111. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +59 -0
  112. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +53 -0
  113. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +48 -0
  114. data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +46 -0
  115. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +84 -0
  116. data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +40 -0
  117. data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +50 -0
  118. data/lib/rubocop/cop/chef/deprecation/resource_without_unified_mode_true.rb +87 -0
  119. data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +56 -0
  120. data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +62 -0
  121. data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +63 -0
  122. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +136 -0
  123. data/lib/rubocop/cop/chef/deprecation/use_automatic_resource_name.rb +52 -0
  124. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +57 -0
  125. data/lib/rubocop/cop/chef/deprecation/use_yaml_dump.rb +47 -0
  126. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +71 -0
  127. data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +57 -0
  128. data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +58 -0
  129. data/lib/rubocop/cop/chef/deprecation/windows_package_installer_type_string.rb +60 -0
  130. data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +83 -0
  131. data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +71 -0
  132. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +51 -0
  133. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +53 -0
  134. data/lib/rubocop/cop/chef/effortless/berksfile.rb +39 -0
  135. data/lib/rubocop/cop/chef/effortless/chef_vault_used.rb +87 -0
  136. data/lib/rubocop/cop/chef/effortless/data_bags.rb +40 -0
  137. data/lib/rubocop/cop/chef/effortless/depends_chef_vault.rb +47 -0
  138. data/lib/rubocop/cop/chef/effortless/node_environment.rb +45 -0
  139. data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +44 -0
  140. data/lib/rubocop/cop/chef/effortless/node_roles.rb +45 -0
  141. data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +43 -0
  142. data/lib/rubocop/cop/chef/effortless/search_used.rb +40 -0
  143. data/lib/rubocop/cop/chef/modernize/action_method_in_resource.rb +57 -0
  144. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +77 -0
  145. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +54 -0
  146. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +70 -0
  147. data/lib/rubocop/cop/chef/modernize/build_essential.rb +55 -0
  148. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +60 -0
  149. data/lib/rubocop/cop/chef/modernize/chef_15_resources.rb +57 -0
  150. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +63 -0
  151. data/lib/rubocop/cop/chef/modernize/class_eval_action_class.rb +63 -0
  152. data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +53 -0
  153. data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +55 -0
  154. data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +121 -0
  155. data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +50 -0
  156. data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +59 -0
  157. data/lib/rubocop/cop/chef/modernize/declare_action_class.rb +54 -0
  158. data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +74 -0
  159. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +54 -0
  160. data/lib/rubocop/cop/chef/modernize/definitions.rb +36 -0
  161. data/lib/rubocop/cop/chef/modernize/depends_chef_vault_cookbook.rb +54 -0
  162. data/lib/rubocop/cop/chef/modernize/depends_chocolatey_cookbooks.rb +55 -0
  163. data/lib/rubocop/cop/chef/modernize/depends_kernel_module_cookbook.rb +54 -0
  164. data/lib/rubocop/cop/chef/modernize/depends_locale_cookbook.rb +54 -0
  165. data/lib/rubocop/cop/chef/modernize/depends_openssl_cookbook.rb +54 -0
  166. data/lib/rubocop/cop/chef/modernize/depends_timezone_lwrp_cookbook.rb +54 -0
  167. data/lib/rubocop/cop/chef/modernize/depends_windows_firewall_cookbook.rb +54 -0
  168. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +54 -0
  169. data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +55 -0
  170. data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +52 -0
  171. data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +81 -0
  172. data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +67 -0
  173. data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +76 -0
  174. data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +70 -0
  175. data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +83 -0
  176. data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +46 -0
  177. data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +48 -0
  178. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +83 -0
  179. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +70 -0
  180. data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +58 -0
  181. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +51 -0
  182. data/lib/rubocop/cop/chef/modernize/node_init_package.rb +89 -0
  183. data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +57 -0
  184. data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +47 -0
  185. data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +54 -0
  186. data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +60 -0
  187. data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +51 -0
  188. data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +50 -0
  189. data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +68 -0
  190. data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +53 -0
  191. data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +56 -0
  192. data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +56 -0
  193. data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +68 -0
  194. data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +63 -0
  195. data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +49 -0
  196. data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +66 -0
  197. data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +94 -0
  198. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +77 -0
  199. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +63 -0
  200. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +52 -0
  201. data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +53 -0
  202. data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +46 -0
  203. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +60 -0
  204. data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +58 -0
  205. data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +63 -0
  206. data/lib/rubocop/cop/chef/modernize/sysctl_param_resource.rb +55 -0
  207. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +51 -0
  208. data/lib/rubocop/cop/chef/modernize/use_chef_language_cloud_helpers.rb +93 -0
  209. data/lib/rubocop/cop/chef/modernize/use_chef_language_env_helpers.rb +69 -0
  210. data/lib/rubocop/cop/chef/modernize/use_chef_language_systemd_helper.rb +60 -0
  211. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +113 -0
  212. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +60 -0
  213. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +58 -0
  214. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +52 -0
  215. data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +92 -0
  216. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +46 -0
  217. data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +59 -0
  218. data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +60 -0
  219. data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +65 -0
  220. data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +60 -0
  221. data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +52 -0
  222. data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +46 -0
  223. data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +60 -0
  224. data/lib/rubocop/cop/chef/redundant/double_compile_time.rb +68 -0
  225. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +46 -0
  226. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +46 -0
  227. data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +58 -0
  228. data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +81 -0
  229. data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +65 -0
  230. data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +59 -0
  231. data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +61 -0
  232. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +46 -0
  233. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +47 -0
  234. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +46 -0
  235. data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +52 -0
  236. data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +50 -0
  237. data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +64 -0
  238. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +46 -0
  239. data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +60 -0
  240. data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +67 -0
  241. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +116 -0
  242. data/lib/rubocop/cop/chef/security/ssh_private_key.rb +49 -0
  243. data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +50 -0
  244. data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +47 -0
  245. data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +55 -0
  246. data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +52 -0
  247. data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +60 -0
  248. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +62 -0
  249. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +542 -0
  250. data/lib/rubocop/cop/chef/style/attribute_keys.rb +95 -0
  251. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +49 -0
  252. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +42 -0
  253. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +101 -0
  254. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +50 -0
  255. data/lib/rubocop/cop/chef/style/comments_format.rb +71 -0
  256. data/lib/rubocop/cop/chef/style/file_mode.rb +86 -0
  257. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +59 -0
  258. data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +58 -0
  259. data/lib/rubocop/cop/chef/style/negating_only_if.rb +69 -0
  260. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +70 -0
  261. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +89 -0
  262. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +53 -0
  263. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +103 -0
  264. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +100 -0
  265. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +86 -0
  266. data/lib/rubocop/cop/inspec/deprecation/attribute_default.rb +53 -0
  267. data/lib/rubocop/cop/inspec/deprecation/attribute_helper.rb +47 -0
  268. data/lib/rubocop/cop/target_chef_version.rb +22 -0
  269. data/lib/rubocop/monkey_patches/allow_invalid_ruby.rb +28 -0
  270. data/lib/rubocop/monkey_patches/base.rb +11 -0
  271. data/lib/rubocop/monkey_patches/config.rb +15 -0
  272. data/lib/rubocop/monkey_patches/directive_comment.rb +12 -0
  273. data/lib/rubocop/monkey_patches/registry_cop.rb +15 -0
  274. data/lib/rubocop/monkey_patches/team.rb +27 -0
  275. metadata +340 -0
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright 2019, Chef Software Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+ module RuboCop
18
+ module Cop
19
+ module Chef
20
+ module Correctness
21
+ # Normal attributes are discouraged since their semantics differ importantly from the default and override levels. Their values persist in the node object even after all code referencing them has been deleted, unlike default and override.
22
+ #
23
+ # Code should be updated to use default or override levels, but this will change attribute merging behavior so needs to be validated manually and force_default or force_override levels may need to be used in recipe code.
24
+ #
25
+ # @example
26
+ #
27
+ # ### incorrect
28
+ # node.normal_unless['foo'] = true
29
+ #
30
+ # ### correct
31
+ # node.default_unless['foo'] = true
32
+ # node.override_unless['foo'] = true
33
+ # node.force_default_unless['foo'] = true
34
+ # node.force_override_unless['foo'] = true
35
+ #
36
+ class NodeNormalUnless < Base
37
+ MSG = 'Do not use node.normal_unless. Replace with default/override/force_default/force_override attribute levels.'
38
+ RESTRICT_ON_SEND = [:normal_unless].freeze
39
+
40
+ def_node_matcher :node_normal_unless?, <<-PATTERN
41
+ (send (send _ :node) :normal_unless)
42
+ PATTERN
43
+
44
+ def on_send(node)
45
+ node_normal_unless?(node) do
46
+ add_offense(node, severity: :refactor)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,46 @@
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
+ # Don't use node.save to save partial node data to the Chef Infra Server mid-run unless it's a requirement of cookbook design that can't be avoided. Node.save can result in failed Chef Infra runs appearing in search and increases load on the Chef Infra Server."
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # node.save
28
+ #
29
+ class CookbookUsesNodeSave < Base
30
+ MSG = "Don't use node.save to save partial node data to the Chef Infra Server mid-run unless it's absolutely necessary. Node.save can result in failed Chef Infra runs appearing in search and increases load on the Chef Infra Server."
31
+ RESTRICT_ON_SEND = [:save].freeze
32
+
33
+ def_node_matcher :node_save?, <<-PATTERN
34
+ (send (send nil? :node) :save)
35
+ PATTERN
36
+
37
+ def on_send(node)
38
+ node_save?(node) do
39
+ add_offense(node, severity: :refactor)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,64 @@
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
+ # When notifying or subscribing actions within a resource the action should always be a symbol. In Chef Infra Client releases before 14.0, this may result in double notification.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # execute 'some command' do
28
+ # notifies 'restart', 'service[httpd]', 'delayed'
29
+ # end
30
+ #
31
+ # execute 'some command' do
32
+ # subscribes 'restart', 'service[httpd]', 'delayed'
33
+ # end
34
+ #
35
+ # ### correct
36
+ # execute 'some command' do
37
+ # notifies :restart, 'service[httpd]', 'delayed'
38
+ # end
39
+ #
40
+ # execute 'some command' do
41
+ # subscribes :restart, 'service[httpd]', 'delayed'
42
+ # end
43
+ #
44
+ class NotifiesActionNotSymbol < Base
45
+ include RuboCop::Chef::CookbookHelpers
46
+ extend AutoCorrector
47
+
48
+ MSG = 'Resource notification and subscription actions should be symbols not strings.'
49
+
50
+ def on_block(node)
51
+ match_property_in_resource?(nil, %w(notifies subscribes), node) do |notifies_property|
52
+ return unless notifies_property.node_parts[2].str_type?
53
+
54
+ add_offense(notifies_property, severity: :refactor) do |corrector|
55
+ corrector.replace(notifies_property.first_argument,
56
+ ":#{notifies_property.node_parts[2].value}")
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,48 @@
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
+ # Don't represent file modes as Strings containing octal values.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # file '/etc/some_file' do
28
+ # mode '0o755'
29
+ # end
30
+ #
31
+ # ### correct
32
+ # file '/etc/some_file' do
33
+ # mode '0755'
34
+ # end
35
+ #
36
+ class OctalModeAsString < Base
37
+ MSG = "Don't represent file modes as strings containing octal values. Use standard base 10 file modes instead. For example: '0755'."
38
+ RESTRICT_ON_SEND = [:mode].freeze
39
+
40
+ def on_send(node)
41
+ return unless node.arguments.first&.str_type? && node.arguments.first.value.match?(/^0o/)
42
+ add_offense(node, severity: :refactor)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright:: Copyright 2020, Chef Software Inc.
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 OpenSSL cookbook provides a deprecated `secure_password` helper in the `Opscode::OpenSSL::Password` class, which should no longer be used. This helper would generate a random password that would be used when a data bag or attribute was no present. The practice of generating passwords to be stored on the node is bad security as it exposes the password to anyone that can view the nodes, and deleting a node deletes the password. Passwords should be retrieved from a secure source for use in cookbooks.
23
+ #
24
+ # ### incorrect
25
+ # ::Chef::Recipe.send(:include, Opscode::OpenSSL::Password)
26
+ # basic_auth_password = secure_password
27
+ #
28
+ class OpenSSLPasswordHelpers < Base
29
+ MSG = 'The `secure_password` helper from the openssl cookbooks `Opscode::OpenSSL::Password` class should not be used to generate passwords.'
30
+
31
+ def_node_matcher :openssl_helper?, <<~PATTERN
32
+ (const
33
+ (const
34
+ (const nil? :Opscode) :OpenSSL) :Password)
35
+ PATTERN
36
+
37
+ def on_const(node)
38
+ openssl_helper?(node) do
39
+ add_offense(node, severity: :warning)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,54 @@
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
+ # Use the `file` or `directory` resources built into Chef Infra Client with the :delete action to remove files/directories instead of using Remove-Item in a powershell_script resource
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # powershell_script 'Cleanup old files' do
28
+ # code 'Remove-Item C:\Windows\foo\bar.txt'
29
+ # only_if { ::File.exist?('C:\\Windows\\foo\\bar.txt') }
30
+ # end
31
+ #
32
+ # ### correct
33
+ # file 'C:\Windows\foo\bar.txt' do
34
+ # action :delete
35
+ # end
36
+ #
37
+ class PowershellScriptDeleteFile < Base
38
+ include RuboCop::Chef::CookbookHelpers
39
+
40
+ MSG = 'Use the `file` or `directory` resources built into Chef Infra Client with the :delete action to remove files/directories instead of using Remove-Item in a powershell_script resource'
41
+
42
+ def on_block(node)
43
+ match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
44
+ property_data = method_arg_ast_to_string(code_property)
45
+ return unless property_data && property_data.match?(/^remove-item/i) &&
46
+ !property_data.include?('*')
47
+ add_offense(node, severity: :refactor)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: 2021, 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
+ # Use Ruby's built-in `File.exist?('C:\somefile')` method instead of executing PowerShell's `Test-Path` cmdlet, which takes longer to load.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # powershell_out('Test-Path "C:\\Program Files\\LAPS\\CSE\\AdmPwd.dll"').stdout.strip == 'True'
28
+ #
29
+ # ### correct
30
+ # ::File.exist?('C:\Program Files\LAPS\CSE\AdmPwd.dll')
31
+ #
32
+ class PowershellFileExists < Base
33
+ RESTRICT_ON_SEND = [:powershell_out, :powershell_out!].freeze
34
+ MSG = "Use Ruby's built-in `File.exist?('C:\\somefile')` method instead of executing PowerShell's `Test-Path` cmdlet, which takes longer to load."
35
+
36
+ def_node_matcher :powershell_out_exists?, <<-PATTERN
37
+ (send nil? {:powershell_out :powershell_out!} (str $_))
38
+ PATTERN
39
+
40
+ def on_send(node)
41
+ powershell_out_exists?(node) do |exists_string|
42
+ return unless exists_string.match?(/^Test-Path/)
43
+ add_offense(node, severity: :refactor)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,59 @@
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
+ # Resource properties or attributes should always define a type to help users understand the correct allowed values.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # property :size, regex: /^\d+[KMGTP]$/
28
+ # attribute :size, regex: /^\d+[KMGTP]$/
29
+ #
30
+ # ### correct
31
+ # property :size, String, regex: /^\d+[KMGTP]$/
32
+ # attribute :size, kind_of: String, regex: /^\d+[KMGTP]$/
33
+ #
34
+ class PropertyWithoutType < Base
35
+ MSG = 'Resource properties or attributes should always define a type to help users understand the correct allowed values.'
36
+ RESTRICT_ON_SEND = [:property, :attribute].freeze
37
+
38
+ def_node_matcher :property_without_type?, <<-PATTERN
39
+ (send nil? {:property :attribute}
40
+ (sym _)
41
+ $(hash
42
+
43
+ ...
44
+ )?
45
+ )
46
+ PATTERN
47
+
48
+ def on_send(node)
49
+ property_without_type?(node) do |hash_vals|
50
+ return if hash_vals&.first&.keys&.include?(s(:sym, :kind_of))
51
+
52
+ add_offense(node, severity: :refactor)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,51 @@
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
+ # Chef Infra Client uses properties in several resources to track state. These should not be set in recipes as they break the internal workings of the Chef Infra Client
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # service 'foo' do
28
+ # running true
29
+ # action [:start, :enable]
30
+ # end
31
+ #
32
+ # ### correct
33
+ # service 'foo' do
34
+ # action [:start, :enable]
35
+ # end
36
+ #
37
+ class ResourceSetsInternalProperties < Base
38
+ include RuboCop::Chef::CookbookHelpers
39
+
40
+ MSG = 'Do not set properties used internally by Chef Infra Client to track the system state.'
41
+
42
+ def on_block(node)
43
+ match_property_in_resource?(:service, 'running', node) do |prop|
44
+ add_offense(prop, severity: :refactor)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,50 @@
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
+ # Use name properties instead of setting the name property in a resource. Setting the name property directly causes notification and reporting issues.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # service 'foo' do
28
+ # name 'bar'
29
+ # end
30
+ #
31
+ # ### correct
32
+ # service 'foo' do
33
+ # service_name 'bar'
34
+ # end
35
+ #
36
+ class ResourceSetsNameProperty < Base
37
+ include RuboCop::Chef::CookbookHelpers
38
+
39
+ MSG = 'Resource sets the name property in the resource instead of using a name_property.'
40
+
41
+ def on_block(node)
42
+ match_property_in_resource?(nil, 'name', node) do |name_node|
43
+ add_offense(name_node, severity: :refactor)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,56 @@
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
+ # The :nothing action is often typo'd as :none
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # service 'foo' do
28
+ # action :none
29
+ # end
30
+ #
31
+ # ### correct
32
+ # service 'foo' do
33
+ # action :nothing
34
+ # end
35
+ #
36
+ class ResourceWithNoneAction < Base
37
+ include RuboCop::Chef::CookbookHelpers
38
+ extend AutoCorrector
39
+
40
+ MSG = 'Resource uses the nonexistent :none action instead of the :nothing action'
41
+
42
+ def on_block(node)
43
+ match_property_in_resource?(nil, 'action', node) do |action_node|
44
+ action_node.arguments.each do |action|
45
+ next unless action.source == ':none'
46
+ add_offense(action, severity: :refactor) do |corrector|
47
+ corrector.replace(action, ':nothing')
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,52 @@
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
+ # Scope file exist to access the correct `File` class by using `::File.exist?` not `File.exist?`.
23
+ #
24
+ # @example
25
+ #
26
+ # ### incorrect
27
+ # not_if { File.exist?('/etc/foo/bar') }
28
+ #
29
+ # ### correct
30
+ # not_if { ::File.exist?('/etc/foo/bar') }
31
+ #
32
+ class ScopedFileExist < Base
33
+ extend AutoCorrector
34
+
35
+ MSG = 'Scope file exist to access the correct File class by using ::File.exist? not File.exist?.'
36
+
37
+ def_node_matcher :unscoped_file_exist?, <<-PATTERN
38
+ (block (send nil? {:not_if :only_if}) (args) (send $(const nil? :File) {:exist? :exists?} (...)))
39
+ PATTERN
40
+
41
+ def on_block(node)
42
+ unscoped_file_exist?(node) do |m|
43
+ add_offense(m, severity: :refactor) do |corrector|
44
+ corrector.replace(m, '::File')
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end