cookstyle 6.15.9 → 6.16.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/cookstyle.yml +9 -8
- data/config/disable_all.yml +20 -0
- data/config/upstream.yml +79 -11
- 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 +2 -2
- data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +15 -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 +2 -2
- data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +12 -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 +4 -3
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +4 -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 +4 -5
- 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 +2 -2
- data/lib/rubocop/cop/chef/correctness/tmp_path.rb +3 -4
- data/lib/rubocop/cop/chef/{correctness → deprecation}/cb_depends_on_self.rb +6 -11
- data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +5 -8
- data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +7 -10
- data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +3 -3
- data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +15 -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 +5 -8
- data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +5 -9
- data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +11 -10
- data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +8 -8
- data/lib/rubocop/cop/chef/deprecation/easy_install.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +5 -6
- data/lib/rubocop/cop/chef/deprecation/erl_call.rb +2 -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 +5 -9
- data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +2 -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 +4 -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 +2 -2
- data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +3 -3
- data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +5 -9
- data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +7 -7
- data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +5 -9
- data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +4 -4
- data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +6 -8
- data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +5 -7
- 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 +6 -8
- data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +5 -8
- data/lib/rubocop/cop/chef/effortless/berksfile.rb +3 -5
- data/lib/rubocop/cop/chef/effortless/data_bags.rb +2 -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 +2 -2
- data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +16 -16
- data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +9 -9
- data/lib/rubocop/cop/chef/modernize/build_essential.rb +6 -8
- data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +11 -10
- data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +5 -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 +5 -8
- data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +6 -4
- data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +6 -9
- data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +6 -11
- data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +5 -9
- data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +7 -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 +5 -8
- data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +12 -9
- data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +4 -6
- data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +5 -9
- data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +2 -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 +5 -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 +7 -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 +1 -1
- data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +2 -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 +4 -6
- data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +11 -10
- data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +6 -9
- data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +6 -7
- data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +3 -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 +6 -9
- data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +4 -5
- data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +4 -5
- 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 +4 -9
- data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +4 -5
- data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +4 -5
- data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +4 -5
- data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +5 -8
- data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +5 -7
- data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +6 -9
- data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +4 -5
- data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +9 -9
- data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +7 -9
- data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +2 -2
- data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +3 -2
- data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +4 -4
- data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +4 -4
- data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +6 -8
- data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +7 -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/immediate_notification_timing.rb +6 -8
- 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 +4 -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 +5 -5
@@ -27,12 +27,13 @@ module RuboCop
|
|
27
27
|
# search(:node, 'chef_environment:foo')
|
28
28
|
# search(:node, 'role:bar')
|
29
29
|
#
|
30
|
-
class SearchForEnvironmentsOrRoles <
|
30
|
+
class SearchForEnvironmentsOrRoles < Base
|
31
31
|
MSG = 'Cookbook uses search with a node query that looks for a role or environment'
|
32
32
|
|
33
33
|
def on_send(node)
|
34
|
-
if node.method_name == :search &&
|
35
|
-
|
34
|
+
if node.method_name == :search &&
|
35
|
+
node.arguments[1]&.value&.match?(/chef_environment|role/)
|
36
|
+
add_offense(node, message: MSG, severity: :refactor)
|
36
37
|
end
|
37
38
|
end
|
38
39
|
end
|
@@ -26,11 +26,11 @@ module RuboCop
|
|
26
26
|
# # bad
|
27
27
|
# search(:node, 'run_list:recipe\[bacula\:\:server\]')
|
28
28
|
#
|
29
|
-
class CookbookUsesSearch <
|
29
|
+
class CookbookUsesSearch < Base
|
30
30
|
MSG = 'Cookbook uses search, which cannot be used in the Effortless Infra pattern'
|
31
31
|
|
32
32
|
def on_send(node)
|
33
|
-
add_offense(node,
|
33
|
+
add_offense(node, message: MSG, severity: :refactor) if node.method_name == :search
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -38,8 +38,9 @@ module RuboCop
|
|
38
38
|
# # good
|
39
39
|
# allowed_actions [ :create, :add ]
|
40
40
|
#
|
41
|
-
class AllowedActionsFromInitialize <
|
41
|
+
class AllowedActionsFromInitialize < Base
|
42
42
|
include RangeHelp
|
43
|
+
extend AutoCorrector
|
43
44
|
|
44
45
|
MSG = 'The allowed actions of a resource can be set with the "allowed_actions" helper instead of using the initialize method.'
|
45
46
|
|
@@ -48,8 +49,20 @@ module RuboCop
|
|
48
49
|
return if node.body.nil? # nil body is an empty initialize method
|
49
50
|
|
50
51
|
node.body.each_node do |x|
|
51
|
-
|
52
|
-
|
52
|
+
next unless x.assignment? &&
|
53
|
+
!x.parent.op_asgn_type? &&
|
54
|
+
!x.node_parts.empty? &&
|
55
|
+
%i(@actions @allowed_actions).include?(x.node_parts.first)
|
56
|
+
|
57
|
+
add_offense(x, message: MSG, severity: :refactor) do |corrector|
|
58
|
+
# insert the new allowed_actions call above the initialize method, but not if one already exists (this is sadly common)
|
59
|
+
unless action_methods?(processed_source.ast)
|
60
|
+
initialize_node = initialize_method(processed_source.ast).first
|
61
|
+
corrector.insert_before(initialize_node.source_range, "allowed_actions #{x.descendants.first.source}\n\n")
|
62
|
+
end
|
63
|
+
|
64
|
+
# remove the variable from the initialize method
|
65
|
+
corrector.remove(range_with_surrounding_space(range: x.loc.expression, side: :left))
|
53
66
|
end
|
54
67
|
end
|
55
68
|
end
|
@@ -57,19 +70,6 @@ module RuboCop
|
|
57
70
|
def_node_search :action_methods?, '(send nil? {:actions :allowed_actions} ... )'
|
58
71
|
|
59
72
|
def_node_search :initialize_method, '(def :initialize ... )'
|
60
|
-
|
61
|
-
def autocorrect(node)
|
62
|
-
lambda do |corrector|
|
63
|
-
# insert the new allowed_actions call above the initialize method, but not if one already exists (this is sadly common)
|
64
|
-
unless action_methods?(processed_source.ast)
|
65
|
-
initialize_node = initialize_method(processed_source.ast).first
|
66
|
-
corrector.insert_before(initialize_node.source_range, "allowed_actions #{node.descendants.first.source}\n\n")
|
67
|
-
end
|
68
|
-
|
69
|
-
# remove the variable from the initialize method
|
70
|
-
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
71
|
-
end
|
72
|
-
end
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
@@ -30,7 +30,7 @@ module RuboCop
|
|
30
30
|
# # good
|
31
31
|
# apt_update
|
32
32
|
#
|
33
|
-
class IncludingAptDefaultRecipe <
|
33
|
+
class IncludingAptDefaultRecipe < Base
|
34
34
|
extend TargetChefVersion
|
35
35
|
|
36
36
|
minimum_target_chef_version '12.7'
|
@@ -43,7 +43,7 @@ module RuboCop
|
|
43
43
|
|
44
44
|
def on_send(node)
|
45
45
|
apt_recipe_usage?(node) do
|
46
|
-
add_offense(node,
|
46
|
+
add_offense(node, message: MSG, severity: :refactor)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -34,7 +34,9 @@ module RuboCop
|
|
34
34
|
# # good
|
35
35
|
# source 'https://supermarket.chef.io'
|
36
36
|
#
|
37
|
-
class LegacyBerksfileSource <
|
37
|
+
class LegacyBerksfileSource < Base
|
38
|
+
extend AutoCorrector
|
39
|
+
|
38
40
|
MSG = 'Do not use legacy Berksfile community sources. Use Chef Supermarket instead.'
|
39
41
|
|
40
42
|
def_node_matcher :berksfile_site?, <<-PATTERN
|
@@ -51,17 +53,15 @@ module RuboCop
|
|
51
53
|
|
52
54
|
def on_send(node)
|
53
55
|
berksfile_source?(node) do
|
54
|
-
add_offense(node,
|
56
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
57
|
+
corrector.replace(node.loc.expression, "source 'https://supermarket.chef.io'")
|
58
|
+
end
|
55
59
|
end
|
56
60
|
|
57
61
|
berksfile_site?(node) do
|
58
|
-
add_offense(node,
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
def autocorrect(node)
|
63
|
-
lambda do |corrector|
|
64
|
-
corrector.replace(node.loc.expression, "source 'https://supermarket.chef.io'")
|
62
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
63
|
+
corrector.replace(node.loc.expression, "source 'https://supermarket.chef.io'")
|
64
|
+
end
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -31,7 +31,9 @@ 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+'
|
36
38
|
|
37
39
|
def_node_matcher :build_essential_recipe_usage?, <<-PATTERN
|
@@ -40,13 +42,9 @@ module RuboCop
|
|
40
42
|
|
41
43
|
def on_send(node)
|
42
44
|
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'")
|
45
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
46
|
+
corrector.replace(node.loc.expression, "build_essential 'install compilation tools'")
|
47
|
+
end
|
50
48
|
end
|
51
49
|
end
|
52
50
|
end
|
@@ -32,7 +32,8 @@ 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
|
|
@@ -46,13 +47,9 @@ module RuboCop
|
|
46
47
|
|
47
48
|
def on_send(node)
|
48
49
|
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))
|
50
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
51
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
52
|
+
end
|
56
53
|
end
|
57
54
|
end
|
58
55
|
end
|
@@ -27,7 +27,8 @@ 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
|
|
@@ -39,20 +40,20 @@ module RuboCop
|
|
39
40
|
|
40
41
|
def on_block(node)
|
41
42
|
match_property_in_resource?(:chef_gem, 'package_name', node) do |pkg_name|
|
42
|
-
|
43
|
+
return unless pkg_name.arguments&.first&.str_content == 'nokogiri'
|
44
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
45
|
+
node = node.parent if node.parent&.block_type? # make sure we get the whole block not just the method in the block
|
46
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
47
|
+
end
|
43
48
|
end
|
44
49
|
end
|
45
50
|
|
46
51
|
def on_send(node)
|
47
52
|
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))
|
53
|
+
add_offense(node, message: MSG, severity: :refactor) 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))
|
56
|
+
end
|
56
57
|
end
|
57
58
|
end
|
58
59
|
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,7 +29,9 @@ 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"
|
34
36
|
|
35
37
|
def_node_matcher :resource_conditional?, <<~PATTERN
|
@@ -38,13 +40,8 @@ module RuboCop
|
|
38
40
|
|
39
41
|
def on_send(node)
|
40
42
|
resource_conditional?(node) do |conditional|
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
def autocorrect(node)
|
46
|
-
lambda do |corrector|
|
47
|
-
resource_conditional?(node) do |conditional|
|
43
|
+
return unless conditional.value.match?(/^test -[ef] \S*$/)
|
44
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
48
45
|
new_string = "{ ::File.exist?('#{conditional.value.match(/^test -[ef] (\S*)$/)[1]}') }"
|
49
46
|
corrector.replace(conditional.loc.expression, new_string)
|
50
47
|
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.'
|
38
39
|
|
39
40
|
def on_send(node)
|
40
|
-
add_offense(node,
|
41
|
-
|
42
|
-
|
43
|
-
def autocorrect(node)
|
44
|
-
lambda do |corrector|
|
41
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
42
|
+
return unless node.method_name == :cron_manage
|
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,7 +26,8 @@ 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
|
|
@@ -40,13 +41,9 @@ module RuboCop
|
|
40
41
|
|
41
42
|
def on_send(node)
|
42
43
|
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))
|
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
|
50
47
|
end
|
51
48
|
end
|
52
49
|
end
|