cookstyle 6.9.0 → 6.14.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +6 -0
- data/bin/cookstyle +1 -0
- data/bin/cookstyle-profile +31 -0
- data/config/cookstyle.yml +146 -28
- data/config/disable_all.yml +18 -0
- data/config/upstream.yml +103 -10
- data/cookstyle.gemspec +1 -0
- data/lib/cookstyle.rb +6 -4
- data/lib/cookstyle/version.rb +3 -2
- data/lib/rubocop/chef.rb +1 -0
- data/lib/rubocop/chef/autocorrect_helpers.rb +1 -0
- data/lib/rubocop/chef/cookbook_helpers.rb +1 -0
- data/lib/rubocop/chef/platform_helpers.rb +1 -0
- data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/cb_depends_on_self.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +12 -1
- data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +48 -0
- data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +28 -4
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +68 -0
- data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +1 -0
- data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/node_normal.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/node_save.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +6 -5
- data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/service_resource.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +52 -0
- data/lib/rubocop/cop/chef/correctness/tmp_path.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/ use_automatic_resource_name.rb +52 -0
- data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +55 -0
- data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +60 -0
- data/lib/rubocop/cop/chef/deprecation/cheffile.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/easy_install.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/erl_call.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/log_resource_notifications.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/macos_userdefaults_global_property.rb +61 -0
- data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +8 -21
- data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/node_set.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +4 -3
- data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/berksfile.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/data_bags.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/node_environment.rb +3 -2
- data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/node_roles.rb +5 -4
- data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/search_used.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/action_method_in_resource.rb +57 -0
- data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +4 -3
- data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/build_essential.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +57 -0
- data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +88 -0
- data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +5 -4
- data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/definitions.rb +3 -2
- data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +3 -2
- data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/node_init_package.rb +18 -9
- data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +5 -4
- data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +4 -3
- data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/systctl_param_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +4 -3
- data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/double_compile_time.rb +65 -0
- data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +61 -0
- data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +69 -0
- data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +3 -2
- data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +3 -2
- data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +60 -0
- data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +2 -1
- data/lib/rubocop/cop/chef/style/attribute_keys.rb +2 -1
- data/lib/rubocop/cop/chef/style/chef_whaaat.rb +2 -1
- data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +2 -1
- data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +2 -1
- data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +2 -1
- data/lib/rubocop/cop/chef/style/comments_format.rb +2 -1
- data/lib/rubocop/cop/chef/style/file_mode.rb +39 -19
- data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +2 -1
- data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +58 -0
- data/lib/rubocop/cop/chef/style/negating_only_if.rb +2 -1
- data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +2 -1
- data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +2 -1
- data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +3 -3
- data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +3 -2
- data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +3 -3
- data/lib/rubocop/monkey_patches/{cop.rb → base.rb} +2 -1
- data/lib/rubocop/monkey_patches/comment_config.rb +1 -0
- data/lib/rubocop/monkey_patches/registry_cop.rb +15 -0
- metadata +22 -5
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -32,7 +33,7 @@ module RuboCop
|
|
32
33
|
class DefinesChefSpecMatchers < Cop
|
33
34
|
include RangeHelp
|
34
35
|
|
35
|
-
MSG = 'ChefSpec matchers are now auto generated by ChefSpec 7.1+ and do not need to be defined in a cookbook'
|
36
|
+
MSG = 'ChefSpec matchers are now auto generated by ChefSpec 7.1+ and do not need to be defined in a cookbook'
|
36
37
|
|
37
38
|
def_node_matcher :chefspec_matcher?, <<-PATTERN
|
38
39
|
(if ( :defined? (const nil? :ChefSpec)) ... )
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -18,12 +19,12 @@ module RuboCop
|
|
18
19
|
module Cop
|
19
20
|
module Chef
|
20
21
|
module ChefModernize
|
21
|
-
# In 2016 with Chef Infra Client 12.5 Custom Resources were introduced as a way of writing reusable resource code that could be shipped in cookbooks. Custom Resources offer many advantages of legacy Definitions including unit testing with ChefSpec, input validation, actions,
|
22
|
+
# In 2016 with Chef Infra Client 12.5 Custom Resources were introduced as a way of writing reusable resource code that could be shipped in cookbooks. Custom Resources offer many advantages of legacy Definitions including unit testing with ChefSpec, input validation, actions, common properties like not_if/only_if, and resource reporting.
|
22
23
|
#
|
23
24
|
class Definitions < Cop
|
24
25
|
include RuboCop::Chef::CookbookHelpers
|
25
26
|
|
26
|
-
MSG = 'Legacy Chef Infra definitions should be rewritten as custom resources to take full advantage of the Chef Infra feature set.'
|
27
|
+
MSG = 'Legacy Chef Infra definitions should be rewritten as custom resources to take full advantage of the Chef Infra feature set.'
|
27
28
|
|
28
29
|
def on_block(node)
|
29
30
|
add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.respond_to?(:method_name) && node.method_name == :define
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019-2020, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -31,7 +32,7 @@ module RuboCop
|
|
31
32
|
|
32
33
|
minimum_target_chef_version '13.3'
|
33
34
|
|
34
|
-
MSG = "Don't depend on the zypper cookbook as the zypper_repository resource is built into Chef Infra Client 13.3+"
|
35
|
+
MSG = "Don't depend on the zypper cookbook as the zypper_repository resource is built into Chef Infra Client 13.3+"
|
35
36
|
|
36
37
|
def_node_matcher :zypper_depends?, <<-PATTERN
|
37
38
|
(send nil? :depends (str "zypper"))
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -27,7 +28,7 @@ module RuboCop
|
|
27
28
|
class DslIncludeInResource < Cop
|
28
29
|
include RangeHelp
|
29
30
|
|
30
|
-
MSG = 'Chef Infra Client 12.4+ includes the Chef::DSL::Recipe in the resource and provider classed by default so there is no need to include this DSL in your resources or providers.'
|
31
|
+
MSG = 'Chef Infra Client 12.4+ includes the Chef::DSL::Recipe in the resource and provider classed by default so there is no need to include this DSL in your resources or providers.'
|
31
32
|
|
32
33
|
def_node_matcher :dsl_include?, <<-PATTERN
|
33
34
|
(send nil? :include
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -30,7 +31,7 @@ module RuboCop
|
|
30
31
|
class EmptyResourceInitializeMethod < Cop
|
31
32
|
include RangeHelp
|
32
33
|
|
33
|
-
MSG = 'There is no need for an empty initialize method in a resource'
|
34
|
+
MSG = 'There is no need for an empty initialize method in a resource'
|
34
35
|
|
35
36
|
def_node_matcher :empty_initialize?, <<-PATTERN
|
36
37
|
(def :initialize (args (restarg :args)) (zsuper))
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019-2020, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -42,10 +43,10 @@ module RuboCop
|
|
42
43
|
# end
|
43
44
|
#
|
44
45
|
class ExecuteAptUpdate < Cop
|
45
|
-
MSG = 'Use the apt_update resource instead of the execute resource to run an apt-get update package cache update'
|
46
|
+
MSG = 'Use the apt_update resource instead of the execute resource to run an apt-get update package cache update'
|
46
47
|
|
47
48
|
def_node_matcher :execute_apt_update?, <<-PATTERN
|
48
|
-
(send nil? :execute (str "apt-get update"))
|
49
|
+
(send nil? :execute (str { "apt-get update" "apt-get update -y" "apt-get -y update" }))
|
49
50
|
PATTERN
|
50
51
|
|
51
52
|
def_node_matcher :notification_property?, <<-PATTERN
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -37,7 +38,7 @@ module RuboCop
|
|
37
38
|
|
38
39
|
minimum_target_chef_version '14.0'
|
39
40
|
|
40
|
-
MSG = 'Chef Infra Client 14.0 and later includes :create, :delete, and :configure actions with the full idempotency of the windows_service resource. See the windows_service documentation at https://docs.chef.io/resource_windows_service.html for additional details on creating services with the windows_service resource'
|
41
|
+
MSG = 'Chef Infra Client 14.0 and later includes :create, :delete, and :configure actions with the full idempotency of the windows_service resource. See the windows_service documentation at https://docs.chef.io/resource_windows_service.html for additional details on creating services with the windows_service resource'
|
41
42
|
|
42
43
|
# non block execute resources
|
43
44
|
def on_send(node)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -41,7 +42,7 @@ module RuboCop
|
|
41
42
|
|
42
43
|
minimum_target_chef_version '15.5'
|
43
44
|
|
44
|
-
MSG = 'Chef Infra Client 15.5 and later include a chef_sleep resource that should be used to sleep between executing resources if necessary instead of using the bash or execute resources to run the sleep command.'
|
45
|
+
MSG = 'Chef Infra Client 15.5 and later include a chef_sleep resource that should be used to sleep between executing resources if necessary instead of using the bash or execute resources to run the sleep command.'
|
45
46
|
|
46
47
|
# non block execute resources
|
47
48
|
def on_send(node)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2020, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -41,7 +42,7 @@ module RuboCop
|
|
41
42
|
|
42
43
|
minimum_target_chef_version '14.0'
|
43
44
|
|
44
|
-
MSG = 'Chef Infra Client 14.0 and later includes a sysctl resource that should be used to idempotently load sysctl values instead of templating files and using execute to load them.'
|
45
|
+
MSG = 'Chef Infra Client 14.0 and later includes a sysctl resource that should be used to idempotently load sysctl values instead of templating files and using execute to load them.'
|
45
46
|
|
46
47
|
# non block execute resources
|
47
48
|
def on_send(node)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -42,7 +43,7 @@ module RuboCop
|
|
42
43
|
|
43
44
|
minimum_target_chef_version '14.6'
|
44
45
|
|
45
|
-
MSG = 'Use the timezone resource included in Chef Infra Client 14.6+ instead of shelling out to tzutil'
|
46
|
+
MSG = 'Use the timezone resource included in Chef Infra Client 14.6+ instead of shelling out to tzutil'
|
46
47
|
|
47
48
|
def_node_matcher :execute_resource?, <<-PATTERN
|
48
49
|
(send nil? :execute $str)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2016-2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -27,7 +28,7 @@ module RuboCop
|
|
27
28
|
# # ~FC013
|
28
29
|
#
|
29
30
|
class FoodcriticComments < Cop
|
30
|
-
MSG = 'Remove legacy code comments that disable Foodcritic rules'
|
31
|
+
MSG = 'Remove legacy code comments that disable Foodcritic rules'
|
31
32
|
|
32
33
|
def investigate(processed_source)
|
33
34
|
return unless processed_source.ast
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -29,7 +30,7 @@ module RuboCop
|
|
29
30
|
# default_action :foo
|
30
31
|
#
|
31
32
|
class IfProvidesDefaultAction < Cop
|
32
|
-
MSG = 'if defined?(default_action) is no longer necessary in Chef Resources as default_action shipped in Chef 10.8.'
|
33
|
+
MSG = 'if defined?(default_action) is no longer necessary in Chef Resources as default_action shipped in Chef 10.8.'
|
33
34
|
|
34
35
|
def on_defined?(node)
|
35
36
|
return unless node.arguments.first == s(:send, nil, :default_action)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019-2020, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -32,7 +33,7 @@ module RuboCop
|
|
32
33
|
class IncludingMixinShelloutInResources < Cop
|
33
34
|
include RangeHelp
|
34
35
|
|
35
|
-
MSG = 'There is no need to include Chef::Mixin::ShellOut or Chef::Mixin::PowershellOut in resources or providers as this is already done by Chef Infra Client 12.4+.'
|
36
|
+
MSG = 'There is no need to include Chef::Mixin::ShellOut or Chef::Mixin::PowershellOut in resources or providers as this is already done by Chef Infra Client 12.4+.'
|
36
37
|
|
37
38
|
def_node_matcher :include_shellout?, <<-PATTERN
|
38
39
|
(send nil? :include (const (const (const nil? :Chef) :Mixin) {:ShellOut :PowershellOut}))
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019-2020, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -38,7 +39,7 @@ module RuboCop
|
|
38
39
|
|
39
40
|
minimum_target_chef_version '15.0'
|
40
41
|
|
41
|
-
MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of the libarchive file resource'
|
42
|
+
MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of the libarchive file resource'
|
42
43
|
|
43
44
|
def_node_matcher :notification_property?, <<-PATTERN
|
44
45
|
(send nil? {:notifies :subscribes} (sym _) $(...) (sym _))
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -40,7 +41,7 @@ module RuboCop
|
|
40
41
|
|
41
42
|
minimum_target_chef_version '14.0'
|
42
43
|
|
43
|
-
MSG = 'The mac_os_x_userdefaults resource was renamed to macos_userdefaults when it was added to Chef Infra Client 14.0. The new resource name should be used.'
|
44
|
+
MSG = 'The mac_os_x_userdefaults resource was renamed to macos_userdefaults when it was added to Chef Infra Client 14.0. The new resource name should be used.'
|
44
45
|
|
45
46
|
def on_send(node)
|
46
47
|
add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :mac_os_x_userdefaults
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -28,7 +29,7 @@ module RuboCop
|
|
28
29
|
class MinitestHandlerUsage < Cop
|
29
30
|
include RangeHelp
|
30
31
|
|
31
|
-
MSG = 'Use Chef InSpec for testing instead of the Minitest Handler cookbook pattern.'
|
32
|
+
MSG = 'Use Chef InSpec for testing instead of the Minitest Handler cookbook pattern.'
|
32
33
|
|
33
34
|
def_node_matcher :minitest_depends?, <<-PATTERN
|
34
35
|
(send nil? :depends (str "minitest-handler"))
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2020, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -27,19 +28,21 @@ module RuboCop
|
|
27
28
|
# ::File.open('/proc/1/comm').chomp == 'systemd'
|
28
29
|
# File.open('/proc/1/comm').gets.chomp == 'systemd'
|
29
30
|
# File.open('/proc/1/comm').chomp == 'systemd'
|
30
|
-
# File.exist?('/proc/1/comm') && File.open('/proc/1/comm').chomp == 'systemd'
|
31
|
-
#
|
32
31
|
# IO.read('/proc/1/comm').chomp == 'systemd'
|
33
32
|
# IO.read('/proc/1/comm').gets.chomp == 'systemd'
|
34
33
|
# ::IO.read('/proc/1/comm').chomp == 'systemd'
|
35
34
|
# ::IO.read('/proc/1/comm').gets.chomp == 'systemd'
|
36
35
|
# File.exist?('/proc/1/comm') && File.open('/proc/1/comm').chomp == 'systemd'
|
36
|
+
# only_if 'test -f /bin/systemctl && /bin/systemctl'
|
37
37
|
#
|
38
38
|
# # good
|
39
39
|
# node['init_package'] == 'systemd'
|
40
|
+
# only_if { node['init_package'] == 'systemd' }
|
40
41
|
#
|
41
|
-
class NodeInitPackage <
|
42
|
-
|
42
|
+
class NodeInitPackage < Base
|
43
|
+
extend RuboCop::Cop::AutoCorrector
|
44
|
+
|
45
|
+
MSG = "Use node['init_package'] to check for systemd instead of reading the contents of '/proc/1/comm'"
|
43
46
|
|
44
47
|
def_node_matcher :file_reads_proc_1_comm?, <<-PATTERN
|
45
48
|
(send (const {(cbase) nil?} {:File :IO}) {:open :read} (str "/proc/1/comm"))
|
@@ -58,18 +61,24 @@ module RuboCop
|
|
58
61
|
:== (str "systemd"))
|
59
62
|
PATTERN
|
60
63
|
|
64
|
+
def_node_matcher :file_systemd_conditional?, <<~PATTERN
|
65
|
+
(send nil? {:not_if :only_if} $(str "test -f /bin/systemctl && /bin/systemctl"))
|
66
|
+
PATTERN
|
67
|
+
|
61
68
|
def on_send(node)
|
62
69
|
compare_init_system?(node) do
|
63
70
|
# if there's a ::File.exist?('/proc/1/comm') check first we want to match that as well
|
64
71
|
node = node.parent if node.parent&.and_type? && proc_1_comm_exists?(node.parent.conditions.first)
|
65
72
|
|
66
|
-
add_offense(node
|
73
|
+
add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
74
|
+
corrector.replace(node, "node['init_package'] == 'systemd'")
|
75
|
+
end
|
67
76
|
end
|
68
|
-
end
|
69
77
|
|
70
|
-
|
71
|
-
|
72
|
-
|
78
|
+
file_systemd_conditional?(node) do |conditional|
|
79
|
+
add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
80
|
+
corrector.replace(conditional.loc.expression, "{ node['init_package'] == 'systemd' }")
|
81
|
+
end
|
73
82
|
end
|
74
83
|
end
|
75
84
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2020, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -29,7 +30,7 @@ module RuboCop
|
|
29
30
|
# node.role?('foo')
|
30
31
|
#
|
31
32
|
class NodeRolesInclude < Cop
|
32
|
-
MSG = "Use `node.role?('foo')` to check if a node includes a role instead of `node['roles'].include?('foo')`."
|
33
|
+
MSG = "Use `node.role?('foo')` to check if a node includes a role instead of `node['roles'].include?('foo')`."
|
33
34
|
|
34
35
|
def_node_matcher :node_role_include?, <<-PATTERN
|
35
36
|
(send
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -29,7 +30,7 @@ module RuboCop
|
|
29
30
|
# include_recipe 'ohai'
|
30
31
|
#
|
31
32
|
class IncludingOhaiDefaultRecipe < Cop
|
32
|
-
MSG = "Use the ohai_plugin resource to ship custom Ohai plugins instead of using the ohai::default recipe. If you're not shipping custom Ohai plugins, then you can remove this recipe entirely"
|
33
|
+
MSG = "Use the ohai_plugin resource to ship custom Ohai plugins instead of using the ohai::default recipe. If you're not shipping custom Ohai plugins, then you can remove this recipe entirely"
|
33
34
|
|
34
35
|
def_node_matcher :ohai_recipe_usage?, <<-PATTERN
|
35
36
|
(send nil? :include_recipe (str {"ohai" "ohai::default"}))
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -36,7 +37,7 @@ module RuboCop
|
|
36
37
|
|
37
38
|
minimum_target_chef_version '14.0'
|
38
39
|
|
39
|
-
MSG = 'The openssl_rsa_key resource was renamed to openssl_rsa_private_key in Chef Infra Client 14.0. The new resource name should be used.'
|
40
|
+
MSG = 'The openssl_rsa_key resource was renamed to openssl_rsa_private_key in Chef Infra Client 14.0. The new resource name should be used.'
|
40
41
|
|
41
42
|
def on_send(node)
|
42
43
|
add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :openssl_rsa_key
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -42,7 +43,7 @@ module RuboCop
|
|
42
43
|
|
43
44
|
minimum_target_chef_version '14.4'
|
44
45
|
|
45
|
-
MSG = 'The openssl_x509 resource was renamed to openssl_x509_certificate in Chef Infra Client 14.4. The new resource name should be used.'
|
46
|
+
MSG = 'The openssl_x509 resource was renamed to openssl_x509_certificate in Chef Infra Client 14.4. The new resource name should be used.'
|
46
47
|
|
47
48
|
def on_send(node)
|
48
49
|
add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :openssl_x509
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -32,7 +33,7 @@ module RuboCop
|
|
32
33
|
# end
|
33
34
|
#
|
34
35
|
class OsxConfigProfileResource < Cop
|
35
|
-
MSG = 'The osx_config_profile resource was renamed to osx_profile. The new resource name should be used.'
|
36
|
+
MSG = 'The osx_config_profile resource was renamed to osx_profile. The new resource name should be used.'
|
36
37
|
|
37
38
|
def on_send(node)
|
38
39
|
add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :osx_config_profile
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -34,7 +35,7 @@ module RuboCop
|
|
34
35
|
|
35
36
|
minimum_target_chef_version '15.0'
|
36
37
|
|
37
|
-
MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of using Expand-Archive in a powershell_script resource'
|
38
|
+
MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of using Expand-Archive in a powershell_script resource'
|
38
39
|
|
39
40
|
def on_block(node)
|
40
41
|
match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019-2020, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -49,7 +50,7 @@ module RuboCop
|
|
49
50
|
|
50
51
|
minimum_target_chef_version '13.0'
|
51
52
|
|
52
|
-
MSG = 'PowerShell is already set as the default guard interpreter for `powershell_script` and `batch` resources in Chef Infra Client 13 and later and does not need to be specified.'
|
53
|
+
MSG = 'PowerShell is already set as the default guard interpreter for `powershell_script` and `batch` resources in Chef Infra Client 13 and later and does not need to be specified.'
|
53
54
|
|
54
55
|
def on_block(node)
|
55
56
|
match_property_in_resource?(%i(powershell_script batch), 'guard_interpreter', node) do |interpreter|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -37,7 +38,7 @@ module RuboCop
|
|
37
38
|
|
38
39
|
minimum_target_chef_version '12.16'
|
39
40
|
|
40
|
-
MSG = 'Use the powershell_package resource built into Chef Infra Client 12.16+ instead of using Install-Package in a powershell_script resource'
|
41
|
+
MSG = 'Use the powershell_package resource built into Chef Infra Client 12.16+ instead of using Install-Package in a powershell_script resource'
|
41
42
|
|
42
43
|
def on_block(node)
|
43
44
|
match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -40,7 +41,7 @@ module RuboCop
|
|
40
41
|
|
41
42
|
minimum_target_chef_version '14.0'
|
42
43
|
|
43
|
-
MSG = 'Use the windows_feature resource built into Chef Infra Client 14+ instead of using Install-WindowsFeature or Add-WindowsFeature in a powershell_script resource'
|
44
|
+
MSG = 'Use the windows_feature resource built into Chef Infra Client 14+ instead of using Install-WindowsFeature or Add-WindowsFeature in a powershell_script resource'
|
44
45
|
|
45
46
|
def on_block(node)
|
46
47
|
match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: Copyright 2019, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -29,7 +30,7 @@ module RuboCop
|
|
29
30
|
# property :bob, String, name_property: true
|
30
31
|
#
|
31
32
|
class PropertyWithNameAttribute < Cop
|
32
|
-
MSG = 'Resource property sets name_attribute instead of name_property'
|
33
|
+
MSG = 'Resource property sets name_attribute instead of name_property'
|
33
34
|
|
34
35
|
# match on a property that has any name and any type and a hash that
|
35
36
|
# contains name_attribute true. The hash pairs are wrapped in
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2020, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -34,7 +35,7 @@ module RuboCop
|
|
34
35
|
class ProvidesFromInitialize < Cop
|
35
36
|
include RangeHelp
|
36
37
|
|
37
|
-
MSG = 'Provides should be set using the `provides` resource DSL method instead of instead of setting @provides in the initialize method.'
|
38
|
+
MSG = 'Provides should be set using the `provides` resource DSL method instead of instead of setting @provides in the initialize method.'
|
38
39
|
|
39
40
|
def_node_matcher :provides_assignment?, <<-PATTERN
|
40
41
|
(ivasgn :@provides $(sym ...))
|
@@ -42,19 +43,19 @@ module RuboCop
|
|
42
43
|
|
43
44
|
def on_ivasgn(node)
|
44
45
|
provides_assignment?(node) do
|
45
|
-
add_offense(node, location: :expression, message: MSG, severity: :refactor) if
|
46
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor) if initialize_method(node.parent.parent).any?
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
50
|
def_node_search :provides_method?, '(send nil? :provides ... )'
|
50
51
|
|
51
|
-
def_node_search :
|
52
|
+
def_node_search :initialize_method, '(def :initialize ... )'
|
52
53
|
|
53
54
|
def autocorrect(node)
|
54
55
|
lambda do |corrector|
|
55
56
|
# insert the new provides call above the initialize method, but not if one already exists (this is sadly common)
|
56
57
|
unless provides_method?(processed_source.ast)
|
57
|
-
initialize_node =
|
58
|
+
initialize_node = initialize_method(processed_source.ast).first
|
58
59
|
corrector.insert_before(initialize_node.source_range, "provides #{node.descendants.first.source}\n\n")
|
59
60
|
end
|
60
61
|
|