cookstyle 8.6.4 → 8.7.6

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 (285) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +25 -25
  3. data/LICENSE +201 -201
  4. data/bin/cookstyle +31 -31
  5. data/bin/cookstyle-profile +31 -31
  6. data/config/chefstyle.yml +956 -920
  7. data/config/cookstyle.yml +3347 -3311
  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 +8 -5
  12. data/lib/cookstyle.rb +49 -48
  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/empty_resource_guard.rb +104 -104
  23. data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +77 -77
  24. data/lib/rubocop/cop/chef/correctness/invalid_cookbook_name.rb +47 -47
  25. data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +48 -48
  26. data/lib/rubocop/cop/chef/correctness/invalid_notification_resource.rb +59 -59
  27. data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +55 -55
  28. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +72 -72
  29. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +70 -70
  30. data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +57 -57
  31. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +89 -89
  32. data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +70 -70
  33. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +70 -70
  34. data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +69 -69
  35. data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +48 -48
  36. data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +53 -53
  37. data/lib/rubocop/cop/chef/correctness/lazy_in_resource_guard.rb +67 -67
  38. data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +67 -67
  39. data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +67 -67
  40. data/lib/rubocop/cop/chef/correctness/metadata_malformed_version.rb +58 -58
  41. data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +54 -54
  42. data/lib/rubocop/cop/chef/correctness/metadata_missing_version.rb +51 -51
  43. data/lib/rubocop/cop/chef/correctness/node_normal.rb +53 -53
  44. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +53 -53
  45. data/lib/rubocop/cop/chef/correctness/node_save.rb +46 -46
  46. data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +64 -64
  47. data/lib/rubocop/cop/chef/correctness/octal_mode_as_string.rb +48 -48
  48. data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +46 -46
  49. data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +54 -54
  50. data/lib/rubocop/cop/chef/correctness/powershell_file_exists.rb +50 -50
  51. data/lib/rubocop/cop/chef/correctness/property_without_type.rb +59 -59
  52. data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +51 -51
  53. data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +50 -50
  54. data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +56 -56
  55. data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +52 -52
  56. data/lib/rubocop/cop/chef/correctness/service_resource.rb +56 -56
  57. data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +52 -52
  58. data/lib/rubocop/cop/chef/correctness/tmp_path.rb +59 -59
  59. data/lib/rubocop/cop/chef/deprecation/cb_depends_on_self.rb +57 -57
  60. data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +52 -52
  61. data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +55 -55
  62. data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +57 -57
  63. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +98 -98
  64. data/lib/rubocop/cop/chef/deprecation/chef_shellout.rb +83 -83
  65. data/lib/rubocop/cop/chef/deprecation/chef_sugar_helpers.rb +55 -55
  66. data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +55 -55
  67. data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +56 -56
  68. data/lib/rubocop/cop/chef/deprecation/cheffile.rb +39 -39
  69. data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +49 -49
  70. data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +61 -61
  71. data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +56 -56
  72. data/lib/rubocop/cop/chef/deprecation/delivery.rb +48 -48
  73. data/lib/rubocop/cop/chef/deprecation/depends_chef_nginx_cookbook.rb +54 -54
  74. data/lib/rubocop/cop/chef/deprecation/depends_chef_reporting_cookbook.rb +51 -51
  75. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +54 -54
  76. data/lib/rubocop/cop/chef/deprecation/depends_omnibus_updater_cookbook.rb +54 -54
  77. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +50 -50
  78. data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +48 -48
  79. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +129 -129
  80. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +78 -78
  81. data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +61 -61
  82. data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +64 -64
  83. data/lib/rubocop/cop/chef/deprecation/deprecated_sudo_actions.rb +65 -65
  84. data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +42 -42
  85. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_actions.rb +67 -67
  86. data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +69 -69
  87. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +42 -42
  88. data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +49 -49
  89. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +51 -51
  90. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +42 -42
  91. data/lib/rubocop/cop/chef/deprecation/execute_path_property.rb +50 -50
  92. data/lib/rubocop/cop/chef/deprecation/execute_relative_creates_without_cwd.rb +66 -66
  93. data/lib/rubocop/cop/chef/deprecation/foodcritic_file.rb +41 -41
  94. data/lib/rubocop/cop/chef/deprecation/foodcritic_testing.rb +43 -43
  95. data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +136 -136
  96. data/lib/rubocop/cop/chef/deprecation/hwrp_without_unified_mode_true.rb +86 -86
  97. data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +59 -59
  98. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +56 -56
  99. data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +91 -91
  100. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +53 -53
  101. data/lib/rubocop/cop/chef/deprecation/librarian_chefspec.rb +42 -42
  102. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +46 -46
  103. data/lib/rubocop/cop/chef/deprecation/log_resource_notifications.rb +63 -63
  104. data/lib/rubocop/cop/chef/deprecation/macos_userdefaults_global_property.rb +60 -60
  105. data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +60 -60
  106. data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +65 -65
  107. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +80 -80
  108. data/lib/rubocop/cop/chef/deprecation/node_set.rb +54 -54
  109. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +54 -54
  110. data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +70 -70
  111. data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +67 -67
  112. data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +61 -61
  113. data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +63 -63
  114. data/lib/rubocop/cop/chef/deprecation/policyfile_community_source.rb +53 -53
  115. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +59 -59
  116. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +53 -53
  117. data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +48 -48
  118. data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +46 -46
  119. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +84 -84
  120. data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +40 -40
  121. data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +51 -51
  122. data/lib/rubocop/cop/chef/deprecation/resource_without_unified_mode_true.rb +87 -87
  123. data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +56 -56
  124. data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +62 -62
  125. data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +63 -63
  126. data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +134 -134
  127. data/lib/rubocop/cop/chef/deprecation/use_automatic_resource_name.rb +52 -52
  128. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +57 -57
  129. data/lib/rubocop/cop/chef/deprecation/use_yaml_dump.rb +47 -47
  130. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +71 -71
  131. data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +57 -57
  132. data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +58 -58
  133. data/lib/rubocop/cop/chef/deprecation/windows_package_installer_type_string.rb +60 -60
  134. data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +83 -83
  135. data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +71 -71
  136. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +51 -51
  137. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +53 -53
  138. data/lib/rubocop/cop/chef/effortless/berksfile.rb +39 -39
  139. data/lib/rubocop/cop/chef/effortless/chef_vault_used.rb +87 -87
  140. data/lib/rubocop/cop/chef/effortless/data_bags.rb +40 -40
  141. data/lib/rubocop/cop/chef/effortless/depends_chef_vault.rb +47 -47
  142. data/lib/rubocop/cop/chef/effortless/node_environment.rb +45 -45
  143. data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +44 -44
  144. data/lib/rubocop/cop/chef/effortless/node_roles.rb +45 -45
  145. data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +43 -43
  146. data/lib/rubocop/cop/chef/effortless/search_used.rb +40 -40
  147. data/lib/rubocop/cop/chef/modernize/action_method_in_resource.rb +57 -57
  148. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +77 -77
  149. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +54 -54
  150. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +70 -70
  151. data/lib/rubocop/cop/chef/modernize/build_essential.rb +55 -55
  152. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +60 -60
  153. data/lib/rubocop/cop/chef/modernize/chef_15_resources.rb +57 -57
  154. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +63 -63
  155. data/lib/rubocop/cop/chef/modernize/class_eval_action_class.rb +63 -63
  156. data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +53 -53
  157. data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +55 -55
  158. data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +121 -121
  159. data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +50 -50
  160. data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +59 -59
  161. data/lib/rubocop/cop/chef/modernize/declare_action_class.rb +54 -54
  162. data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +74 -74
  163. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +54 -54
  164. data/lib/rubocop/cop/chef/modernize/definitions.rb +36 -36
  165. data/lib/rubocop/cop/chef/modernize/depends_chef_vault_cookbook.rb +54 -54
  166. data/lib/rubocop/cop/chef/modernize/depends_chocolatey_cookbooks.rb +55 -55
  167. data/lib/rubocop/cop/chef/modernize/depends_kernel_module_cookbook.rb +54 -54
  168. data/lib/rubocop/cop/chef/modernize/depends_locale_cookbook.rb +54 -54
  169. data/lib/rubocop/cop/chef/modernize/depends_openssl_cookbook.rb +54 -54
  170. data/lib/rubocop/cop/chef/modernize/depends_timezone_lwrp_cookbook.rb +54 -54
  171. data/lib/rubocop/cop/chef/modernize/depends_windows_firewall_cookbook.rb +54 -54
  172. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +54 -54
  173. data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +55 -55
  174. data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +52 -52
  175. data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +81 -81
  176. data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +67 -67
  177. data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +76 -76
  178. data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +70 -70
  179. data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +83 -83
  180. data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +46 -46
  181. data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +48 -48
  182. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +83 -83
  183. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +70 -70
  184. data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +58 -58
  185. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +51 -51
  186. data/lib/rubocop/cop/chef/modernize/node_init_package.rb +89 -89
  187. data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +57 -57
  188. data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +47 -47
  189. data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +54 -54
  190. data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +60 -60
  191. data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +51 -51
  192. data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +50 -50
  193. data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +68 -68
  194. data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +53 -53
  195. data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +56 -56
  196. data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +56 -56
  197. data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +68 -68
  198. data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +63 -63
  199. data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +49 -49
  200. data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +66 -66
  201. data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +94 -94
  202. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +77 -77
  203. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +63 -63
  204. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +52 -52
  205. data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +53 -53
  206. data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +46 -46
  207. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +60 -60
  208. data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +58 -58
  209. data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +63 -63
  210. data/lib/rubocop/cop/chef/modernize/sysctl_param_resource.rb +55 -55
  211. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +51 -51
  212. data/lib/rubocop/cop/chef/modernize/use_chef_language_cloud_helpers.rb +93 -93
  213. data/lib/rubocop/cop/chef/modernize/use_chef_language_env_helpers.rb +69 -69
  214. data/lib/rubocop/cop/chef/modernize/use_chef_language_systemd_helper.rb +60 -60
  215. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +113 -113
  216. data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +60 -60
  217. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +58 -58
  218. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +52 -52
  219. data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +92 -92
  220. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +46 -46
  221. data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +59 -59
  222. data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +60 -60
  223. data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +65 -65
  224. data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +60 -60
  225. data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +52 -52
  226. data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +46 -46
  227. data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +60 -60
  228. data/lib/rubocop/cop/chef/redundant/double_compile_time.rb +68 -68
  229. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +46 -46
  230. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +46 -46
  231. data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +58 -58
  232. data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +81 -81
  233. data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +65 -65
  234. data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +59 -59
  235. data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +61 -61
  236. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +46 -46
  237. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +47 -47
  238. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +46 -46
  239. data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +52 -52
  240. data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +50 -50
  241. data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +64 -64
  242. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +46 -46
  243. data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +60 -60
  244. data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +67 -67
  245. data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +116 -116
  246. data/lib/rubocop/cop/chef/security/ssh_private_key.rb +49 -49
  247. data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +51 -51
  248. data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +47 -47
  249. data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +55 -55
  250. data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +52 -52
  251. data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +60 -60
  252. data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +62 -62
  253. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +819 -819
  254. data/lib/rubocop/cop/chef/style/attribute_keys.rb +94 -94
  255. data/lib/rubocop/cop/chef/style/chef_whaaat.rb +49 -49
  256. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +42 -42
  257. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +101 -101
  258. data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +50 -50
  259. data/lib/rubocop/cop/chef/style/comments_format.rb +71 -71
  260. data/lib/rubocop/cop/chef/style/file_mode.rb +86 -86
  261. data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +59 -59
  262. data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +58 -58
  263. data/lib/rubocop/cop/chef/style/negating_only_if.rb +69 -69
  264. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +70 -70
  265. data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +89 -89
  266. data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +53 -53
  267. data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +103 -103
  268. data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +100 -100
  269. data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +86 -86
  270. data/lib/rubocop/cop/chefstyle/ruby/gemspec_license.rb +55 -55
  271. data/lib/rubocop/cop/chefstyle/ruby/gemspec_require_rubygems.rb +46 -46
  272. data/lib/rubocop/cop/chefstyle/ruby/legacy_powershell_out_methods.rb +36 -36
  273. data/lib/rubocop/cop/chefstyle/ruby/require_net_https.rb +54 -54
  274. data/lib/rubocop/cop/chefstyle/ruby/unless_defined_require.rb +122 -122
  275. data/lib/rubocop/cop/inspec/deprecation/attribute_default.rb +53 -53
  276. data/lib/rubocop/cop/inspec/deprecation/attribute_helper.rb +47 -47
  277. data/lib/rubocop/cop/target_chef_version.rb +22 -22
  278. data/lib/rubocop/monkey_patches/allow_invalid_ruby.rb +28 -28
  279. data/lib/rubocop/monkey_patches/base.rb +11 -11
  280. data/lib/rubocop/monkey_patches/comment_config.rb +20 -0
  281. data/lib/rubocop/monkey_patches/config.rb +15 -15
  282. data/lib/rubocop/monkey_patches/directive_comment.rb +12 -12
  283. data/lib/rubocop/monkey_patches/registry_cop.rb +13 -15
  284. data/lib/rubocop/monkey_patches/team.rb +25 -25
  285. metadata +10 -5
