cookstyle 5.11.0 → 5.12.12
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 +57 -1
- data/lib/cookstyle.rb +1 -0
- data/lib/cookstyle/version.rb +1 -1
- data/lib/rubocop/cop/chef/correctness/name_property_and_required.rb +4 -3
- data/lib/rubocop/cop/chef/correctness/resource_with_nothing_action.rb +52 -0
- data/lib/rubocop/cop/chef/correctness/unnecessary_name_property.rb +2 -2
- data/lib/rubocop/cop/chef/deprecation/cheffile.rb +41 -0
- data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +76 -0
- data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +5 -4
- data/lib/rubocop/cop/chef/effortless/berksfile.rb +41 -0
- data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +49 -0
- data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +10 -1
- data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +51 -0
- data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +55 -0
- data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +52 -0
- data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +13 -7
- data/lib/rubocop/monkey_patches/comment_config.rb +10 -0
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: adfb34aede19f924d41272b3cc06e40fab062c0f64fd17afc721d3cbd51c0c4d
|
4
|
+
data.tar.gz: dfaa41b6b14e96c68750d030571bac640feca178a6f88f57486d2b47774bafb9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c05b9647db46fe529e1d34c149a40fd0012a4245ec8000a835a3c4592048e57846a83de88d2912a1c2d8d944267a96fb4e13cdd317ad3b09d107e1c41b728d9d
|
7
|
+
data.tar.gz: 9d6c334342bb2c9f8fdc2d39818b57e2452dc9a31f364fd27540f56195772664f357bbd88b05a677457ebf8bbfbd3f16ddc47dcc0a39ecb39443d80aea9ad9c3
|
data/config/cookstyle.yml
CHANGED
@@ -78,6 +78,11 @@ ChefStyle/SimplifyPlatformMajorVersionCheck:
|
|
78
78
|
Exclude:
|
79
79
|
- '**/metadata.rb'
|
80
80
|
|
81
|
+
ChefStyle/DefaultCopyrightComments:
|
82
|
+
Description: Cookbook copyright comment headers should be updated for a real person or organization.
|
83
|
+
Enabled: true
|
84
|
+
VersionAdded: '5.12.0'
|
85
|
+
|
81
86
|
###############################
|
82
87
|
# ChefCorrectness: Avoiding potential problems
|
83
88
|
###############################
|
@@ -216,7 +221,7 @@ ChefCorrectness/IncludingOhaiDefaultRecipe:
|
|
216
221
|
- '**/metadata.rb'
|
217
222
|
|
218
223
|
ChefCorrectness/UnnecessaryNameProperty:
|
219
|
-
Description: There is no need to define a property named :name in a resource as Chef Infra defines that property for all resources
|
224
|
+
Description: There is no need to define a property named :name in a resource as Chef Infra defines that property for all resources by default.
|
220
225
|
Enabled: true
|
221
226
|
VersionAdded: '5.8.0'
|
222
227
|
Include:
|
@@ -251,10 +256,26 @@ ChefCorrectness/IncorrectLibraryInjection:
|
|
251
256
|
Include:
|
252
257
|
- '**/libraries/*.rb'
|
253
258
|
|
259
|
+
ChefCorrectness/ResourceWithNothingAction:
|
260
|
+
Description: There is no need to define a :nothing action in your resource as Chef Infra Client provides the :nothing action by default for every resource.
|
261
|
+
Enabled: true
|
262
|
+
VersionAdded: '5.12.0'
|
263
|
+
Include:
|
264
|
+
- '**/libraries/*.rb'
|
265
|
+
- '**/resources/*.rb'
|
266
|
+
- '**/providers/*.rb'
|
267
|
+
|
254
268
|
###############################
|
255
269
|
# ChefDeprecations: Resolving Deprecations that block upgrading Chef Infra Client
|
256
270
|
###############################
|
257
271
|
|
272
|
+
ChefDeprecations/NodeDeepFetch:
|
273
|
+
Description: Do not use the deprecated chef-sugar node.deep_fetch methods
|
274
|
+
Enabled: true
|
275
|
+
VersionAdded: '5.12.0'
|
276
|
+
Exclude:
|
277
|
+
- '**/metadata.rb'
|
278
|
+
|
258
279
|
ChefDeprecations/NodeSet:
|
259
280
|
Description: Do not use the deprecated node.set method
|
260
281
|
Enabled: true
|
@@ -582,6 +603,13 @@ ChefDeprecations/PartialSearchClassUsage:
|
|
582
603
|
Exclude:
|
583
604
|
- '**/metadata.rb'
|
584
605
|
|
606
|
+
ChefDeprecations/Cheffile:
|
607
|
+
Description: The Libarian-Chef depsolving project is no longer maintained and should not be used for cookbook depsolving. Consider using Policyfiles instead.
|
608
|
+
Enabled: true
|
609
|
+
VersionAdded: '5.12.0'
|
610
|
+
Include:
|
611
|
+
- '**/Cheffile'
|
612
|
+
|
585
613
|
###############################
|
586
614
|
# ChefModernize: Cleaning up legacy code and using new built-in resources
|
587
615
|
###############################
|
@@ -856,6 +884,27 @@ ChefModernize/Definitions:
|
|
856
884
|
Include:
|
857
885
|
- '**/definitions/*.rb'
|
858
886
|
|
887
|
+
ChefModernize/IfProvidesDefaultAction:
|
888
|
+
Description: if defined?(default_action) is no longer necessary in Chef Resources as default_action shipped in Chef 10.8.
|
889
|
+
Enabled: true
|
890
|
+
VersionAdded: '5.12.0'
|
891
|
+
Include:
|
892
|
+
- '**/resources/*.rb'
|
893
|
+
- '**/libraries/*.rb'
|
894
|
+
|
895
|
+
ChefModernize/ZipfileResource:
|
896
|
+
Description: Use the archive_file resource built into Chef Infra Client 15+ instead of the zipfile resource from the zipfile cookbook.
|
897
|
+
Enabled: true
|
898
|
+
VersionAdded: '5.12.0'
|
899
|
+
|
900
|
+
ChefModernize/UnnecessaryMixlibShelloutRequire:
|
901
|
+
Description: Chef Infra Client includes mixlib/shellout automatically in resources and providers.
|
902
|
+
Enabled: true
|
903
|
+
VersionAdded: '5.12.0'
|
904
|
+
Include:
|
905
|
+
- '**/resources/*.rb'
|
906
|
+
- '**/providers/*.rb'
|
907
|
+
|
859
908
|
###############################
|
860
909
|
# Migrating to new patterns
|
861
910
|
###############################
|
@@ -902,6 +951,13 @@ ChefEffortless/SearchForEnvironmentsOrRoles:
|
|
902
951
|
Exclude:
|
903
952
|
- '**/metadata.rb'
|
904
953
|
|
954
|
+
ChefEffortless/Berksfile:
|
955
|
+
Description: Policyfiles should be used for cookbook dependency solving instead of a Berkshelf Berksfile.
|
956
|
+
Enabled: true
|
957
|
+
VersionAdded: '5.12.0'
|
958
|
+
Include:
|
959
|
+
- '**/Berksfile'
|
960
|
+
|
905
961
|
#### The base rubocop 0.37 enabled.yml file we started with ####
|
906
962
|
|
907
963
|
Layout/AccessModifierIndentation:
|
data/lib/cookstyle.rb
CHANGED
data/lib/cookstyle/version.rb
CHANGED
@@ -53,6 +53,7 @@ module RuboCop
|
|
53
53
|
#
|
54
54
|
# # bad
|
55
55
|
# property :config_file, String, required: true, name_property: true
|
56
|
+
# attribute :config_file, String, required: true, name_attribute: true
|
56
57
|
#
|
57
58
|
# # good
|
58
59
|
# property :config_file, String, required: true
|
@@ -69,10 +70,10 @@ module RuboCop
|
|
69
70
|
private
|
70
71
|
|
71
72
|
def property_is_name_property?(node)
|
72
|
-
if node.method_name
|
73
|
+
if %i(property attribute).include?(node.method_name)
|
73
74
|
node.arguments.each do |arg|
|
74
75
|
if arg.type == :hash
|
75
|
-
return true if arg.source.match?(/
|
76
|
+
return true if arg.source.match?(/name_(property|attribute):\s*true/)
|
76
77
|
end
|
77
78
|
end
|
78
79
|
false # no required: true found
|
@@ -80,7 +81,7 @@ module RuboCop
|
|
80
81
|
end
|
81
82
|
|
82
83
|
def required_property?(node)
|
83
|
-
if node.method_name
|
84
|
+
if %i(property attribute).include?(node.method_name)
|
84
85
|
node.arguments.each do |arg|
|
85
86
|
if arg.type == :hash
|
86
87
|
return true if arg.source.match?(/required:\s*true/)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2019, Chef Software Inc.
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
module RuboCop
|
18
|
+
module Cop
|
19
|
+
module Chef
|
20
|
+
module ChefCorrectness
|
21
|
+
# Chef Infra Client provides the :nothing action by default for every resource. There is no need to define a :nothing action in your resource code.
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# action :nothing
|
27
|
+
# # let's do nothing
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
class ResourceWithNothingAction < Cop
|
31
|
+
MSG = 'There is no need to define a :nothing action in your resource as Chef Infra Client provides the :nothing action by default for every resource.'.freeze
|
32
|
+
|
33
|
+
def_node_matcher :nothing_action?, <<-PATTERN
|
34
|
+
(block (send nil? :action (sym :nothing)) (args) ... )
|
35
|
+
PATTERN
|
36
|
+
|
37
|
+
def on_block(node)
|
38
|
+
nothing_action?(node) do
|
39
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def autocorrect(node)
|
44
|
+
lambda do |corrector|
|
45
|
+
corrector.remove(node.source_range)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -18,7 +18,7 @@ module RuboCop
|
|
18
18
|
module Cop
|
19
19
|
module Chef
|
20
20
|
module ChefCorrectness
|
21
|
-
# There is no need to define a property named :name in a resource as Chef Infra defines that property for all resources
|
21
|
+
# There is no need to define a property named :name in a resource as Chef Infra defines that property for all resources by default.
|
22
22
|
#
|
23
23
|
# @example
|
24
24
|
#
|
@@ -27,7 +27,7 @@ module RuboCop
|
|
27
27
|
# property :name, String, name_property: true
|
28
28
|
#
|
29
29
|
class UnnecessaryNameProperty < Cop
|
30
|
-
MSG = 'There is no need to define a property named :name in a resource as Chef Infra defines that property for all resources
|
30
|
+
MSG = 'There is no need to define a property named :name in a resource as Chef Infra defines that property for all resources by default.'.freeze
|
31
31
|
|
32
32
|
def_node_matcher :name_property?, <<-PATTERN
|
33
33
|
(send nil? :property (sym :name) (const nil? :String) $...)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: 2019, Chef Software Inc.
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
# The Libarian-Chef depsolving project is no longer maintained and a Cheffile should not be used for cookbook depsolving. Consider using Policyfiles instead. If the Policyfiles model is not compatible with your workflow you may find Bershelf offers a more similar, and still supported, experience to Librarian-Chef.
|
22
|
+
#
|
23
|
+
module ChefDeprecations
|
24
|
+
class Cheffile < Cop
|
25
|
+
include RangeHelp
|
26
|
+
|
27
|
+
MSG = 'The Libarian-Chef depsolving project is no longer maintained and a Cheffile should not be used for cookbook depsolving. Consider using Policyfiles instead.'.freeze
|
28
|
+
|
29
|
+
def investigate(processed_source)
|
30
|
+
return if processed_source.blank?
|
31
|
+
|
32
|
+
# Using range similar to RuboCop::Cop::Naming::Filename (file_name.rb)
|
33
|
+
range = source_range(processed_source.buffer, 1, 0)
|
34
|
+
|
35
|
+
add_offense(nil, location: range, message: MSG, severity: :refactor)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2019, Chef Software Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
module RuboCop
|
17
|
+
module Cop
|
18
|
+
module Chef
|
19
|
+
module ChefDeprecations
|
20
|
+
# The node.deep_fetch method has been removed from Chef-Sugar, and must be replaced by
|
21
|
+
# the node.read API.
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# node.deep_fetch("foo")
|
27
|
+
#
|
28
|
+
# # good
|
29
|
+
# node.read("foo")
|
30
|
+
#
|
31
|
+
# # bad
|
32
|
+
# node.deep_fetch!("foo")
|
33
|
+
#
|
34
|
+
# # good
|
35
|
+
# node.read!("foo")
|
36
|
+
#
|
37
|
+
class NodeDeepFetch < Cop
|
38
|
+
MSG = 'Do not use node.deep_fetch. Replace with node.read to keep identical behavior.'.freeze
|
39
|
+
MSG2 = 'Do not use node.deep_fetch!. Replace with node.read! to keep identical behavior.'.freeze
|
40
|
+
|
41
|
+
def_node_matcher :node_deep_fetch?, <<-PATTERN
|
42
|
+
(send (send _ :node) $:deep_fetch _)
|
43
|
+
PATTERN
|
44
|
+
|
45
|
+
def_node_matcher :node_deep_fetch_bang?, <<-PATTERN
|
46
|
+
(send (send _ :node) $:deep_fetch! _)
|
47
|
+
PATTERN
|
48
|
+
|
49
|
+
def on_send(node)
|
50
|
+
node_deep_fetch?(node) do
|
51
|
+
add_offense(node, location: :selector, message: MSG, severity: :refactor)
|
52
|
+
end
|
53
|
+
|
54
|
+
node_deep_fetch_bang?(node) do
|
55
|
+
add_offense(node, location: :selector, message: MSG2, severity: :refactor)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def autocorrect(node)
|
60
|
+
lambda do |corrector|
|
61
|
+
corrector.replace(node.loc.selector, fix_name(node.method_name))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def fix_name(name)
|
68
|
+
return 'read!' if name == :deep_fetch!
|
69
|
+
return 'read' if name == :deep_fetch
|
70
|
+
name.to_s
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -18,21 +18,22 @@ module RuboCop
|
|
18
18
|
module Cop
|
19
19
|
module Chef
|
20
20
|
module ChefDeprecations
|
21
|
-
# Use 'shell_out!' instead of the legacy 'run_command'
|
21
|
+
# Use 'shell_out!' instead of the legacy 'run_command' or 'run_command_with_systems_locale' helpers for shelling out. The run_command helper was removed in Chef Infra Client 13.
|
22
22
|
#
|
23
23
|
# @example
|
24
24
|
#
|
25
25
|
# # bad
|
26
26
|
# run_command('/bin/foo')
|
27
|
+
# run_command_with_systems_locale('/bin/foo')
|
27
28
|
#
|
28
29
|
# # good
|
29
30
|
# shell_out!('/bin/foo')
|
30
31
|
#
|
31
32
|
class UsesRunCommandHelper < Cop
|
32
|
-
MSG = "Use 'shell_out!' instead of the legacy 'run_command'
|
33
|
+
MSG = "Use 'shell_out!' instead of the legacy 'run_command' or 'run_command_with_systems_locale' helpers for shelling out. The run_command helper was removed in Chef Infra Client 13.".freeze
|
33
34
|
|
34
|
-
def_node_matcher :calls_run_command?, '(send nil? :run_command ...)'
|
35
|
-
def_node_search :defines_run_command?, '(def :run_command ...)'
|
35
|
+
def_node_matcher :calls_run_command?, '(send nil? {:run_command :run_command_with_systems_locale} ...)'
|
36
|
+
def_node_search :defines_run_command?, '(def {:run_command :run_command_with_systems_locale} ...)'
|
36
37
|
|
37
38
|
def on_send(node)
|
38
39
|
calls_run_command?(node) do
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: 2019, Chef Software Inc.
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
# Policyfiles should be used for cookbook dependency solving instead of a Berkshelf Berksfile.
|
22
|
+
#
|
23
|
+
module ChefEffortless
|
24
|
+
class Berksfile < Cop
|
25
|
+
include RangeHelp
|
26
|
+
|
27
|
+
MSG = 'Policyfiles should be used for cookbook dependency solving instead of a Berkshelf Berksfile.'.freeze
|
28
|
+
|
29
|
+
def investigate(processed_source)
|
30
|
+
return if processed_source.blank?
|
31
|
+
|
32
|
+
# Using range similar to RuboCop::Cop::Naming::Filename (file_name.rb)
|
33
|
+
range = source_range(processed_source.buffer, 1, 0)
|
34
|
+
|
35
|
+
add_offense(nil, location: range, message: MSG, severity: :refactor)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: 2019, Chef Software, Inc.
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
module RuboCop
|
18
|
+
module Cop
|
19
|
+
module Chef
|
20
|
+
module ChefModernize
|
21
|
+
# if defined?(default_action) is no longer necessary in Chef Resources as default_action shipped in Chef 10.8.
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# default_action :foo if defined?(default_action)
|
27
|
+
#
|
28
|
+
# # good
|
29
|
+
# default_action :foo
|
30
|
+
#
|
31
|
+
class IfProvidesDefaultAction < Cop
|
32
|
+
MSG = 'if defined?(default_action) is no longer necessary in Chef Resources as default_action shipped in Chef 10.8.'.freeze
|
33
|
+
|
34
|
+
def on_defined?(node)
|
35
|
+
return unless node.arguments.first == s(:send, nil, :default_action)
|
36
|
+
node = node.parent if node.parent.respond_to?(:if?) && node.parent.if? # we want the whole if statement
|
37
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
38
|
+
end
|
39
|
+
|
40
|
+
def autocorrect(node)
|
41
|
+
lambda do |corrector|
|
42
|
+
corrector.replace(node.loc.expression, node.children[1].source)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -26,6 +26,9 @@ module RuboCop
|
|
26
26
|
# # bad
|
27
27
|
# chef_version '>= 13' if respond_to?(:chef_version)
|
28
28
|
# chef_version '>= 13' if defined?(chef_version)
|
29
|
+
# if defined(chef_version)
|
30
|
+
# chef_version '>= 13'
|
31
|
+
# end
|
29
32
|
#
|
30
33
|
# # good
|
31
34
|
# chef_version '>= 13'
|
@@ -50,7 +53,13 @@ module RuboCop
|
|
50
53
|
|
51
54
|
def autocorrect(node)
|
52
55
|
lambda do |corrector|
|
53
|
-
|
56
|
+
# When the if statement is if modifier like `foo if respond_to?(:foo)` then
|
57
|
+
# node.if_branch is the actual method call we want to extract.
|
58
|
+
# If a series of metadata methods are wrapped in an if statement then the content we want
|
59
|
+
# is a block under the if statement and node.parent.if_branch can get us that block
|
60
|
+
node = node.parent unless node.if_type?
|
61
|
+
|
62
|
+
corrector.replace(node.loc.expression, node.if_branch.source)
|
54
63
|
end
|
55
64
|
end
|
56
65
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: 2019, Chef Software Inc.
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
module ChefModernize
|
22
|
+
# Chef Infra Client includes mixlib/shellout automatically in resources and providers.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# # bad
|
27
|
+
# require 'mixlib/shellout'
|
28
|
+
#
|
29
|
+
class UnnecessaryMixlibShelloutRequire < Cop
|
30
|
+
MSG = 'Chef Infra Client includes mixlib/shellout automatically in resources and providers.'.freeze
|
31
|
+
|
32
|
+
def_node_matcher :require_mixlibshellout?, <<-PATTERN
|
33
|
+
(send nil? :require ( str "mixlib/shellout"))
|
34
|
+
PATTERN
|
35
|
+
|
36
|
+
def on_send(node)
|
37
|
+
require_mixlibshellout?(node) do
|
38
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def autocorrect(node)
|
43
|
+
lambda do |corrector|
|
44
|
+
corrector.remove(node.loc.expression)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: 2019, Chef Software, Inc.
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
module ChefModernize
|
22
|
+
# Use the archive_file resource built into Chef Infra Client 15+ instead of the zipfile resource from the zipfile cookbook.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# # bad
|
27
|
+
# zipfile "C:\file.zip" do
|
28
|
+
# path 'C:\expand_here'
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
class ZipfileResource < Cop
|
32
|
+
include RuboCop::Chef::CookbookHelpers
|
33
|
+
|
34
|
+
MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of the zipfile resource from the zipfile cookbook.'.freeze
|
35
|
+
|
36
|
+
def_node_matcher :depends_zipfile?, <<-PATTERN
|
37
|
+
(send nil? :depends (str "zipfile"))
|
38
|
+
PATTERN
|
39
|
+
|
40
|
+
def on_send(node)
|
41
|
+
depends_zipfile?(node) do
|
42
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def on_block(node)
|
47
|
+
match_resource_type?(:zipfile, node) do
|
48
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: 2016-2019, Chef Software, Inc.
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
module ChefStyle
|
22
|
+
# Checks for default copyright comments from the chef generator cookbook command
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# # bad
|
27
|
+
# Copyright:: 2019 YOUR_NAME
|
28
|
+
# Copyright:: 2019 YOUR_COMPANY_NAME
|
29
|
+
#
|
30
|
+
# # good
|
31
|
+
# Copyright:: 2019 Tim Smith
|
32
|
+
# Copyright:: 2019 Chef Software, Inc.
|
33
|
+
#
|
34
|
+
class DefaultCopyrightComments < Cop
|
35
|
+
MSG = 'Cookbook copyright comment headers should be updated for a real person or organization.'.freeze
|
36
|
+
|
37
|
+
def investigate(processed_source)
|
38
|
+
return unless processed_source.ast
|
39
|
+
|
40
|
+
processed_source.comments.each do |comment|
|
41
|
+
next unless comment.inline? # headers aren't in blocks
|
42
|
+
|
43
|
+
if /# (?:Copyright\W*).*YOUR_(NAME|COMPANY_NAME)/.match?(comment.text)
|
44
|
+
add_offense(comment, location: comment.loc.expression, message: MSG, severity: :refactor)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -18,23 +18,27 @@ module RuboCop
|
|
18
18
|
module Cop
|
19
19
|
module Chef
|
20
20
|
module ChefStyle
|
21
|
-
# Use the platform?() and platform_family?() helpers instead of node['platform] == 'foo'
|
22
|
-
# and node['platform_family'] == 'bar'. These helpers are easier to read and can accept multiple
|
23
|
-
# platform arguments, which greatly simplifies complex platform logic.
|
21
|
+
# Use the platform?() and platform_family?() helpers instead of node['platform] == 'foo' and node['platform_family'] == 'bar'. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic.
|
24
22
|
#
|
25
23
|
# @example
|
26
24
|
#
|
27
25
|
# # bad
|
28
26
|
# node['platform'] == 'ubuntu'
|
27
|
+
# node['platform_family'] == 'debian'
|
28
|
+
# node['platform'] != 'ubuntu'
|
29
|
+
# node['platform_family'] != 'debian'
|
29
30
|
#
|
30
31
|
# # good
|
31
32
|
# platform?('ubuntu')
|
33
|
+
# !platform?('ubuntu')
|
34
|
+
# platform_family?('debian')
|
35
|
+
# !platform_family?('debian')
|
32
36
|
#
|
33
37
|
class UsePlatformHelpers < Cop
|
34
|
-
MSG =
|
38
|
+
MSG = "Use platform? and platform_family? helpers for checking a node's platform".freeze
|
35
39
|
|
36
40
|
def_node_matcher :platform_check?, <<-PATTERN
|
37
|
-
( send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) :== $str )
|
41
|
+
( send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) ${:== :!=} $str )
|
38
42
|
PATTERN
|
39
43
|
|
40
44
|
def on_send(node)
|
@@ -45,8 +49,10 @@ module RuboCop
|
|
45
49
|
|
46
50
|
def autocorrect(node)
|
47
51
|
lambda do |corrector|
|
48
|
-
platform_check?(node) do |type, plat|
|
49
|
-
|
52
|
+
platform_check?(node) do |type, operator, plat|
|
53
|
+
corrected_string = operator == :!= ? '!' : ''
|
54
|
+
corrected_string << "#{type.value}?('#{plat.value}')"
|
55
|
+
corrector.replace(node.loc.expression, corrected_string)
|
50
56
|
end
|
51
57
|
end
|
52
58
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module RuboCop
|
2
|
+
# we're monkey patching the config regex to allow for # cookstyle: disable whatever
|
3
|
+
# in addition to the # rubocop: disable whatever that comes with Rubocop
|
4
|
+
class CommentConfig
|
5
|
+
remove_const('COMMENT_DIRECTIVE_REGEXP')
|
6
|
+
COMMENT_DIRECTIVE_REGEXP = Regexp.new(
|
7
|
+
('# (?:rubocop|cookstyle) : ((?:dis|en)able)\b ' + COPS_PATTERN).gsub(' ', '\s*')
|
8
|
+
)
|
9
|
+
end
|
10
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cookstyle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.12.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thom May
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-11-
|
12
|
+
date: 2019-11-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubocop
|
@@ -68,12 +68,14 @@ files:
|
|
68
68
|
- lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb
|
69
69
|
- lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb
|
70
70
|
- lib/rubocop/cop/chef/correctness/resource_with_none_action.rb
|
71
|
+
- lib/rubocop/cop/chef/correctness/resource_with_nothing_action.rb
|
71
72
|
- lib/rubocop/cop/chef/correctness/service_resource.rb
|
72
73
|
- lib/rubocop/cop/chef/correctness/tmp_path.rb
|
73
74
|
- lib/rubocop/cop/chef/correctness/unnecessary_name_property.rb
|
74
75
|
- lib/rubocop/cop/chef/deprecation/attribute_metadata.rb
|
75
76
|
- lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb
|
76
77
|
- lib/rubocop/cop/chef/deprecation/chef_rest.rb
|
78
|
+
- lib/rubocop/cop/chef/deprecation/cheffile.rb
|
77
79
|
- lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb
|
78
80
|
- lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb
|
79
81
|
- lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb
|
@@ -93,6 +95,7 @@ files:
|
|
93
95
|
- lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb
|
94
96
|
- lib/rubocop/cop/chef/deprecation/long_description_metadata.rb
|
95
97
|
- lib/rubocop/cop/chef/deprecation/name_property_and_default.rb
|
98
|
+
- lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb
|
96
99
|
- lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb
|
97
100
|
- lib/rubocop/cop/chef/deprecation/node_set.rb
|
98
101
|
- lib/rubocop/cop/chef/deprecation/node_set_unless.rb
|
@@ -116,6 +119,7 @@ files:
|
|
116
119
|
- lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb
|
117
120
|
- lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb
|
118
121
|
- lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb
|
122
|
+
- lib/rubocop/cop/chef/effortless/berksfile.rb
|
119
123
|
- lib/rubocop/cop/chef/effortless/data_bags.rb
|
120
124
|
- lib/rubocop/cop/chef/effortless/node_environment.rb
|
121
125
|
- lib/rubocop/cop/chef/effortless/node_policygroup.rb
|
@@ -133,6 +137,7 @@ files:
|
|
133
137
|
- lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb
|
134
138
|
- lib/rubocop/cop/chef/modernize/execute_apt_update.rb
|
135
139
|
- lib/rubocop/cop/chef/modernize/execute_tzutil.rb
|
140
|
+
- lib/rubocop/cop/chef/modernize/if_provides_default_action.rb
|
136
141
|
- lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb
|
137
142
|
- lib/rubocop/cop/chef/modernize/libarchive_file.rb
|
138
143
|
- lib/rubocop/cop/chef/modernize/macos_user_defaults.rb
|
@@ -154,18 +159,22 @@ files:
|
|
154
159
|
- lib/rubocop/cop/chef/modernize/seven_zip_archive.rb
|
155
160
|
- lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb
|
156
161
|
- lib/rubocop/cop/chef/modernize/systctl_param_resource.rb
|
162
|
+
- lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb
|
157
163
|
- lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb
|
158
164
|
- lib/rubocop/cop/chef/modernize/windows_default_recipe.rb
|
159
165
|
- lib/rubocop/cop/chef/modernize/windows_version_helper.rb
|
160
166
|
- lib/rubocop/cop/chef/modernize/windows_zipfile.rb
|
167
|
+
- lib/rubocop/cop/chef/modernize/zipfile_resource.rb
|
161
168
|
- lib/rubocop/cop/chef/modernize/zypper_repo.rb
|
162
169
|
- lib/rubocop/cop/chef/style/attribute_keys.rb
|
163
170
|
- lib/rubocop/cop/chef/style/comment_sentence_spacing.rb
|
164
171
|
- lib/rubocop/cop/chef/style/comments_copyright_format.rb
|
172
|
+
- lib/rubocop/cop/chef/style/comments_default_copyright.rb
|
165
173
|
- lib/rubocop/cop/chef/style/comments_format.rb
|
166
174
|
- lib/rubocop/cop/chef/style/file_mode.rb
|
167
175
|
- lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb
|
168
176
|
- lib/rubocop/cop/chef/style/use_platform_helpers.rb
|
177
|
+
- lib/rubocop/monkey_patches/comment_config.rb
|
169
178
|
homepage: https://github.com/chef/cookstyle
|
170
179
|
licenses:
|
171
180
|
- Apache-2.0
|