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.
- checksums.yaml +4 -4
- data/Gemfile +25 -29
- data/LICENSE +201 -201
- data/bin/cookstyle +31 -31
- data/bin/cookstyle-profile +31 -31
- data/config/chefstyle.yml +892 -741
- data/config/cookstyle.yml +3273 -3131
- data/config/default.yml +2 -2
- data/cookstyle.gemspec +34 -30
- data/lib/cookstyle/chefstyle.rb +5 -5
- data/lib/cookstyle/version.rb +5 -5
- data/lib/cookstyle.rb +48 -45
- data/lib/rubocop/chef/autocorrect_helpers.rb +33 -33
- data/lib/rubocop/chef/cookbook_helpers.rb +127 -127
- data/lib/rubocop/chef/cookbook_only.rb +76 -76
- data/lib/rubocop/chef/platform_helpers.rb +72 -72
- data/lib/rubocop/chef.rb +11 -11
- data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +61 -61
- data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +56 -56
- data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +69 -69
- data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +55 -55
- data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +77 -77
- data/lib/rubocop/cop/chef/correctness/invalid_cookbook_name.rb +47 -47
- data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +48 -48
- data/lib/rubocop/cop/chef/correctness/invalid_notification_resource.rb +59 -59
- data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +55 -55
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +72 -72
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +70 -70
- data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +57 -57
- data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +89 -89
- data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +70 -70
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +70 -70
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +69 -69
- data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +48 -48
- data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +53 -53
- data/lib/rubocop/cop/chef/correctness/lazy_in_resource_guard.rb +67 -67
- data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +67 -67
- data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +67 -67
- data/lib/rubocop/cop/chef/correctness/metadata_malformed_version.rb +58 -58
- data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +54 -54
- data/lib/rubocop/cop/chef/correctness/metadata_missing_version.rb +51 -51
- data/lib/rubocop/cop/chef/correctness/node_normal.rb +53 -53
- data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +53 -53
- data/lib/rubocop/cop/chef/correctness/node_save.rb +46 -46
- data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +64 -64
- data/lib/rubocop/cop/chef/correctness/octal_mode_as_string.rb +48 -48
- data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +46 -46
- data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +54 -54
- data/lib/rubocop/cop/chef/correctness/powershell_file_exists.rb +50 -50
- data/lib/rubocop/cop/chef/correctness/property_without_type.rb +59 -59
- data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +51 -51
- data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +50 -50
- data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +56 -56
- data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +52 -52
- data/lib/rubocop/cop/chef/correctness/service_resource.rb +56 -56
- data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +52 -52
- data/lib/rubocop/cop/chef/correctness/tmp_path.rb +59 -59
- data/lib/rubocop/cop/chef/deprecation/cb_depends_on_self.rb +57 -57
- data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +52 -52
- data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +55 -55
- data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +57 -57
- data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +98 -98
- data/lib/rubocop/cop/chef/deprecation/chef_shellout.rb +83 -83
- data/lib/rubocop/cop/chef/deprecation/chef_sugar_helpers.rb +55 -55
- data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +55 -55
- data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +56 -56
- data/lib/rubocop/cop/chef/deprecation/cheffile.rb +39 -39
- data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +49 -49
- data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +61 -61
- data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +56 -56
- data/lib/rubocop/cop/chef/deprecation/delivery.rb +48 -48
- data/lib/rubocop/cop/chef/deprecation/depends_chef_nginx_cookbook.rb +54 -54
- data/lib/rubocop/cop/chef/deprecation/depends_chef_reporting_cookbook.rb +51 -51
- data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +54 -54
- data/lib/rubocop/cop/chef/deprecation/depends_omnibus_updater_cookbook.rb +54 -54
- data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +50 -50
- data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +48 -48
- data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +129 -129
- data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +78 -78
- data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +61 -61
- data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +64 -64
- data/lib/rubocop/cop/chef/deprecation/deprecated_sudo_actions.rb +65 -65
- data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +42 -42
- data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_actions.rb +67 -67
- data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +69 -69
- data/lib/rubocop/cop/chef/deprecation/easy_install.rb +42 -42
- data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +49 -49
- data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +51 -51
- data/lib/rubocop/cop/chef/deprecation/erl_call.rb +42 -42
- data/lib/rubocop/cop/chef/deprecation/execute_path_property.rb +50 -50
- data/lib/rubocop/cop/chef/deprecation/execute_relative_creates_without_cwd.rb +66 -66
- data/lib/rubocop/cop/chef/deprecation/foodcritic_file.rb +41 -41
- data/lib/rubocop/cop/chef/deprecation/foodcritic_testing.rb +43 -43
- data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +140 -140
- data/lib/rubocop/cop/chef/deprecation/hwrp_without_unified_mode_true.rb +86 -86
- data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +59 -59
- data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +56 -56
- data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +91 -91
- data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +53 -53
- data/lib/rubocop/cop/chef/deprecation/librarian_chefspec.rb +42 -42
- data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +46 -46
- data/lib/rubocop/cop/chef/deprecation/log_resource_notifications.rb +63 -63
- data/lib/rubocop/cop/chef/deprecation/macos_userdefaults_global_property.rb +60 -60
- data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +60 -60
- data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +65 -65
- data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +80 -80
- data/lib/rubocop/cop/chef/deprecation/node_set.rb +54 -54
- data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +54 -54
- data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +70 -70
- data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +67 -67
- data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +61 -61
- data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +63 -63
- data/lib/rubocop/cop/chef/deprecation/policyfile_community_source.rb +53 -53
- data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +59 -59
- data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +53 -53
- data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +48 -48
- data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +46 -46
- data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +84 -84
- data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +40 -40
- data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +50 -50
- data/lib/rubocop/cop/chef/deprecation/resource_without_unified_mode_true.rb +87 -87
- data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +56 -56
- data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +62 -62
- data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +63 -63
- data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +136 -136
- data/lib/rubocop/cop/chef/deprecation/use_automatic_resource_name.rb +52 -52
- data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +57 -57
- data/lib/rubocop/cop/chef/deprecation/use_yaml_dump.rb +47 -47
- data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +71 -71
- data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +57 -57
- data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +58 -58
- data/lib/rubocop/cop/chef/deprecation/windows_package_installer_type_string.rb +60 -60
- data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +83 -83
- data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +71 -71
- data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +51 -51
- data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +53 -53
- data/lib/rubocop/cop/chef/effortless/berksfile.rb +39 -39
- data/lib/rubocop/cop/chef/effortless/chef_vault_used.rb +87 -87
- data/lib/rubocop/cop/chef/effortless/data_bags.rb +40 -40
- data/lib/rubocop/cop/chef/effortless/depends_chef_vault.rb +47 -47
- data/lib/rubocop/cop/chef/effortless/node_environment.rb +45 -45
- data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +44 -44
- data/lib/rubocop/cop/chef/effortless/node_roles.rb +45 -45
- data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +43 -43
- data/lib/rubocop/cop/chef/effortless/search_used.rb +40 -40
- data/lib/rubocop/cop/chef/modernize/action_method_in_resource.rb +57 -57
- data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +77 -77
- data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +70 -70
- data/lib/rubocop/cop/chef/modernize/build_essential.rb +55 -55
- data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +60 -60
- data/lib/rubocop/cop/chef/modernize/chef_15_resources.rb +57 -57
- data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +63 -63
- data/lib/rubocop/cop/chef/modernize/class_eval_action_class.rb +63 -63
- data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +53 -53
- data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +55 -55
- data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +121 -121
- data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +50 -50
- data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +59 -59
- data/lib/rubocop/cop/chef/modernize/declare_action_class.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +74 -74
- data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/definitions.rb +36 -36
- data/lib/rubocop/cop/chef/modernize/depends_chef_vault_cookbook.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/depends_chocolatey_cookbooks.rb +55 -55
- data/lib/rubocop/cop/chef/modernize/depends_kernel_module_cookbook.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/depends_locale_cookbook.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/depends_openssl_cookbook.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/depends_timezone_lwrp_cookbook.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/depends_windows_firewall_cookbook.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +55 -55
- data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +52 -52
- data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +81 -81
- data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +67 -67
- data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +76 -76
- data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +70 -70
- data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +83 -83
- data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +46 -46
- data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +48 -48
- data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +83 -83
- data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +70 -70
- data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +58 -58
- data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +51 -51
- data/lib/rubocop/cop/chef/modernize/node_init_package.rb +89 -89
- data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +57 -57
- data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +47 -47
- data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +54 -54
- data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +60 -60
- data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +51 -51
- data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +50 -50
- data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +68 -68
- data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +53 -53
- data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +56 -56
- data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +56 -56
- data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +68 -68
- data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +63 -63
- data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +49 -49
- data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +66 -66
- data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +94 -94
- data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +77 -77
- data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +63 -63
- data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +52 -52
- data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +53 -53
- data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +46 -46
- data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +60 -60
- data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +58 -58
- data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +63 -63
- data/lib/rubocop/cop/chef/modernize/sysctl_param_resource.rb +55 -55
- data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +51 -51
- data/lib/rubocop/cop/chef/modernize/use_chef_language_cloud_helpers.rb +93 -93
- data/lib/rubocop/cop/chef/modernize/use_chef_language_env_helpers.rb +69 -69
- data/lib/rubocop/cop/chef/modernize/use_chef_language_systemd_helper.rb +60 -60
- data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +113 -113
- data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +60 -60
- data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +58 -58
- data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +52 -52
- data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +92 -92
- data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +46 -46
- data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +59 -59
- data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +60 -60
- data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +65 -65
- data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +60 -60
- data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +52 -52
- data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +46 -46
- data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +60 -60
- data/lib/rubocop/cop/chef/redundant/double_compile_time.rb +68 -68
- data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +46 -46
- data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +46 -46
- data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +58 -58
- data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +81 -81
- data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +65 -65
- data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +59 -59
- data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +61 -61
- data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +46 -46
- data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +47 -47
- data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +46 -46
- data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +52 -52
- data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +50 -50
- data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +64 -64
- data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +46 -46
- data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +60 -60
- data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +67 -67
- data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +116 -116
- data/lib/rubocop/cop/chef/security/ssh_private_key.rb +49 -49
- data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +50 -50
- data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +47 -47
- data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +55 -55
- data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +52 -52
- data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +60 -60
- data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +62 -62
- data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +542 -542
- data/lib/rubocop/cop/chef/style/attribute_keys.rb +94 -95
- data/lib/rubocop/cop/chef/style/chef_whaaat.rb +49 -49
- data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +42 -42
- data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +101 -101
- data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +50 -50
- data/lib/rubocop/cop/chef/style/comments_format.rb +71 -71
- data/lib/rubocop/cop/chef/style/file_mode.rb +86 -86
- data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +59 -59
- data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +58 -58
- data/lib/rubocop/cop/chef/style/negating_only_if.rb +69 -69
- data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +70 -70
- data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +89 -89
- data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +53 -53
- data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +103 -103
- data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +100 -100
- data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +86 -86
- data/lib/rubocop/cop/chefstyle/ruby/gemspec_license.rb +55 -55
- data/lib/rubocop/cop/chefstyle/ruby/gemspec_require_rubygems.rb +46 -46
- data/lib/rubocop/cop/chefstyle/ruby/legacy_powershell_out_methods.rb +36 -36
- data/lib/rubocop/cop/chefstyle/ruby/require_net_https.rb +54 -54
- data/lib/rubocop/cop/chefstyle/ruby/unless_defined_require.rb +122 -122
- data/lib/rubocop/cop/inspec/deprecation/attribute_default.rb +53 -53
- data/lib/rubocop/cop/inspec/deprecation/attribute_helper.rb +47 -47
- data/lib/rubocop/cop/target_chef_version.rb +22 -22
- data/lib/rubocop/monkey_patches/allow_invalid_ruby.rb +28 -28
- data/lib/rubocop/monkey_patches/base.rb +11 -11
- data/lib/rubocop/monkey_patches/config.rb +15 -15
- data/lib/rubocop/monkey_patches/directive_comment.rb +12 -12
- data/lib/rubocop/monkey_patches/registry_cop.rb +15 -15
- data/lib/rubocop/monkey_patches/team.rb +25 -24
- metadata +33 -9
@@ -1,103 +1,103 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Copyright:: 2020, Chef Software, Inc.
|
4
|
-
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
module RuboCop
|
19
|
-
module Cop
|
20
|
-
module Chef
|
21
|
-
module Style
|
22
|
-
# Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match one-to-one with OS values. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic. All values of `os` from Ohai match one-to-one with `platform_family` values except for `linux`, which has no single equivalent `platform_family`.
|
23
|
-
#
|
24
|
-
# @example
|
25
|
-
#
|
26
|
-
# ### incorrect
|
27
|
-
# node['os'] == 'darwin'
|
28
|
-
# node['os'] == 'windows'
|
29
|
-
# node['os'].eql?('aix')
|
30
|
-
# %w(netbsd openbsd freebsd).include?(node['os'])
|
31
|
-
#
|
32
|
-
# ### correct
|
33
|
-
# platform_family?('mac_os_x')
|
34
|
-
# platform_family?('windows')
|
35
|
-
# platform_family?('aix')
|
36
|
-
# platform_family?('netbsd', 'openbsd', 'freebsd)
|
37
|
-
#
|
38
|
-
class UnnecessaryOSCheck < Base
|
39
|
-
extend AutoCorrector
|
40
|
-
|
41
|
-
MSG = "Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match 1:1 with OS values."
|
42
|
-
RESTRICT_ON_SEND = [:==, :!=, :eql?, :include?].freeze
|
43
|
-
|
44
|
-
# sorted list of all the os values that match 1:1 with a platform_family
|
45
|
-
UNNECESSARY_OS_VALUES = %w(aix darwin dragonflybsd freebsd netbsd openbsd solaris2 windows).freeze
|
46
|
-
|
47
|
-
def_node_matcher :os_equals?, <<-PATTERN
|
48
|
-
(send (send (send nil? :node) :[] (str "os") ) ${:== :!=} $str )
|
49
|
-
PATTERN
|
50
|
-
|
51
|
-
def_node_matcher :os_eql?, <<-PATTERN
|
52
|
-
(send (send (send nil? :node) :[] (str "os") ) :eql? $str )
|
53
|
-
PATTERN
|
54
|
-
|
55
|
-
def_node_matcher :os_include?, <<-PATTERN
|
56
|
-
(send $(array ...) :include? (send (send nil? :node) :[] (str "os")))
|
57
|
-
PATTERN
|
58
|
-
|
59
|
-
def on_send(node)
|
60
|
-
os_equals?(node) do |operator, val|
|
61
|
-
return unless UNNECESSARY_OS_VALUES.include?(val.value)
|
62
|
-
add_offense(node, severity: :refactor) do |corrector|
|
63
|
-
corrected_string = (operator == :!= ? '!' : '') + "platform_family?('#{sanitized_platform(val.value)}')"
|
64
|
-
corrector.replace(node, corrected_string)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
os_eql?(node) do |val|
|
69
|
-
return unless UNNECESSARY_OS_VALUES.include?(val.value)
|
70
|
-
add_offense(node, severity: :refactor) do |corrector|
|
71
|
-
corrected_string = "platform_family?('#{sanitized_platform(val.value)}')"
|
72
|
-
corrector.replace(node, corrected_string)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
os_include?(node) do |val|
|
77
|
-
array_of_plats = array_from_ast(val)
|
78
|
-
# see if all the values in the .include? usage are in our list of 1:1 platform family to os values
|
79
|
-
return unless (UNNECESSARY_OS_VALUES & array_of_plats) == array_of_plats
|
80
|
-
add_offense(node, severity: :refactor) do |corrector|
|
81
|
-
platforms = val.values.map { |x| x.str_type? ? "'#{sanitized_platform(x.value)}'" : x.source }
|
82
|
-
corrected_string = "platform_family?(#{platforms.join(', ')})"
|
83
|
-
corrector.replace(node, corrected_string)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# return the passed value unless the value is darwin and then return mac_os_x
|
89
|
-
def sanitized_platform(plat)
|
90
|
-
plat == 'darwin' ? 'mac_os_x' : plat
|
91
|
-
end
|
92
|
-
|
93
|
-
# given an ast array spit out a ruby array
|
94
|
-
def array_from_ast(ast)
|
95
|
-
vals = []
|
96
|
-
ast.each_child_node { |x| vals << x.value }
|
97
|
-
vals.sort
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2020, Chef Software, Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
module Style
|
22
|
+
# Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match one-to-one with OS values. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic. All values of `os` from Ohai match one-to-one with `platform_family` values except for `linux`, which has no single equivalent `platform_family`.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# node['os'] == 'darwin'
|
28
|
+
# node['os'] == 'windows'
|
29
|
+
# node['os'].eql?('aix')
|
30
|
+
# %w(netbsd openbsd freebsd).include?(node['os'])
|
31
|
+
#
|
32
|
+
# ### correct
|
33
|
+
# platform_family?('mac_os_x')
|
34
|
+
# platform_family?('windows')
|
35
|
+
# platform_family?('aix')
|
36
|
+
# platform_family?('netbsd', 'openbsd', 'freebsd)
|
37
|
+
#
|
38
|
+
class UnnecessaryOSCheck < Base
|
39
|
+
extend AutoCorrector
|
40
|
+
|
41
|
+
MSG = "Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match 1:1 with OS values."
|
42
|
+
RESTRICT_ON_SEND = [:==, :!=, :eql?, :include?].freeze
|
43
|
+
|
44
|
+
# sorted list of all the os values that match 1:1 with a platform_family
|
45
|
+
UNNECESSARY_OS_VALUES = %w(aix darwin dragonflybsd freebsd netbsd openbsd solaris2 windows).freeze
|
46
|
+
|
47
|
+
def_node_matcher :os_equals?, <<-PATTERN
|
48
|
+
(send (send (send nil? :node) :[] (str "os") ) ${:== :!=} $str )
|
49
|
+
PATTERN
|
50
|
+
|
51
|
+
def_node_matcher :os_eql?, <<-PATTERN
|
52
|
+
(send (send (send nil? :node) :[] (str "os") ) :eql? $str )
|
53
|
+
PATTERN
|
54
|
+
|
55
|
+
def_node_matcher :os_include?, <<-PATTERN
|
56
|
+
(send $(array ...) :include? (send (send nil? :node) :[] (str "os")))
|
57
|
+
PATTERN
|
58
|
+
|
59
|
+
def on_send(node)
|
60
|
+
os_equals?(node) do |operator, val|
|
61
|
+
return unless UNNECESSARY_OS_VALUES.include?(val.value)
|
62
|
+
add_offense(node, severity: :refactor) do |corrector|
|
63
|
+
corrected_string = (operator == :!= ? '!' : '') + "platform_family?('#{sanitized_platform(val.value)}')"
|
64
|
+
corrector.replace(node, corrected_string)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
os_eql?(node) do |val|
|
69
|
+
return unless UNNECESSARY_OS_VALUES.include?(val.value)
|
70
|
+
add_offense(node, severity: :refactor) do |corrector|
|
71
|
+
corrected_string = "platform_family?('#{sanitized_platform(val.value)}')"
|
72
|
+
corrector.replace(node, corrected_string)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
os_include?(node) do |val|
|
77
|
+
array_of_plats = array_from_ast(val)
|
78
|
+
# see if all the values in the .include? usage are in our list of 1:1 platform family to os values
|
79
|
+
return unless (UNNECESSARY_OS_VALUES & array_of_plats) == array_of_plats
|
80
|
+
add_offense(node, severity: :refactor) do |corrector|
|
81
|
+
platforms = val.values.map { |x| x.str_type? ? "'#{sanitized_platform(x.value)}'" : x.source }
|
82
|
+
corrected_string = "platform_family?(#{platforms.join(', ')})"
|
83
|
+
corrector.replace(node, corrected_string)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# return the passed value unless the value is darwin and then return mac_os_x
|
89
|
+
def sanitized_platform(plat)
|
90
|
+
plat == 'darwin' ? 'mac_os_x' : plat
|
91
|
+
end
|
92
|
+
|
93
|
+
# given an ast array spit out a ruby array
|
94
|
+
def array_from_ast(ast)
|
95
|
+
vals = []
|
96
|
+
ast.each_child_node { |x| vals << x.value }
|
97
|
+
vals.sort
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -1,100 +1,100 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Copyright:: 2019, Chef Software, Inc.
|
4
|
-
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
module RuboCop
|
19
|
-
module Cop
|
20
|
-
module Chef
|
21
|
-
module Style
|
22
|
-
# Use the platform?() and platform_family?() helpers instead of a case statement that only includes a single when statement.
|
23
|
-
#
|
24
|
-
# @example
|
25
|
-
#
|
26
|
-
# ### incorrect
|
27
|
-
# case node['platform']
|
28
|
-
# when 'ubuntu'
|
29
|
-
# log "We're on Ubuntu"
|
30
|
-
# apt_update
|
31
|
-
# end
|
32
|
-
#
|
33
|
-
# case node['platform_family']
|
34
|
-
# when 'rhel'
|
35
|
-
# include_recipe 'yum'
|
36
|
-
# end
|
37
|
-
#
|
38
|
-
# ### correct
|
39
|
-
# if platform?('ubuntu')
|
40
|
-
# log "We're on Ubuntu"
|
41
|
-
# apt_update
|
42
|
-
# end
|
43
|
-
#
|
44
|
-
# include_recipe 'yum' if platform_family?('rhel')
|
45
|
-
#
|
46
|
-
class UnnecessaryPlatformCaseStatement < Base
|
47
|
-
extend AutoCorrector
|
48
|
-
include RangeHelp
|
49
|
-
|
50
|
-
MSG = 'Use the platform?() and platform_family?() helpers instead of a case statement that only includes a single when statement.'
|
51
|
-
|
52
|
-
def_node_matcher :platform_case?, <<-PATTERN
|
53
|
-
( case $( send (send nil? :node) :[] $(str {"platform" "platform_family"})) ... )
|
54
|
-
PATTERN
|
55
|
-
|
56
|
-
def on_case(node)
|
57
|
-
platform_case?(node) do |node_, type|
|
58
|
-
return unless node&.when_branches&.count == 1
|
59
|
-
add_offense(node, severity: :refactor) do |corrector|
|
60
|
-
# we have at least one supermarket cookbook with an entirely empty platform case statement
|
61
|
-
# we can't actually fix that so let's do nothing here.
|
62
|
-
unless empty_case_statement?(node)
|
63
|
-
condition_string = node.when_branches.first.conditions.map(&:source).join(', ')
|
64
|
-
|
65
|
-
# single line bodies without an else statement should be transformed into `X if platform?('ubuntu')` style statements
|
66
|
-
# while multi-line statements should just have the case and when bits replace with `if platform?('ubuntu')`
|
67
|
-
if !node.else? && !node.when_branches.first.body.multiline?
|
68
|
-
new_source = "#{node.when_branches.first.body.source} if #{type.value}?(#{condition_string})"
|
69
|
-
corrector.replace(node, new_source)
|
70
|
-
else
|
71
|
-
# find the range from the beginning of the case to the end of the node['platform'] or node['platform_family']
|
72
|
-
case_range = node.loc.keyword.join(node_.loc.expression.end)
|
73
|
-
|
74
|
-
# replace the complete conditional range with a new if statement
|
75
|
-
corrector.replace(case_range, "if #{type.value}?(#{condition_string})")
|
76
|
-
|
77
|
-
# find the range from the start of the when to the end of the last argument
|
78
|
-
conditional_range = node.when_branches.first.conditions
|
79
|
-
|
80
|
-
# remove the when XYZ condition along with any leading spaces so that we remove the whole empty line
|
81
|
-
corrector.remove(range_with_surrounding_space(range: conditional_range, side: :left))
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
private
|
89
|
-
|
90
|
-
# determine if each branch of the case statement contains no code
|
91
|
-
#
|
92
|
-
# @private
|
93
|
-
def empty_case_statement?(node)
|
94
|
-
node.else_branch.nil? && node.when_branches.all? { |x| x.body.nil? }
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2019, Chef Software, Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
module Style
|
22
|
+
# Use the platform?() and platform_family?() helpers instead of a case statement that only includes a single when statement.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# case node['platform']
|
28
|
+
# when 'ubuntu'
|
29
|
+
# log "We're on Ubuntu"
|
30
|
+
# apt_update
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# case node['platform_family']
|
34
|
+
# when 'rhel'
|
35
|
+
# include_recipe 'yum'
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# ### correct
|
39
|
+
# if platform?('ubuntu')
|
40
|
+
# log "We're on Ubuntu"
|
41
|
+
# apt_update
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# include_recipe 'yum' if platform_family?('rhel')
|
45
|
+
#
|
46
|
+
class UnnecessaryPlatformCaseStatement < Base
|
47
|
+
extend AutoCorrector
|
48
|
+
include RangeHelp
|
49
|
+
|
50
|
+
MSG = 'Use the platform?() and platform_family?() helpers instead of a case statement that only includes a single when statement.'
|
51
|
+
|
52
|
+
def_node_matcher :platform_case?, <<-PATTERN
|
53
|
+
( case $( send (send nil? :node) :[] $(str {"platform" "platform_family"})) ... )
|
54
|
+
PATTERN
|
55
|
+
|
56
|
+
def on_case(node)
|
57
|
+
platform_case?(node) do |node_, type|
|
58
|
+
return unless node&.when_branches&.count == 1
|
59
|
+
add_offense(node, severity: :refactor) do |corrector|
|
60
|
+
# we have at least one supermarket cookbook with an entirely empty platform case statement
|
61
|
+
# we can't actually fix that so let's do nothing here.
|
62
|
+
unless empty_case_statement?(node)
|
63
|
+
condition_string = node.when_branches.first.conditions.map(&:source).join(', ')
|
64
|
+
|
65
|
+
# single line bodies without an else statement should be transformed into `X if platform?('ubuntu')` style statements
|
66
|
+
# while multi-line statements should just have the case and when bits replace with `if platform?('ubuntu')`
|
67
|
+
if !node.else? && !node.when_branches.first.body.multiline?
|
68
|
+
new_source = "#{node.when_branches.first.body.source} if #{type.value}?(#{condition_string})"
|
69
|
+
corrector.replace(node, new_source)
|
70
|
+
else
|
71
|
+
# find the range from the beginning of the case to the end of the node['platform'] or node['platform_family']
|
72
|
+
case_range = node.loc.keyword.join(node_.loc.expression.end)
|
73
|
+
|
74
|
+
# replace the complete conditional range with a new if statement
|
75
|
+
corrector.replace(case_range, "if #{type.value}?(#{condition_string})")
|
76
|
+
|
77
|
+
# find the range from the start of the when to the end of the last argument
|
78
|
+
conditional_range = node.when_branches.first.conditions.last.source_range.join(node.when_branches.first.loc.keyword.begin)
|
79
|
+
|
80
|
+
# remove the when XYZ condition along with any leading spaces so that we remove the whole empty line
|
81
|
+
corrector.remove(range_with_surrounding_space(range: conditional_range, side: :left))
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
# determine if each branch of the case statement contains no code
|
91
|
+
#
|
92
|
+
# @private
|
93
|
+
def empty_case_statement?(node)
|
94
|
+
node.else_branch.nil? && node.when_branches.all? { |x| x.body.nil? }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -1,86 +1,86 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Copyright:: 2019, Chef Software, Inc.
|
4
|
-
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
module RuboCop
|
19
|
-
module Cop
|
20
|
-
module Chef
|
21
|
-
module Style
|
22
|
-
# Use the platform?() and platform_family?() helpers instead of node['platform] == 'foo' and node['platform_family'] == 'bar'. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic.
|
23
|
-
#
|
24
|
-
# @example
|
25
|
-
#
|
26
|
-
# ### incorrect
|
27
|
-
# node['platform'] == 'ubuntu'
|
28
|
-
# node['platform_family'] == 'debian'
|
29
|
-
# node['platform'] != 'ubuntu'
|
30
|
-
# node['platform_family'] != 'debian'
|
31
|
-
# %w(rhel suse).include?(node['platform_family'])
|
32
|
-
# node['platform'].eql?('ubuntu')
|
33
|
-
#
|
34
|
-
# ### correct
|
35
|
-
# platform?('ubuntu')
|
36
|
-
# !platform?('ubuntu')
|
37
|
-
# platform_family?('debian')
|
38
|
-
# !platform_family?('debian')
|
39
|
-
# platform_family?('rhel', 'suse')
|
40
|
-
#
|
41
|
-
class UsePlatformHelpers < Base
|
42
|
-
extend AutoCorrector
|
43
|
-
|
44
|
-
MSG = "Use platform? and platform_family? helpers to check a node's platform"
|
45
|
-
RESTRICT_ON_SEND = [:==, :!=, :eql?, :include?].freeze
|
46
|
-
|
47
|
-
def_node_matcher :platform_equals?, <<-PATTERN
|
48
|
-
(send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) ${:== :!=} $str )
|
49
|
-
PATTERN
|
50
|
-
|
51
|
-
def_node_matcher :platform_include?, <<-PATTERN
|
52
|
-
(send $(array ...) :include? (send (send nil? :node) :[] $(str {"platform" "platform_family"})))
|
53
|
-
PATTERN
|
54
|
-
|
55
|
-
def_node_matcher :platform_eql?, <<-PATTERN
|
56
|
-
(send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) :eql? $str )
|
57
|
-
PATTERN
|
58
|
-
|
59
|
-
def on_send(node)
|
60
|
-
platform_equals?(node) do |type, operator, plat|
|
61
|
-
add_offense(node, severity: :refactor) do |corrector|
|
62
|
-
corrected_string = (operator == :!= ? '!' : '') + "#{type.value}?('#{plat.value}')"
|
63
|
-
corrector.replace(node, corrected_string)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
platform_include?(node) do |plats, type|
|
68
|
-
add_offense(node, severity: :refactor) do |corrector|
|
69
|
-
platforms = plats.values.map { |x| x.str_type? ? "'#{x.value}'" : x.source }
|
70
|
-
corrected_string = "#{type.value}?(#{platforms.join(', ')})"
|
71
|
-
corrector.replace(node, corrected_string)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
platform_eql?(node) do |type, plat|
|
76
|
-
add_offense(node, severity: :refactor) do |corrector|
|
77
|
-
corrected_string = "#{type.value}?('#{plat.value}')"
|
78
|
-
corrector.replace(node, corrected_string)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2019, Chef Software, Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
module Style
|
22
|
+
# Use the platform?() and platform_family?() helpers instead of node['platform] == 'foo' and node['platform_family'] == 'bar'. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# node['platform'] == 'ubuntu'
|
28
|
+
# node['platform_family'] == 'debian'
|
29
|
+
# node['platform'] != 'ubuntu'
|
30
|
+
# node['platform_family'] != 'debian'
|
31
|
+
# %w(rhel suse).include?(node['platform_family'])
|
32
|
+
# node['platform'].eql?('ubuntu')
|
33
|
+
#
|
34
|
+
# ### correct
|
35
|
+
# platform?('ubuntu')
|
36
|
+
# !platform?('ubuntu')
|
37
|
+
# platform_family?('debian')
|
38
|
+
# !platform_family?('debian')
|
39
|
+
# platform_family?('rhel', 'suse')
|
40
|
+
#
|
41
|
+
class UsePlatformHelpers < Base
|
42
|
+
extend AutoCorrector
|
43
|
+
|
44
|
+
MSG = "Use platform? and platform_family? helpers to check a node's platform"
|
45
|
+
RESTRICT_ON_SEND = [:==, :!=, :eql?, :include?].freeze
|
46
|
+
|
47
|
+
def_node_matcher :platform_equals?, <<-PATTERN
|
48
|
+
(send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) ${:== :!=} $str )
|
49
|
+
PATTERN
|
50
|
+
|
51
|
+
def_node_matcher :platform_include?, <<-PATTERN
|
52
|
+
(send $(array ...) :include? (send (send nil? :node) :[] $(str {"platform" "platform_family"})))
|
53
|
+
PATTERN
|
54
|
+
|
55
|
+
def_node_matcher :platform_eql?, <<-PATTERN
|
56
|
+
(send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) :eql? $str )
|
57
|
+
PATTERN
|
58
|
+
|
59
|
+
def on_send(node)
|
60
|
+
platform_equals?(node) do |type, operator, plat|
|
61
|
+
add_offense(node, severity: :refactor) do |corrector|
|
62
|
+
corrected_string = (operator == :!= ? '!' : '') + "#{type.value}?('#{plat.value}')"
|
63
|
+
corrector.replace(node, corrected_string)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
platform_include?(node) do |plats, type|
|
68
|
+
add_offense(node, severity: :refactor) do |corrector|
|
69
|
+
platforms = plats.values.map { |x| x.str_type? ? "'#{x.value}'" : x.source }
|
70
|
+
corrected_string = "#{type.value}?(#{platforms.join(', ')})"
|
71
|
+
corrector.replace(node, corrected_string)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
platform_eql?(node) do |type, plat|
|
76
|
+
add_offense(node, severity: :refactor) do |corrector|
|
77
|
+
corrected_string = "#{type.value}?('#{plat.value}')"
|
78
|
+
corrector.replace(node, corrected_string)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|