cookstyle 6.17.5 → 6.19.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +5 -1
- data/bin/cookstyle +0 -1
- data/config/cookstyle.yml +85 -15
- data/config/disable_all.yml +8 -0
- data/config/upstream.yml +50 -3
- data/cookstyle.gemspec +1 -2
- data/lib/cookstyle.rb +5 -5
- data/lib/cookstyle/version.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +1 -1
- data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +1 -1
- data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +24 -14
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +1 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +1 -0
- data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +1 -1
- data/lib/rubocop/cop/chef/correctness/lazy_in_resource_guard.rb +67 -0
- data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/node_normal.rb +1 -0
- data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +1 -0
- data/lib/rubocop/cop/chef/correctness/node_save.rb +1 -0
- data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +1 -1
- data/lib/rubocop/cop/chef/correctness/property_without_type.rb +59 -0
- data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +1 -1
- data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +1 -1
- data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/chef_shellout.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +1 -3
- data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +1 -0
- data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/execute_path_property.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/execute_relative_creates_without_cwd.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +2 -0
- data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +22 -27
- data/lib/rubocop/cop/chef/deprecation/node_set.rb +1 -0
- data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +1 -0
- data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +1 -0
- data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +1 -0
- data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/windows_package_installer_type_string.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +5 -4
- data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +1 -1
- data/lib/rubocop/cop/chef/effortless/chef_vault_used.rb +89 -0
- data/lib/rubocop/cop/chef/effortless/depends_chef_vault.rb +49 -0
- data/lib/rubocop/cop/chef/modernize/action_method_in_resource.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/build_essential.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +1 -0
- data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/node_init_package.rb +5 -4
- data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +7 -4
- data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +6 -6
- data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +10 -10
- data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +2 -2
- data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/sysctl_param_resource.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +1 -1
- data/lib/rubocop/cop/chef/redundant/double_compile_time.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +1 -1
- data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +1 -0
- data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +1 -0
- data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +1 -1
- data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +1 -1
- data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +1 -1
- data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +1 -1
- data/lib/rubocop/cop/chef/style/attribute_keys.rb +2 -1
- data/lib/rubocop/cop/chef/style/chef_whaaat.rb +1 -1
- data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +2 -2
- data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +2 -2
- data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +1 -1
- data/lib/rubocop/cop/chef/style/comments_format.rb +6 -13
- data/lib/rubocop/cop/chef/style/file_mode.rb +2 -2
- data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +2 -2
- data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +2 -2
- data/lib/rubocop/cop/chef/style/negating_only_if.rb +2 -2
- data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +2 -2
- data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +2 -1
- data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +2 -2
- data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +5 -4
- data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +2 -2
- data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +7 -6
- metadata +8 -4
|
@@ -56,7 +56,7 @@ module RuboCop
|
|
|
56
56
|
range = range_with_surrounding_comma(range_with_surrounding_space(range: con.loc.expression, side: :left), :both)
|
|
57
57
|
corrector.remove(range)
|
|
58
58
|
else
|
|
59
|
-
corrector.replace(con
|
|
59
|
+
corrector.replace(con, "'#{new_value}'")
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
end
|
|
@@ -56,7 +56,7 @@ module RuboCop
|
|
|
56
56
|
add_offense(plat, message: MSG, severity: :refactor) do |corrector|
|
|
57
57
|
correct_string = corrected_platform_source(plat)
|
|
58
58
|
next unless correct_string
|
|
59
|
-
corrector.replace(plat
|
|
59
|
+
corrector.replace(plat, correct_string)
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
end
|
|
@@ -68,7 +68,7 @@ module RuboCop
|
|
|
68
68
|
add_offense(plat, message: MSG, severity: :refactor) do |corrector|
|
|
69
69
|
correct_string = corrected_platform_source(plat)
|
|
70
70
|
next unless correct_string
|
|
71
|
-
corrector.replace(plat
|
|
71
|
+
corrector.replace(plat, correct_string)
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
end
|
|
@@ -35,6 +35,7 @@ module RuboCop
|
|
|
35
35
|
include ::RuboCop::Chef::PlatformHelpers
|
|
36
36
|
|
|
37
37
|
MSG = 'Use valid platform values in case statements.'
|
|
38
|
+
RESTRICT_ON_SEND = [:[]].freeze
|
|
38
39
|
|
|
39
40
|
def_node_matcher :node_platform?, <<-PATTERN
|
|
40
41
|
(send (send nil? :node) :[] (str "platform") )
|
|
@@ -55,7 +56,7 @@ module RuboCop
|
|
|
55
56
|
range = range_with_surrounding_comma(range_with_surrounding_space(range: con.loc.expression, side: :left), :both)
|
|
56
57
|
corrector.remove(range)
|
|
57
58
|
else
|
|
58
|
-
corrector.replace(con
|
|
59
|
+
corrector.replace(con, "'#{new_value}'")
|
|
59
60
|
end
|
|
60
61
|
end
|
|
61
62
|
end
|
|
@@ -43,7 +43,7 @@ module RuboCop
|
|
|
43
43
|
def on_send(node)
|
|
44
44
|
non_lazy_node_attribute_default?(node) do |default|
|
|
45
45
|
add_offense(default, message: MSG, severity: :refactor) do |corrector|
|
|
46
|
-
corrector.replace(default
|
|
46
|
+
corrector.replace(default, "lazy { #{default.source} }")
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright:: Copyright 2020, Chef Software Inc.
|
|
4
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
module RuboCop
|
|
19
|
+
module Cop
|
|
20
|
+
module Chef
|
|
21
|
+
module ChefCorrectness
|
|
22
|
+
# Using `lazy {}` within a resource guard (not_if/only_if) will cause failures and is unnecessary as resource guards are always lazily evaluated.
|
|
23
|
+
#
|
|
24
|
+
# @example
|
|
25
|
+
#
|
|
26
|
+
# # bad
|
|
27
|
+
# template '/etc/foo' do
|
|
28
|
+
# mode '0644'
|
|
29
|
+
# source 'foo.erb'
|
|
30
|
+
# only_if { lazy { ::File.exist?('/etc/foo')} }
|
|
31
|
+
# end
|
|
32
|
+
#
|
|
33
|
+
# # good
|
|
34
|
+
# template '/etc/foo' do
|
|
35
|
+
# mode '0644'
|
|
36
|
+
# source 'foo.erb'
|
|
37
|
+
# only_if { ::File.exist?('/etc/foo') }
|
|
38
|
+
# end
|
|
39
|
+
#
|
|
40
|
+
class LazyInResourceGuard < Base
|
|
41
|
+
extend AutoCorrector
|
|
42
|
+
|
|
43
|
+
MSG = 'Using `lazy {}` within a resource guard (not_if/only_if) will cause failures and is unnecessary as resource guards are always lazily evaluated.'
|
|
44
|
+
|
|
45
|
+
def_node_matcher :lazy_in_guard?, <<-PATTERN
|
|
46
|
+
(block
|
|
47
|
+
(send nil? ${:not_if :only_if})
|
|
48
|
+
(args)
|
|
49
|
+
(block
|
|
50
|
+
(send nil? :lazy)
|
|
51
|
+
(args)
|
|
52
|
+
$(...)
|
|
53
|
+
))
|
|
54
|
+
PATTERN
|
|
55
|
+
|
|
56
|
+
def on_block(node)
|
|
57
|
+
lazy_in_guard?(node) do |type, code|
|
|
58
|
+
add_offense(node, message: MSG, severity: :refactor) do |corrector|
|
|
59
|
+
corrector.replace(node, "#{type} { #{code.source} }")
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -54,9 +54,9 @@ module RuboCop
|
|
|
54
54
|
match_property_in_resource?(:macos_userdefaults, 'type', node) do |type|
|
|
55
55
|
type_val = method_arg_ast_to_string(type)
|
|
56
56
|
return if VALID_VALUES.include?(type_val)
|
|
57
|
-
add_offense(type
|
|
57
|
+
add_offense(type, message: MSG, severity: :refactor) do |corrector|
|
|
58
58
|
next unless INVALID_VALUE_MAP[type_val]
|
|
59
|
-
corrector.replace(type
|
|
59
|
+
corrector.replace(type, "type '#{INVALID_VALUE_MAP[type_val]}'")
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
end
|
|
@@ -39,6 +39,7 @@ module RuboCop
|
|
|
39
39
|
#
|
|
40
40
|
class NodeNormal < Base
|
|
41
41
|
MSG = 'Do not use node.normal. Replace with default/override/force_default/force_override attribute levels.'
|
|
42
|
+
RESTRICT_ON_SEND = [:normal].freeze
|
|
42
43
|
|
|
43
44
|
def_node_matcher :node_normal?, <<-PATTERN
|
|
44
45
|
(send (send _ :node) :normal)
|
|
@@ -39,6 +39,7 @@ module RuboCop
|
|
|
39
39
|
#
|
|
40
40
|
class NodeNormalUnless < Base
|
|
41
41
|
MSG = 'Do not use node.normal_unless. Replace with default/override/force_default/force_override attribute levels.'
|
|
42
|
+
RESTRICT_ON_SEND = [:normal_unless].freeze
|
|
42
43
|
|
|
43
44
|
def_node_matcher :node_normal_unless?, <<-PATTERN
|
|
44
45
|
(send (send _ :node) :normal_unless)
|
|
@@ -30,6 +30,7 @@ module RuboCop
|
|
|
30
30
|
#
|
|
31
31
|
class CookbookUsesNodeSave < Base
|
|
32
32
|
MSG = "Don't use node.save to save partial node data to the Chef Infra Server mid-run unless it's absolutely necessary. Node.save can result in failed Chef Infra runs appearing in search and increases load on the Chef Infra Server."
|
|
33
|
+
RESTRICT_ON_SEND = [:save].freeze
|
|
33
34
|
|
|
34
35
|
def_node_matcher :node_save?, <<-PATTERN
|
|
35
36
|
(send (send nil? :node) :save)
|
|
@@ -53,7 +53,7 @@ module RuboCop
|
|
|
53
53
|
return unless notifies_property.node_parts[2].str_type?
|
|
54
54
|
|
|
55
55
|
add_offense(notifies_property, message: MSG, severity: :refactor) do |corrector|
|
|
56
|
-
corrector.replace(notifies_property.first_argument
|
|
56
|
+
corrector.replace(notifies_property.first_argument,
|
|
57
57
|
":#{notifies_property.node_parts[2].value}")
|
|
58
58
|
end
|
|
59
59
|
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright:: Copyright 2020, Chef Software Inc.
|
|
4
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
module RuboCop
|
|
19
|
+
module Cop
|
|
20
|
+
module Chef
|
|
21
|
+
module ChefCorrectness
|
|
22
|
+
# Resource properties or attributes should always define a type to help users understand the correct allowed values.
|
|
23
|
+
#
|
|
24
|
+
# @example
|
|
25
|
+
#
|
|
26
|
+
# # bad
|
|
27
|
+
# property :size, regex: /^\d+[KMGTP]$/
|
|
28
|
+
# attribute :size, regex: /^\d+[KMGTP]$/
|
|
29
|
+
#
|
|
30
|
+
# # good
|
|
31
|
+
# property :size, String, regex: /^\d+[KMGTP]$/
|
|
32
|
+
# attribute :size, kind_of: String, regex: /^\d+[KMGTP]$/
|
|
33
|
+
#
|
|
34
|
+
class PropertyWithoutType < Base
|
|
35
|
+
MSG = 'Resource properties or attributes should always define a type to help users understand the correct allowed values.'
|
|
36
|
+
RESTRICT_ON_SEND = [:property, :attribute].freeze
|
|
37
|
+
|
|
38
|
+
def_node_matcher :property_without_type?, <<-PATTERN
|
|
39
|
+
(send nil? {:property :attribute}
|
|
40
|
+
(sym _)
|
|
41
|
+
$(hash
|
|
42
|
+
|
|
43
|
+
...
|
|
44
|
+
)?
|
|
45
|
+
)
|
|
46
|
+
PATTERN
|
|
47
|
+
|
|
48
|
+
def on_send(node)
|
|
49
|
+
property_without_type?(node) do |hash_vals|
|
|
50
|
+
return if hash_vals&.first&.keys&.include?(s(:sym, :kind_of))
|
|
51
|
+
|
|
52
|
+
add_offense(node, message: MSG, severity: :refactor)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -45,7 +45,7 @@ module RuboCop
|
|
|
45
45
|
action_node.arguments.each do |action|
|
|
46
46
|
next unless action.source == ':none'
|
|
47
47
|
add_offense(action, message: MSG, severity: :refactor) do |corrector|
|
|
48
|
-
corrector.replace(action
|
|
48
|
+
corrector.replace(action, ':nothing')
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
end
|
|
@@ -41,8 +41,8 @@ module RuboCop
|
|
|
41
41
|
def on_send(node)
|
|
42
42
|
supports_with_constraint?(node) do |ver|
|
|
43
43
|
return if ver.source.include?('.')
|
|
44
|
-
add_offense(ver
|
|
45
|
-
corrector.replace(ver
|
|
44
|
+
add_offense(ver, message: MSG, severity: :refactor) do |corrector|
|
|
45
|
+
corrector.replace(ver, ver.source.gsub(ver.value, (ver.value + '.0')))
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
end
|
|
@@ -45,7 +45,7 @@ module RuboCop
|
|
|
45
45
|
add_offense(prop_node, message: MSG, severity: :warning) do |corrector|
|
|
46
46
|
# make sure to delete leading and trailing {}s that would create invalid ruby syntax
|
|
47
47
|
extracted_val = prop_node.arguments.first.source.gsub(/{|}/, '')
|
|
48
|
-
corrector.replace(prop_node
|
|
48
|
+
corrector.replace(prop_node, "type #{extracted_val}")
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
end
|
|
@@ -79,7 +79,7 @@ module RuboCop
|
|
|
79
79
|
|
|
80
80
|
rewind_resources?(node) do |string|
|
|
81
81
|
add_offense(node, message: MSG, severity: :warning) do |corrector|
|
|
82
|
-
corrector.replace(node
|
|
82
|
+
corrector.replace(node, node.source.gsub(string.to_s, MAPPING[string]))
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
85
|
end
|
|
@@ -88,7 +88,7 @@ module RuboCop
|
|
|
88
88
|
match_property_in_resource?(:chef_gem, 'package_name', node) do |pkg_name|
|
|
89
89
|
next unless pkg_name.arguments&.first&.str_content == 'chef-rewind'
|
|
90
90
|
add_offense(node, message: MSG, severity: :warning) do |corrector|
|
|
91
|
-
corrector.remove(node
|
|
91
|
+
corrector.remove(node) if pkg_name.arguments&.first&.str_content == 'chef-rewind'
|
|
92
92
|
end
|
|
93
93
|
end
|
|
94
94
|
end
|
|
@@ -41,7 +41,7 @@ module RuboCop
|
|
|
41
41
|
extend AutoCorrector
|
|
42
42
|
|
|
43
43
|
MSG = "Don't use deprecated Chef::ShellOut which was removed in Chef Infra Client 13. Use Mixlib::ShellOut instead, which behaves identically."
|
|
44
|
-
|
|
44
|
+
RESTRICT_ON_SEND = [:new, :require, :include].freeze
|
|
45
45
|
|
|
46
46
|
def_node_matcher :include_shellout?, <<-PATTERN
|
|
47
47
|
(send nil? :include
|
|
@@ -75,7 +75,7 @@ module RuboCop
|
|
|
75
75
|
|
|
76
76
|
shellout_new?(node) do
|
|
77
77
|
add_offense(node, message: MSG, severity: :warning) do |corrector|
|
|
78
|
-
corrector.replace(node
|
|
78
|
+
corrector.replace(node, node.source.gsub('Chef::ShellOut', 'Mixlib::ShellOut'))
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
end
|
|
@@ -33,6 +33,7 @@ module RuboCop
|
|
|
33
33
|
class ChefWindowsPlatformHelper < Base
|
|
34
34
|
extend AutoCorrector
|
|
35
35
|
MSG = "Use `platform?('windows')` instead of the legacy `Chef::Platform.windows?` helper."
|
|
36
|
+
RESTRICT_ON_SEND = [:windows?].freeze
|
|
36
37
|
|
|
37
38
|
def_node_matcher :chef_platform_windows?, <<-PATTERN
|
|
38
39
|
(send
|
|
@@ -43,7 +44,7 @@ module RuboCop
|
|
|
43
44
|
def on_send(node)
|
|
44
45
|
chef_platform_windows?(node) do
|
|
45
46
|
add_offense(node, message: MSG, severity: :warning) do |corrector|
|
|
46
|
-
corrector.replace(node
|
|
47
|
+
corrector.replace(node, "platform?('windows')")
|
|
47
48
|
end
|
|
48
49
|
end
|
|
49
50
|
end
|
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
|
47
47
|
return unless node.const_name == 'ChefDK' && (node.parent&.module_type? || node.parent&.const_type?)
|
|
48
48
|
|
|
49
49
|
add_offense(node, message: MSG, severity: :warning) do |corrector|
|
|
50
|
-
corrector.replace(node
|
|
50
|
+
corrector.replace(node, node.source.gsub('ChefDK', 'ChefCLI'))
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
end
|
|
@@ -51,7 +51,7 @@ module RuboCop
|
|
|
51
51
|
def on_const(node)
|
|
52
52
|
chefspec_runner?(node) do
|
|
53
53
|
add_offense(node, message: MSG, severity: :warning) do |corrector|
|
|
54
|
-
corrector.replace(node
|
|
54
|
+
corrector.replace(node, 'ChefSpec::ServerRunner')
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
end
|
|
@@ -32,8 +32,6 @@ module RuboCop
|
|
|
32
32
|
|
|
33
33
|
MSG = "Use currently supported platforms in ChefSpec listed at https://github.com/chefspec/fauxhai/blob/master/PLATFORMS.md. Fauxhai / ChefSpec will perform fuzzy matching on platform version so it's always best to be less specific ie. 10 instead of 10.3"
|
|
34
34
|
|
|
35
|
-
Gem::Dependency.new('', ['~> 1.4.5', '>= 1.4.6']).match?('', '1.4.6')
|
|
36
|
-
|
|
37
35
|
DEPRECATED_MAPPING = {
|
|
38
36
|
'amazon' => {
|
|
39
37
|
'2017.12' => '2',
|
|
@@ -120,7 +118,7 @@ module RuboCop
|
|
|
120
118
|
next unless legacy_chefspec_platform(plat.value, ver.value)
|
|
121
119
|
add_offense(node, message: MSG, severity: :warning) do |corrector|
|
|
122
120
|
if replacement = replacement_string(plat.value, ver.value) # rubocop: disable Lint/AssignmentInCondition
|
|
123
|
-
corrector.replace(ver
|
|
121
|
+
corrector.replace(ver, "'#{replacement}'")
|
|
124
122
|
end
|
|
125
123
|
end
|
|
126
124
|
end
|
|
@@ -44,6 +44,7 @@ module RuboCop
|
|
|
44
44
|
|
|
45
45
|
class DeprecatedPlatformMethods < Base
|
|
46
46
|
MSG = 'Use provider_for_action or provides instead of the deprecated Chef::Platform methods in resources, which were removed in Chef Infra Client 13.'
|
|
47
|
+
RESTRICT_ON_SEND = [:provider_for_resource, :find_provider, :find_provider_for_node, :set].freeze
|
|
47
48
|
|
|
48
49
|
def_node_matcher :platform_method?, <<-PATTERN
|
|
49
50
|
(send (const (const nil? :Chef) :Platform) {:provider_for_resource :find_provider :find_provider_for_node :set} ... )
|
|
@@ -54,7 +54,7 @@ module RuboCop
|
|
|
54
54
|
%w(url keyurl mirrorexpire).each do |prop|
|
|
55
55
|
match_property_in_resource?(:yum_repository, prop, node) do |prop_node|
|
|
56
56
|
add_offense(prop_node, message: MSG, severity: :warning) do |corrector|
|
|
57
|
-
corrector.replace(prop_node
|
|
57
|
+
corrector.replace(prop_node, prop_node.source
|
|
58
58
|
.gsub(/^url/, 'baseurl')
|
|
59
59
|
.gsub(/^keyurl/, 'gpgkey')
|
|
60
60
|
.gsub(/^mirrorexpire/, 'mirror_expire'))
|
|
@@ -41,7 +41,7 @@ module RuboCop
|
|
|
41
41
|
|
|
42
42
|
def on_block(node)
|
|
43
43
|
match_property_in_resource?(:execute, 'path', node) do |offense|
|
|
44
|
-
add_offense(offense
|
|
44
|
+
add_offense(offense, message: MSG, severity: :warning) # @todo: we could probably autocorrect this with some work
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
end
|
|
@@ -49,7 +49,7 @@ module RuboCop
|
|
|
49
49
|
def on_class(node)
|
|
50
50
|
inherits_from_compat_resource?(node) do
|
|
51
51
|
add_offense(node, message: MSG, severity: :warning) do |corrector|
|
|
52
|
-
corrector.replace(node
|
|
52
|
+
corrector.replace(node, node.source.gsub('ChefCompat', 'Chef'))
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
end
|
|
@@ -78,9 +78,9 @@ module RuboCop
|
|
|
78
78
|
else
|
|
79
79
|
"\"#{type.source}[\#{#{name.source}}]\""
|
|
80
80
|
end
|
|
81
|
-
new_val = "#{notify_type} #{action.source}, #{service_value}"
|
|
81
|
+
new_val = +"#{notify_type} #{action.source}, #{service_value}"
|
|
82
82
|
new_val << ", #{timing.first.source}" unless timing.empty?
|
|
83
|
-
corrector.replace(node
|
|
83
|
+
corrector.replace(node, new_val)
|
|
84
84
|
end
|
|
85
85
|
end
|
|
86
86
|
end
|