cookstyle 6.13.3 → 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/Gemfile +0 -1
- data/config/cookstyle.yml +81 -46
- data/config/disable_all.yml +48 -4
- data/config/upstream.yml +175 -27
- data/cookstyle.gemspec +1 -0
- data/lib/cookstyle.rb +7 -7
- 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 +21 -4
- 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 +67 -0
- 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 +11 -11
- 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 +5 -7
- 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 +11 -14
- 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 +4 -4
- 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/macos_userdefaults_global_property.rb +61 -0
- 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 +7 -5
- 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 +8 -12
- 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_27_keyword_argument_warnings.rb +6 -10
- 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 +9 -6
- 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 +17 -17
- 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 +12 -14
- data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +5 -8
- data/lib/rubocop/cop/chef/modernize/definitions.rb +3 -3
- 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 +14 -16
- data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +11 -15
- 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 +14 -13
- 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 +6 -10
- 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 +4 -3
- data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +5 -5
- data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +7 -7
- data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +6 -6
- 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/file_mode.rb +38 -19
- 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 +6 -10
- data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +11 -19
- data/lib/rubocop/monkey_patches/{cop.rb → base.rb} +1 -1
- metadata +9 -7
@@ -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.'
|
@@ -47,26 +48,23 @@ module RuboCop
|
|
47
48
|
(ivasgn {:@action :@default_action} $(...))
|
48
49
|
PATTERN
|
49
50
|
|
50
|
-
def_node_search :
|
51
|
+
def_node_search :initialize_method, '(def :initialize ... )'
|
51
52
|
|
52
53
|
def_node_search :default_action_method?, '(send nil? :default_action ... )'
|
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 = intialize_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
|
@@ -19,15 +19,15 @@ module RuboCop
|
|
19
19
|
module Cop
|
20
20
|
module Chef
|
21
21
|
module ChefModernize
|
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,
|
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
|
@@ -25,7 +25,8 @@ 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.'
|
@@ -39,13 +40,9 @@ module RuboCop
|
|
39
40
|
|
40
41
|
def on_send(node)
|
41
42
|
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))
|
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
|
@@ -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,7 +42,9 @@ 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'
|
47
49
|
|
48
50
|
def_node_matcher :execute_apt_update?, <<-PATTERN
|
@@ -59,15 +61,15 @@ module RuboCop
|
|
59
61
|
|
60
62
|
def on_send(node)
|
61
63
|
execute_apt_update?(node) do
|
62
|
-
add_offense(node,
|
64
|
+
add_offense(node, message: MSG, severity: :refactor)
|
63
65
|
end
|
64
66
|
|
65
67
|
notification_property?(node) do |val|
|
66
|
-
add_offense(val,
|
68
|
+
add_offense(val, message: MSG, severity: :refactor) if val.str_content&.start_with?('execute[apt-get update]')
|
67
69
|
end
|
68
70
|
|
69
71
|
execute_command?(node) do |val|
|
70
|
-
add_offense(node,
|
72
|
+
add_offense(node, message: MSG, severity: :refactor) if val.str_content == 'apt-get update'
|
71
73
|
end
|
72
74
|
end
|
73
75
|
end
|