cookstyle 6.14.7 → 6.16.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -1
- data/config/cookstyle.yml +54 -16
- data/config/disable_all.yml +48 -4
- data/config/upstream.yml +175 -27
- data/cookstyle.gemspec +1 -0
- data/lib/cookstyle.rb +2 -2
- data/lib/cookstyle/version.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +7 -9
- data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +5 -9
- data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +5 -9
- data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +5 -8
- data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +11 -9
- data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +3 -2
- data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +3 -2
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +16 -21
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +15 -23
- data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +3 -2
- data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +13 -14
- data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +13 -22
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +5 -3
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +5 -3
- data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +3 -4
- data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +5 -8
- data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +2 -3
- data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +6 -7
- data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +5 -12
- data/lib/rubocop/cop/chef/correctness/node_normal.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/node_save.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +7 -7
- data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +4 -4
- data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +6 -2
- data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +6 -8
- data/lib/rubocop/cop/chef/correctness/service_resource.rb +3 -2
- data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +1 -0
- data/lib/rubocop/cop/chef/correctness/tmp_path.rb +4 -4
- data/lib/rubocop/cop/chef/deprecation/ use_automatic_resource_name.rb +1 -2
- data/lib/rubocop/cop/chef/{correctness → deprecation}/cb_depends_on_self.rb +7 -11
- data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +7 -10
- data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +4 -3
- data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +16 -28
- data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +5 -8
- data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +3 -6
- data/lib/rubocop/cop/chef/deprecation/cheffile.rb +3 -5
- data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +5 -8
- data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +5 -8
- data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +11 -14
- data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +12 -10
- data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +11 -12
- data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +8 -8
- data/lib/rubocop/cop/chef/deprecation/easy_install.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +5 -6
- data/lib/rubocop/cop/chef/deprecation/erl_call.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +11 -12
- data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +6 -9
- data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +6 -9
- data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +5 -9
- data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/node_set.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +6 -4
- data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +6 -3
- data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +5 -9
- data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +8 -7
- data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +3 -4
- data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +8 -11
- data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +7 -10
- data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +5 -4
- data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +7 -8
- data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +10 -13
- data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +11 -14
- data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +11 -16
- data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +4 -9
- data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +7 -8
- data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +6 -8
- data/lib/rubocop/cop/chef/effortless/berksfile.rb +3 -5
- data/lib/rubocop/cop/chef/effortless/data_bags.rb +3 -2
- data/lib/rubocop/cop/chef/effortless/node_environment.rb +6 -3
- data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +6 -3
- data/lib/rubocop/cop/chef/effortless/node_roles.rb +6 -3
- data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +4 -3
- data/lib/rubocop/cop/chef/effortless/search_used.rb +3 -2
- data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +16 -16
- data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +3 -2
- data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +10 -9
- data/lib/rubocop/cop/chef/modernize/build_essential.rb +7 -8
- data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +12 -10
- data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +4 -6
- data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +7 -8
- data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +11 -13
- data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/definitions.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +7 -4
- data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +7 -9
- data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +7 -11
- data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +6 -9
- data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +8 -4
- data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +7 -12
- data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +4 -6
- data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +13 -9
- data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +4 -6
- data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +5 -9
- data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +3 -2
- data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +4 -6
- data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +4 -6
- data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +5 -6
- data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +3 -4
- data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +5 -9
- data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +3 -4
- data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +3 -4
- data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +6 -9
- data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +13 -15
- data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +10 -14
- data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +3 -4
- data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +8 -8
- data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +4 -9
- data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +20 -16
- data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +3 -2
- data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +3 -8
- data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +5 -7
- data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +6 -10
- data/lib/rubocop/cop/chef/modernize/{systctl_param_resource.rb → sysctl_param_resource.rb} +4 -6
- data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +11 -10
- data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +7 -9
- data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +6 -7
- data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +3 -2
- data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +4 -3
- data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +4 -6
- data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +5 -8
- data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +6 -8
- data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +4 -6
- data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +4 -6
- data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +5 -13
- data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +4 -6
- data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +4 -6
- data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +7 -9
- data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +2 -2
- data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +4 -8
- data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +8 -9
- data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +5 -9
- data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +4 -6
- data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +4 -6
- data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +4 -6
- data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +5 -8
- data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +6 -7
- data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +7 -9
- data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +4 -6
- data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +1 -0
- data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +10 -9
- data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +7 -9
- data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +3 -2
- data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +4 -3
- data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +4 -3
- data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +5 -5
- data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +4 -4
- data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +7 -8
- data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +8 -12
- data/lib/rubocop/cop/chef/style/chef_whaaat.rb +3 -4
- data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +5 -7
- data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +5 -9
- data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +5 -7
- data/lib/rubocop/cop/chef/style/comments_format.rb +13 -16
- data/lib/rubocop/cop/chef/style/file_mode.rb +1 -0
- data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +7 -8
- data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +1 -0
- data/lib/rubocop/cop/chef/style/negating_only_if.rb +5 -9
- data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +5 -9
- data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +6 -8
- data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +6 -9
- data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +17 -28
- data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +5 -9
- data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +11 -19
- metadata +7 -7
@@ -31,8 +31,11 @@ module RuboCop
|
|
31
31
|
# # good
|
32
32
|
# build_essential 'install compilation tools'
|
33
33
|
#
|
34
|
-
class UseBuildEssentialResource <
|
34
|
+
class UseBuildEssentialResource < Base
|
35
|
+
extend AutoCorrector
|
36
|
+
|
35
37
|
MSG = 'Use the build_essential resource instead of the legacy build-essential recipe. This resource ships in the build-essential cookbook v5.0+ and is built into Chef Infra Client 14+'
|
38
|
+
RESTRICT_ON_SEND = [:include_recipe].freeze
|
36
39
|
|
37
40
|
def_node_matcher :build_essential_recipe_usage?, <<-PATTERN
|
38
41
|
(send nil? :include_recipe (str {"build-essential" "build-essential::default"}))
|
@@ -40,13 +43,9 @@ module RuboCop
|
|
40
43
|
|
41
44
|
def on_send(node)
|
42
45
|
build_essential_recipe_usage?(node) do
|
43
|
-
add_offense(node,
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
def autocorrect(node)
|
48
|
-
lambda do |corrector|
|
49
|
-
corrector.replace(node.loc.expression, "build_essential 'install compilation tools'")
|
46
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
47
|
+
corrector.replace(node.loc.expression, "build_essential 'install compilation tools'")
|
48
|
+
end
|
50
49
|
end
|
51
50
|
end
|
52
51
|
end
|
@@ -32,13 +32,15 @@ module RuboCop
|
|
32
32
|
# depends 'swap'
|
33
33
|
# depends 'sysctl'
|
34
34
|
#
|
35
|
-
class UnnecessaryDependsChef14 <
|
35
|
+
class UnnecessaryDependsChef14 < Base
|
36
|
+
extend AutoCorrector
|
36
37
|
extend TargetChefVersion
|
37
38
|
include RangeHelp
|
38
39
|
|
39
40
|
minimum_target_chef_version '14.0'
|
40
41
|
|
41
42
|
MSG = "Don't depend on cookbooks made obsolete by Chef Infra Client 14+. These community cookbooks contain resources that are now included in Chef Infra Client itself."
|
43
|
+
RESTRICT_ON_SEND = [:depends].freeze
|
42
44
|
|
43
45
|
def_node_matcher :legacy_depends?, <<-PATTERN
|
44
46
|
(send nil? :depends (str {"build-essential" "chef_handler" "chef_hostname" "dmg" "mac_os_x" "swap" "sysctl"}) ... )
|
@@ -46,13 +48,9 @@ module RuboCop
|
|
46
48
|
|
47
49
|
def on_send(node)
|
48
50
|
legacy_depends?(node) do
|
49
|
-
add_offense(node,
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
def autocorrect(node)
|
54
|
-
lambda do |corrector|
|
55
|
-
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
51
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
52
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
53
|
+
end
|
56
54
|
end
|
57
55
|
end
|
58
56
|
end
|
@@ -27,11 +27,13 @@ module RuboCop
|
|
27
27
|
# # bad
|
28
28
|
# chef_gem 'nokogiri'
|
29
29
|
#
|
30
|
-
class ChefGemNokogiri <
|
30
|
+
class ChefGemNokogiri < Base
|
31
|
+
extend AutoCorrector
|
31
32
|
include RangeHelp
|
32
33
|
include RuboCop::Chef::CookbookHelpers
|
33
34
|
|
34
35
|
MSG = 'The nokogiri gem ships in Chef Infra Client 12+ and does not need to be installed before being used.'
|
36
|
+
RESTRICT_ON_SEND = [:chef_gem].freeze
|
35
37
|
|
36
38
|
def_node_matcher :nokogiri_install?, <<-PATTERN
|
37
39
|
(send nil? :chef_gem (str "nokogiri"))
|
@@ -39,20 +41,20 @@ module RuboCop
|
|
39
41
|
|
40
42
|
def on_block(node)
|
41
43
|
match_property_in_resource?(:chef_gem, 'package_name', node) do |pkg_name|
|
42
|
-
|
44
|
+
return unless pkg_name.arguments&.first&.str_content == 'nokogiri'
|
45
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
46
|
+
node = node.parent if node.parent&.block_type? # make sure we get the whole block not just the method in the block
|
47
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
48
|
+
end
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
46
52
|
def on_send(node)
|
47
53
|
nokogiri_install?(node) do
|
48
|
-
add_offense(node,
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
def autocorrect(node)
|
53
|
-
lambda do |corrector|
|
54
|
-
node = node.parent if node.parent&.block_type? # make sure we get the whole block not just the method in the block
|
55
|
-
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
54
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
55
|
+
node = node.parent if node.parent&.block_type? # make sure we get the whole block not just the method in the block
|
56
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
57
|
+
end
|
56
58
|
end
|
57
59
|
end
|
58
60
|
end
|
@@ -33,7 +33,7 @@ module RuboCop
|
|
33
33
|
# compile_time true
|
34
34
|
# end
|
35
35
|
#
|
36
|
-
class ResourceForcingCompileTime <
|
36
|
+
class ResourceForcingCompileTime < Base
|
37
37
|
MSG = "Set 'compile_time true' in resources when available instead of forcing resources to run at compile time by setting an action on the block."
|
38
38
|
|
39
39
|
def_node_matcher :compile_time_resource?, <<-PATTERN
|
@@ -42,7 +42,7 @@ module RuboCop
|
|
42
42
|
|
43
43
|
def on_send(node)
|
44
44
|
compile_time_resource?(node) do
|
45
|
-
add_offense(node,
|
45
|
+
add_offense(node, message: MSG, severity: :refactor)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -29,8 +29,11 @@ module RuboCop
|
|
29
29
|
# # good
|
30
30
|
# only_if { ::File.exist?('bin/foo') }
|
31
31
|
#
|
32
|
-
class ConditionalUsingTest <
|
32
|
+
class ConditionalUsingTest < Base
|
33
|
+
extend AutoCorrector
|
34
|
+
|
33
35
|
MSG = "Use ::File.exist?('/foo/bar') instead of the slower 'test -f /foo/bar' which requires shelling out"
|
36
|
+
RESTRICT_ON_SEND = [:not_if, :only_if].freeze
|
34
37
|
|
35
38
|
def_node_matcher :resource_conditional?, <<~PATTERN
|
36
39
|
(send nil? {:not_if :only_if} $str )
|
@@ -38,13 +41,8 @@ module RuboCop
|
|
38
41
|
|
39
42
|
def on_send(node)
|
40
43
|
resource_conditional?(node) do |conditional|
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
def autocorrect(node)
|
46
|
-
lambda do |corrector|
|
47
|
-
resource_conditional?(node) do |conditional|
|
44
|
+
return unless conditional.value.match?(/^test -[ef] \S*$/)
|
45
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
48
46
|
new_string = "{ ::File.exist?('#{conditional.value.match(/^test -[ef] (\S*)$/)[1]}') }"
|
49
47
|
corrector.replace(conditional.loc.expression, new_string)
|
50
48
|
end
|
@@ -60,7 +60,7 @@ module RuboCop
|
|
60
60
|
# action :delete
|
61
61
|
# end
|
62
62
|
#
|
63
|
-
class CronDFileOrTemplate <
|
63
|
+
class CronDFileOrTemplate < Base
|
64
64
|
extend TargetChefVersion
|
65
65
|
|
66
66
|
minimum_target_chef_version '14.4'
|
@@ -78,7 +78,7 @@ module RuboCop
|
|
78
78
|
def on_block(node)
|
79
79
|
file_or_template?(node) do |file_name|
|
80
80
|
return unless file_name.start_with?('/etc/cron.d/')
|
81
|
-
add_offense(node,
|
81
|
+
add_offense(node, message: MSG, severity: :refactor)
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
@@ -29,19 +29,17 @@ module RuboCop
|
|
29
29
|
# # good
|
30
30
|
# cron_access 'mike'
|
31
31
|
#
|
32
|
-
class CronManageResource <
|
32
|
+
class CronManageResource < Base
|
33
33
|
extend TargetChefVersion
|
34
|
+
extend AutoCorrector
|
34
35
|
|
35
36
|
minimum_target_chef_version '14.4'
|
36
37
|
|
37
38
|
MSG = 'The cron_manage resource was renamed to cron_access in the 6.1 release of the cron cookbook and later shipped in Chef Infra Client 14.4. The new resource name should be used.'
|
39
|
+
RESTRICT_ON_SEND = [:cron_manage].freeze
|
38
40
|
|
39
41
|
def on_send(node)
|
40
|
-
add_offense(node,
|
41
|
-
end
|
42
|
-
|
43
|
-
def autocorrect(node)
|
44
|
-
lambda do |corrector|
|
42
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
45
43
|
corrector.replace(node.loc.expression, node.source.gsub(/^cron_manage/, 'cron_access'))
|
46
44
|
end
|
47
45
|
end
|
@@ -31,7 +31,9 @@ module RuboCop
|
|
31
31
|
# plain_text_data = data_bag_item('foo', 'bar')
|
32
32
|
# encrypted_data = data_bag_item('foo2', 'bar2')
|
33
33
|
#
|
34
|
-
class DatabagHelpers <
|
34
|
+
class DatabagHelpers < Base
|
35
|
+
extend AutoCorrector
|
36
|
+
|
35
37
|
MSG = 'Use the `data_bag_item` helper instead of `Chef::DataBagItem.load` or `Chef::EncryptedDataBagItem.load`.'
|
36
38
|
|
37
39
|
def_node_matcher :data_bag_class_load?, <<-PATTERN
|
@@ -43,13 +45,10 @@ module RuboCop
|
|
43
45
|
|
44
46
|
def on_send(node)
|
45
47
|
data_bag_class_load?(node) do
|
46
|
-
add_offense(node,
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
def autocorrect(node)
|
51
|
-
lambda do |corrector|
|
52
|
-
corrector.replace(node.loc.expression, node.source.gsub(/Chef::(EncryptedDataBagItem|DataBagItem).load/, 'data_bag_item'))
|
48
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
49
|
+
corrector.replace(node.loc.expression,
|
50
|
+
node.source.gsub(/Chef::(EncryptedDataBagItem|DataBagItem).load/, 'data_bag_item'))
|
51
|
+
end
|
53
52
|
end
|
54
53
|
end
|
55
54
|
end
|
@@ -38,7 +38,8 @@ module RuboCop
|
|
38
38
|
# # good
|
39
39
|
# default_action :create
|
40
40
|
|
41
|
-
class DefaultActionFromInitialize <
|
41
|
+
class DefaultActionFromInitialize < Base
|
42
|
+
extend AutoCorrector
|
42
43
|
include RangeHelp
|
43
44
|
|
44
45
|
MSG = 'The default action of a resource can be set with the "default_action" helper instead of using the initialize method.'
|
@@ -53,20 +54,17 @@ module RuboCop
|
|
53
54
|
|
54
55
|
def on_ivasgn(node)
|
55
56
|
action_variable_assignment?(node) do
|
56
|
-
|
57
|
-
|
58
|
-
|
57
|
+
return unless initialize_method(node.parent.parent)
|
58
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
59
|
+
# insert the new default_action call above the initialize method, but not if one already exists (this is sadly common)
|
60
|
+
unless default_action_method?(processed_source.ast)
|
61
|
+
initialize_node = initialize_method(processed_source.ast).first
|
62
|
+
corrector.insert_before(initialize_node.source_range, "default_action #{node.descendants.first.source}\n\n")
|
63
|
+
end
|
59
64
|
|
60
|
-
|
61
|
-
|
62
|
-
# insert the new default_action call above the initialize method, but not if one already exists (this is sadly common)
|
63
|
-
unless default_action_method?(processed_source.ast)
|
64
|
-
initialize_node = initialize_method(processed_source.ast).first
|
65
|
-
corrector.insert_before(initialize_node.source_range, "default_action #{node.descendants.first.source}\n\n")
|
65
|
+
# remove the variable from the initialize method
|
66
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
66
67
|
end
|
67
|
-
|
68
|
-
# remove the variable from the initialize method
|
69
|
-
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
70
68
|
end
|
71
69
|
end
|
72
70
|
end
|
@@ -30,7 +30,8 @@ module RuboCop
|
|
30
30
|
# end
|
31
31
|
# end
|
32
32
|
#
|
33
|
-
class DefinesChefSpecMatchers <
|
33
|
+
class DefinesChefSpecMatchers < Base
|
34
|
+
extend AutoCorrector
|
34
35
|
include RangeHelp
|
35
36
|
|
36
37
|
MSG = 'ChefSpec matchers are now auto generated by ChefSpec 7.1+ and do not need to be defined in a cookbook'
|
@@ -41,13 +42,9 @@ module RuboCop
|
|
41
42
|
|
42
43
|
def on_if(node)
|
43
44
|
chefspec_matcher?(node) do
|
44
|
-
add_offense(node,
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
def autocorrect(node)
|
49
|
-
lambda do |corrector|
|
50
|
-
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
45
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
46
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
47
|
+
end
|
51
48
|
end
|
52
49
|
end
|
53
50
|
end
|
@@ -21,13 +21,13 @@ module RuboCop
|
|
21
21
|
module ChefModernize
|
22
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.
|
23
23
|
#
|
24
|
-
class Definitions <
|
24
|
+
class Definitions < Base
|
25
25
|
include RuboCop::Chef::CookbookHelpers
|
26
26
|
|
27
27
|
MSG = 'Legacy Chef Infra definitions should be rewritten as custom resources to take full advantage of the Chef Infra feature set.'
|
28
28
|
|
29
29
|
def on_block(node)
|
30
|
-
add_offense(node,
|
30
|
+
add_offense(node, message: MSG, severity: :refactor) if node.respond_to?(:method_name) && node.method_name == :define
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -26,13 +26,15 @@ module RuboCop
|
|
26
26
|
# # bad
|
27
27
|
# depends 'zypper'
|
28
28
|
#
|
29
|
-
class DependsOnZypperCookbook <
|
29
|
+
class DependsOnZypperCookbook < Base
|
30
|
+
extend AutoCorrector
|
30
31
|
extend TargetChefVersion
|
31
32
|
include RangeHelp
|
32
33
|
|
33
34
|
minimum_target_chef_version '13.3'
|
34
35
|
|
35
36
|
MSG = "Don't depend on the zypper cookbook as the zypper_repository resource is built into Chef Infra Client 13.3+"
|
37
|
+
RESTRICT_ON_SEND = [:depends].freeze
|
36
38
|
|
37
39
|
def_node_matcher :zypper_depends?, <<-PATTERN
|
38
40
|
(send nil? :depends (str "zypper"))
|
@@ -40,13 +42,9 @@ module RuboCop
|
|
40
42
|
|
41
43
|
def on_send(node)
|
42
44
|
zypper_depends?(node) do
|
43
|
-
add_offense(node,
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
def autocorrect(node)
|
48
|
-
lambda do |corrector|
|
49
|
-
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
45
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
46
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
47
|
+
end
|
50
48
|
end
|
51
49
|
end
|
52
50
|
end
|
@@ -25,10 +25,12 @@ module RuboCop
|
|
25
25
|
# include Chef::DSL::Recipe
|
26
26
|
# include Chef::DSL::IncludeRecipe
|
27
27
|
#
|
28
|
-
class DslIncludeInResource <
|
28
|
+
class DslIncludeInResource < Base
|
29
|
+
extend AutoCorrector
|
29
30
|
include RangeHelp
|
30
31
|
|
31
32
|
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.'
|
33
|
+
RESTRICT_ON_SEND = [:include].freeze
|
32
34
|
|
33
35
|
def_node_matcher :dsl_include?, <<-PATTERN
|
34
36
|
(send nil? :include
|
@@ -39,13 +41,9 @@ module RuboCop
|
|
39
41
|
|
40
42
|
def on_send(node)
|
41
43
|
dsl_include?(node) do
|
42
|
-
add_offense(node,
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
def autocorrect(node)
|
47
|
-
lambda do |corrector|
|
48
|
-
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
44
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
45
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
46
|
+
end
|
49
47
|
end
|
50
48
|
end
|
51
49
|
end
|
@@ -28,7 +28,8 @@ module RuboCop
|
|
28
28
|
# super
|
29
29
|
# end
|
30
30
|
#
|
31
|
-
class EmptyResourceInitializeMethod <
|
31
|
+
class EmptyResourceInitializeMethod < Base
|
32
|
+
extend AutoCorrector
|
32
33
|
include RangeHelp
|
33
34
|
|
34
35
|
MSG = 'There is no need for an empty initialize method in a resource'
|
@@ -39,13 +40,9 @@ module RuboCop
|
|
39
40
|
|
40
41
|
def on_def(node)
|
41
42
|
empty_initialize?(node) do
|
42
|
-
add_offense(node,
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
def autocorrect(node)
|
47
|
-
lambda do |corrector|
|
48
|
-
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
43
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
44
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
45
|
+
end
|
49
46
|
end
|
50
47
|
end
|
51
48
|
end
|
@@ -42,8 +42,11 @@ module RuboCop
|
|
42
42
|
# notifies :update, 'apt_update[update apt cache]', :immediately
|
43
43
|
# end
|
44
44
|
#
|
45
|
-
class ExecuteAptUpdate <
|
45
|
+
class ExecuteAptUpdate < Base
|
46
|
+
extend AutoCorrector
|
47
|
+
|
46
48
|
MSG = 'Use the apt_update resource instead of the execute resource to run an apt-get update package cache update'
|
49
|
+
RESTRICT_ON_SEND = [:execute, :notifies, :subscribes, :command].freeze
|
47
50
|
|
48
51
|
def_node_matcher :execute_apt_update?, <<-PATTERN
|
49
52
|
(send nil? :execute (str { "apt-get update" "apt-get update -y" "apt-get -y update" }))
|
@@ -59,15 +62,15 @@ module RuboCop
|
|
59
62
|
|
60
63
|
def on_send(node)
|
61
64
|
execute_apt_update?(node) do
|
62
|
-
add_offense(node,
|
65
|
+
add_offense(node, message: MSG, severity: :refactor)
|
63
66
|
end
|
64
67
|
|
65
68
|
notification_property?(node) do |val|
|
66
|
-
add_offense(val,
|
69
|
+
add_offense(val, message: MSG, severity: :refactor) if val.str_content&.start_with?('execute[apt-get update]')
|
67
70
|
end
|
68
71
|
|
69
72
|
execute_command?(node) do |val|
|
70
|
-
add_offense(node,
|
73
|
+
add_offense(node, message: MSG, severity: :refactor) if val.str_content == 'apt-get update'
|
71
74
|
end
|
72
75
|
end
|
73
76
|
end
|
@@ -32,32 +32,30 @@ module RuboCop
|
|
32
32
|
# action :delete
|
33
33
|
# end
|
34
34
|
#
|
35
|
-
class ExecuteScExe <
|
35
|
+
class ExecuteScExe < Base
|
36
36
|
include RuboCop::Chef::CookbookHelpers
|
37
37
|
extend TargetChefVersion
|
38
38
|
|
39
39
|
minimum_target_chef_version '14.0'
|
40
40
|
|
41
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'
|
42
|
+
RESTRICT_ON_SEND = [:execute].freeze
|
42
43
|
|
43
44
|
# non block execute resources
|
44
45
|
def on_send(node)
|
45
|
-
return unless node.method_name == :execute
|
46
|
-
|
47
46
|
# use a regex on source instead of .value in case there's string interpolation which adds a complex dstr type
|
48
47
|
# with a nested string and a begin. Source allows us to avoid a lot of defensive programming here
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
return unless node&.arguments.first&.source&.match?(/^("|')sc.exe/)
|
49
|
+
|
50
|
+
add_offense(node, message: MSG, severity: :refactor)
|
52
51
|
end
|
53
52
|
|
54
53
|
# block execute resources
|
55
54
|
def on_block(node)
|
56
55
|
match_property_in_resource?(:execute, 'command', node) do |code_property|
|
57
56
|
property_data = method_arg_ast_to_string(code_property)
|
58
|
-
|
59
|
-
|
60
|
-
end
|
57
|
+
return unless property_data && property_data.match?(/^sc.exe/i)
|
58
|
+
add_offense(node, message: MSG, severity: :refactor)
|
61
59
|
end
|
62
60
|
end
|
63
61
|
end
|