@@ -1,94 +1,94 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: 2016, Noah Kantrowitz
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 Style
21
- # Check which style of keys are used to access node attributes.
22
- #
23
- # There are two supported styles: "symbols" and "strings".
24
- #
25
- # @example when configuration is `EnforcedStyle: symbols`
26
- #
27
- # # bad
28
- # node['foo']
29
- # node["foo"]
30
- #
31
- # # good
32
- # node[:foo]
33
- #
34
- # @example when configuration is `EnforcedStyle: strings`
35
- #
36
- # # bad
37
- # node[:foo]
38
- #
39
- # # good
40
- # node['foo']
41
- # node["foo"]
42
- #
43
- class AttributeKeys < Base
44
- extend AutoCorrector
45
- include RuboCop::Cop::ConfigurableEnforcedStyle
46
-
47
- MSG = 'Use %s to access node attributes'
48
- RESTRICT_ON_SEND = [:[]].freeze
49
-
50
- def_node_matcher :node_attribute_access?, <<-PATTERN
51
- (send (send _ :node) :[] _)
52
- PATTERN
53
-
54
- def_node_matcher :node_level_attribute_access?, <<-PATTERN
55
- (send (send {(send _ :node) nil} {:default :role_default :env_default :normal :override :role_override :env_override :force_override :automatic}) :[] _)
56
- PATTERN
57
-
58
- def on_send(node)
59
- if node_attribute_access?(node) || node_level_attribute_access?(node)
60
- # node is first child for #[], need to look for the outermost parent too.
61
- outer_node = node
62
- while outer_node.parent && outer_node.parent.send_type? && outer_node.parent.children[1] == :[]
63
- on_node_attribute_access(outer_node.children[2])
64
- outer_node = outer_node.parent
65
- end
66
- # One last time for the outer-most access.
67
- on_node_attribute_access(outer_node.children[2])
68
- end
69
- end
70
-
71
- def on_node_attribute_access(node)
72
- if node.str_type?
73
- style_detected(:strings)
74
- if style == :symbols
75
- add_offense(node, message: MSG % style, severity: :refactor) do |corrector|
76
- key_string = node.children.first.to_s
77
- corrector.replace(node, key_string.to_sym.inspect)
78
- end
79
- end
80
- elsif node.sym_type?
81
- style_detected(:symbols)
82
- if style == :strings
83
- add_offense(node, message: MSG % style, severity: :refactor) do |corrector|
84
- key_string = node.children.first.to_s
85
- corrector.replace(node, key_string.inspect)
86
- end
87
- end
88
- end
89
- end
90
- end
91
- end
92
- end
93
- end
94
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: 2016, Noah Kantrowitz
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 Style
21
+ # Check which style of keys are used to access node attributes.
22
+ #
23
+ # There are two supported styles: "symbols" and "strings".
24
+ #
25
+ # @example when configuration is `EnforcedStyle: symbols`
26
+ #
27
+ # # bad
28
+ # node['foo']
29
+ # node["foo"]
30
+ #
31
+ # # good
32
+ # node[:foo]
33
+ #
34
+ # @example when configuration is `EnforcedStyle: strings`
35
+ #
36
+ # # bad
37
+ # node[:foo]
38
+ #
39
+ # # good
40
+ # node['foo']
41
+ # node["foo"]
42
+ #
43
+ class AttributeKeys < Base
44
+ extend AutoCorrector
45
+ include RuboCop::Cop::ConfigurableEnforcedStyle
46
+
47
+ MSG = 'Use %s to access node attributes'
48
+ RESTRICT_ON_SEND = [:[]].freeze
49
+
50
+ def_node_matcher :node_attribute_access?, <<-PATTERN
51
+ (send (send _ :node) :[] _)
52
+ PATTERN
53
+
54
+ def_node_matcher :node_level_attribute_access?, <<-PATTERN
55
+ (send (send {(send _ :node) nil} {:default :role_default :env_default :normal :override :role_override :env_override :force_override :automatic}) :[] _)
56
+ PATTERN
57
+
58
+ def on_send(node)
59
+ if node_attribute_access?(node) || node_level_attribute_access?(node)
60
+ # node is first child for #[], need to look for the outermost parent too.
61
+ outer_node = node
62
+ while outer_node.parent && outer_node.parent.send_type? && outer_node.parent.children[1] == :[]
63
+ on_node_attribute_access(outer_node.children[2])
64
+ outer_node = outer_node.parent
65
+ end
66
+ # One last time for the outer-most access.
67
+ on_node_attribute_access(outer_node.children[2])
68
+ end
69
+ end
70
+
71
+ def on_node_attribute_access(node)
72
+ if node.str_type?
73
+ style_detected(:strings)
74
+ if style == :symbols
75
+ add_offense(node, message: MSG % style, severity: :refactor) do |corrector|
76
+ key_string = node.children.first.to_s
77
+ corrector.replace(node, key_string.to_sym.inspect)
78
+ end
79
+ end
80
+ elsif node.sym_type?
81
+ style_detected(:symbols)
82
+ if style == :strings
83
+ add_offense(node, message: MSG % style, severity: :refactor) do |corrector|
84
+ key_string = node.children.first.to_s
85
+ corrector.replace(node, key_string.inspect)
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -1,49 +1,49 @@
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
- # Checks for comments that mention "Chef" without context. Do you mean Chef Infra or Chef Software?
23
- #
24
- # @example
25
- #
26
- # # bad
27
- # Chef makes software
28
- # Chef configures your systems
29
- #
30
- # # good
31
- # Chef Software makes software
32
- # Chef Infra configures your systems
33
- #
34
- class ChefWhaaat < Base
35
- MSG = 'Do you mean Chef (the company) or a Chef product (e.g. Chef Infra, Chef InSpec, etc)?'
36
-
37
- def on_new_investigation
38
- return unless processed_source.ast
39
-
40
- processed_source.comments.each do |comment|
41
- next unless comment.text.match?(/Chef [a-z]/) # https://rubular.com/r/0YzfDAbwJrDHix
42
- add_offense(comment, severity: :refactor)
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
49
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright (c) 2016-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
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
+ # Checks for comments that mention "Chef" without context. Do you mean Chef Infra or Chef Software?
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # Chef makes software
28
+ # Chef configures your systems
29
+ #
30
+ # # good
31
+ # Chef Software makes software
32
+ # Chef Infra configures your systems
33
+ #
34
+ class ChefWhaaat < Base
35
+ MSG = 'Do you mean Chef (the company) or a Chef product (e.g. Chef Infra, Chef InSpec, etc)?'
36
+
37
+ def on_new_investigation
38
+ return unless processed_source.ast
39
+
40
+ processed_source.comments.each do |comment|
41
+ next unless comment.text.match?(/Chef [a-z]/) # https://rubular.com/r/0YzfDAbwJrDHix
42
+ add_offense(comment, severity: :refactor)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,42 +1,42 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: 2016-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
- # Replaces double spaces between sentences with a single space.
23
- # Note: This is DISABLED by default.
24
- class CommentSentenceSpacing < Base
25
- extend AutoCorrector
26
- MSG = 'Use a single space after sentences in comments'
27
-
28
- def on_new_investigation
29
- return unless processed_source.ast
30
-
31
- processed_source.comments.each do |comment|
32
- next unless comment.text.match?(/(.|\?)\s{2}/) # https://rubular.com/r/8o3SiDrQMJSzuU
33
- add_offense(comment, severity: :refactor) do |corrector|
34
- corrector.replace(comment, comment.text.gsub('. ', '. ').gsub('? ', '? '))
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright (c) 2016-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
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
+ # Replaces double spaces between sentences with a single space.
23
+ # Note: This is DISABLED by default.
24
+ class CommentSentenceSpacing < Base
25
+ extend AutoCorrector
26
+ MSG = 'Use a single space after sentences in comments'
27
+
28
+ def on_new_investigation
29
+ return unless processed_source.ast
30
+
31
+ processed_source.comments.each do |comment|
32
+ next unless comment.text.match?(/(.|\?)\s{2}/) # https://rubular.com/r/8o3SiDrQMJSzuU
33
+ add_offense(comment, severity: :refactor) do |corrector|
34
+ corrector.replace(comment, comment.text.gsub('. ', '. ').gsub('? ', '? '))
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,101 +1,101 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: 2016-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
- # Checks for incorrectly formatted copyright comments.
23
- #
24
- # @example
25
- #
26
- # # bad
27
- # Copyright:: 2013-2022 Opscode, Inc.
28
- # Copyright:: 2013-2022 Chef Inc.
29
- # Copyright:: 2013-2022 Chef Software Inc.
30
- # Copyright:: 2009-2010 2013-2022 Chef Software Inc.
31
- # Copyright:: Chef Software Inc.
32
- # Copyright:: Tim Smith
33
- # Copyright:: Copyright (c) 2015-2022 Chef Software, Inc.
34
- #
35
- # # good
36
- # Copyright:: 2013-2022 Chef Software, Inc.
37
- # Copyright:: 2013-2022 Tim Smith
38
- # Copyright:: 2019 37Signals, Inc.
39
- #
40
- class CopyrightCommentFormat < Base
41
- extend AutoCorrector
42
- require 'date'
43
-
44
- MSG = 'Properly format copyrights header comments'
45
-
46
- def on_new_investigation
47
- return unless processed_source.ast
48
-
49
- processed_source.comments.each do |comment|
50
- next unless comment.inline? && invalid_copyright_comment?(comment) # headers aren't in blocks
51
-
52
- add_offense(comment, severity: :refactor) do |corrector|
53
- correct_comment = "# Copyright:: #{copyright_date_range(comment)}, #{copyright_holder(comment)}"
54
- corrector.replace(comment, correct_comment)
55
- end
56
- end
57
- end
58
-
59
- private
60
-
61
- def copyright_date_range(comment)
62
- dates = comment.text.scan(/([0-9]{4})/)
63
-
64
- # no copyright year present so return this year
65
- return Time.new.year if dates.empty?
66
-
67
- oldest_date = dates.min.first.to_i
68
-
69
- # Avoid returning THIS_YEAR - THIS_YEAR
70
- if oldest_date == Time.new.year
71
- oldest_date
72
- else
73
- "#{oldest_date}-#{Time.new.year}"
74
- end
75
- end
76
-
77
- def copyright_holder(comment)
78
- # Grab just the company / individual name w/o :: or dates
79
- match = /(?:.*[0-9]{4}|Copyright\W*)(?:,)?(?:\s)?(.*)/.match(comment.text)
80
- marketing_sanitizer(match.captures.first)
81
- end
82
-
83
- # Flush Opscode down the memory hole and Chef Inc is not a company
84
- def marketing_sanitizer(name)
85
- name.gsub('Opscode', 'Chef Software').gsub(/Chef(?:,)? Inc.*/, 'Chef Software, Inc.')
86
- end
87
-
88
- def invalid_copyright_comment?(comment)
89
- match = /# (?:Copyright\W*)(.*)/.match(comment.text)
90
- return false unless match # it's not even a copyright
91
-
92
- current_text = match.captures.first
93
- desired_text = "#{copyright_date_range(comment)}, #{copyright_holder(comment)}"
94
-
95
- true unless current_text == desired_text
96
- end
97
- end
98
- end
99
- end
100
- end
101
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright (c) 2016-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
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
+ # Checks for incorrectly formatted copyright comments.
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # Copyright:: Copyright (c) 2016-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
28
+ # Copyright:: Copyright (c) 2016-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
29
+ # Copyright:: Copyright (c) 2016-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
30
+ # Copyright:: Copyright (c) 2016-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
31
+ # Copyright (c) 2016-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
32
+ # Copyright:: Tim Smith
33
+ # Copyright:: Copyright (c) 2016-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
34
+ #
35
+ # # good
36
+ # Copyright:: Copyright (c) 2016-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
37
+ # Copyright:: 2013-2022 Tim Smith
38
+ # Copyright:: 2019 37Signals, Inc.
39
+ #
40
+ class CopyrightCommentFormat < Base
41
+ extend AutoCorrector
42
+ require 'date'
43
+
44
+ MSG = 'Properly format copyrights header comments'
45
+
46
+ def on_new_investigation
47
+ return unless processed_source.ast
48
+
49
+ processed_source.comments.each do |comment|
50
+ next unless comment.inline? && invalid_copyright_comment?(comment) # headers aren't in blocks
51
+
52
+ add_offense(comment, severity: :refactor) do |corrector|
53
+ correct_comment = "# Copyright:: #{copyright_date_range(comment)}, #{copyright_holder(comment)}"
54
+ corrector.replace(comment, correct_comment)
55
+ end
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ def copyright_date_range(comment)
62
+ dates = comment.text.scan(/([0-9]{4})/)
63
+
64
+ # no copyright year present so return this year
65
+ return Time.new.year if dates.empty?
66
+
67
+ oldest_date = dates.min.first.to_i
68
+
69
+ # Avoid returning THIS_YEAR - THIS_YEAR
70
+ if oldest_date == Time.new.year
71
+ oldest_date
72
+ else
73
+ "#{oldest_date}-#{Time.new.year}"
74
+ end
75
+ end
76
+
77
+ def copyright_holder(comment)
78
+ # Grab just the company / individual name w/o :: or dates
79
+ match = /(?:.*[0-9]{4}|Copyright\W*)(?:,)?(?:\s)?(.*)/.match(comment.text)
80
+ marketing_sanitizer(match.captures.first)
81
+ end
82
+
83
+ # Flush Opscode down the memory hole and Chef Inc is not a company
84
+ def marketing_sanitizer(name)
85
+ name.gsub('Opscode', 'Chef Software').gsub(/Chef(?:,)? Inc.*/, 'Chef Software, Inc.')
86
+ end
87
+
88
+ def invalid_copyright_comment?(comment)
89
+ match = /# (?:Copyright\W*)(.*)/.match(comment.text)
90
+ return false unless match # it's not even a copyright
91
+
92
+ current_text = match.captures.first
93
+ desired_text = "#{copyright_date_range(comment)}, #{copyright_holder(comment)}"
94
+
95
+ true unless current_text == desired_text
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end