cookstyle 6.10.2 → 6.11.4
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/config/cookstyle.yml +23 -2
- data/config/disable_all.yml +6 -0
- data/config/upstream.yml +46 -4
- data/lib/cookstyle/version.rb +2 -2
- data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +10 -0
- data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +56 -0
- data/lib/rubocop/cop/chef/modernize/node_init_package.rb +16 -8
- data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +57 -0
- metadata +6 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4593dcbd93b8d0d668e0fe5e5551147db850c38deabcccf698b3f8ea391c281d
|
|
4
|
+
data.tar.gz: ef4557926f01a865f3ced43e0ad7a464659f597f4f6ffc8104c2f978d959324a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e3d3b5ed0ccd193ae9aad8d8e44a03935010a841c3cf551ce070c557f2f27e93ba2ffa2082042741f481ccabb7abf68e83d958ed06e3c5751556b7f0528aa3ae
|
|
7
|
+
data.tar.gz: e48e47c6d27316fe8054ecc45164aedf0385be8d8e8e1077781dd3ef9948ccb756864bb6adad422941f061232f0ca0d3c6c41679166bcf345dfa29fc71f79ed3
|
data/config/cookstyle.yml
CHANGED
|
@@ -161,6 +161,16 @@ ChefStyle/NegatingOnlyIf:
|
|
|
161
161
|
- '**/metadata.rb'
|
|
162
162
|
- '**/Berksfile'
|
|
163
163
|
|
|
164
|
+
ChefStyle/IncludeRecipeWithParentheses:
|
|
165
|
+
Description: There is no need to wrap the recipe in parentheses when using the include_recipe helper
|
|
166
|
+
StyleGuide: '#includerecipewithparentheses'
|
|
167
|
+
VersionAdded: '6.11.0'
|
|
168
|
+
Enabled: true
|
|
169
|
+
Exclude:
|
|
170
|
+
- '**/attributes/*.rb'
|
|
171
|
+
- '**/metadata.rb'
|
|
172
|
+
- '**/Berksfile'
|
|
173
|
+
|
|
164
174
|
###############################
|
|
165
175
|
# ChefCorrectness: Avoiding potential problems
|
|
166
176
|
###############################
|
|
@@ -300,8 +310,9 @@ ChefCorrectness/IncorrectLibraryInjection:
|
|
|
300
310
|
StyleGuide: '#chefcorrectnessincorrectlibraryinjection'
|
|
301
311
|
Enabled: true
|
|
302
312
|
VersionAdded: '5.10.0'
|
|
303
|
-
|
|
304
|
-
- '**/
|
|
313
|
+
Exclude:
|
|
314
|
+
- '**/metadata.rb'
|
|
315
|
+
- '**/Berksfile'
|
|
305
316
|
|
|
306
317
|
ChefCorrectness/InvalidPlatformHelper:
|
|
307
318
|
Description: Pass valid platforms to the platform? helper.
|
|
@@ -1541,6 +1552,16 @@ ChefModernize/ShellOutHelper:
|
|
|
1541
1552
|
- '**/Berksfile'
|
|
1542
1553
|
- '**/libraries/*.rb'
|
|
1543
1554
|
|
|
1555
|
+
ChefModernize/ConditionalUsingTest:
|
|
1556
|
+
Description: Use ::File.exist?('/foo/bar') instead of the slower 'test -f /foo/bar' which requires shelling out.
|
|
1557
|
+
StyleGuide: '#conditionalusingtest'
|
|
1558
|
+
Enabled: true
|
|
1559
|
+
VersionAdded: '6.11.0'
|
|
1560
|
+
Exclude:
|
|
1561
|
+
- '**/metadata.rb'
|
|
1562
|
+
- '**/Berksfile'
|
|
1563
|
+
- '**/attributes/*.rb'
|
|
1564
|
+
|
|
1544
1565
|
###############################
|
|
1545
1566
|
# ChefRedundantCode: Cleanup unnecessary code in your cookbooks regardless of Chef Infra Client release
|
|
1546
1567
|
###############################
|
data/config/disable_all.yml
CHANGED
|
@@ -421,6 +421,8 @@ Naming/VariableNumber:
|
|
|
421
421
|
Enabled: false
|
|
422
422
|
Style/AccessModifierDeclarations:
|
|
423
423
|
Enabled: false
|
|
424
|
+
Style/AccessorGrouping:
|
|
425
|
+
Enabled: false
|
|
424
426
|
Style/Alias:
|
|
425
427
|
Enabled: false
|
|
426
428
|
Style/AndOr:
|
|
@@ -437,6 +439,8 @@ Style/BarePercentLiterals:
|
|
|
437
439
|
Enabled: false
|
|
438
440
|
Style/BeginBlock:
|
|
439
441
|
Enabled: false
|
|
442
|
+
Style/BisectedAttrAccessor:
|
|
443
|
+
Enabled: false
|
|
440
444
|
Style/BlockComments:
|
|
441
445
|
Enabled: false
|
|
442
446
|
Style/BlockDelimiters:
|
|
@@ -567,6 +571,8 @@ Style/MethodCallWithoutArgsParentheses:
|
|
|
567
571
|
Enabled: false
|
|
568
572
|
Style/MethodCallWithArgsParentheses:
|
|
569
573
|
Enabled: false
|
|
574
|
+
Style/RedundantAssignment:
|
|
575
|
+
Enabled: false
|
|
570
576
|
Style/RedundantFetchBlock:
|
|
571
577
|
Enabled: false
|
|
572
578
|
Style/MethodCalledOnDoEndBlock:
|
data/config/upstream.yml
CHANGED
|
@@ -180,6 +180,9 @@ Bundler/OrderedGems:
|
|
|
180
180
|
VersionAdded: '0.46'
|
|
181
181
|
VersionChanged: '0.47'
|
|
182
182
|
TreatCommentsAsGroupSeparators: true
|
|
183
|
+
# By default, "-" and "_" are ignored for order purposes.
|
|
184
|
+
# This can be overridden by setting this parameter to true.
|
|
185
|
+
ConsiderPunctuation: false
|
|
183
186
|
Include:
|
|
184
187
|
- '**/*.gemfile'
|
|
185
188
|
- '**/Gemfile'
|
|
@@ -200,6 +203,9 @@ Gemspec/OrderedDependencies:
|
|
|
200
203
|
Enabled: true
|
|
201
204
|
VersionAdded: '0.51'
|
|
202
205
|
TreatCommentsAsGroupSeparators: true
|
|
206
|
+
# By default, "-" and "_" are ignored for order purposes.
|
|
207
|
+
# This can be overridden by setting this parameter to true.
|
|
208
|
+
ConsiderPunctuation: false
|
|
203
209
|
Include:
|
|
204
210
|
- '**/*.gemspec'
|
|
205
211
|
|
|
@@ -1508,7 +1514,9 @@ Lint/InheritException:
|
|
|
1508
1514
|
Lint/InterpolationCheck:
|
|
1509
1515
|
Description: 'Raise warning for interpolation in single q strs.'
|
|
1510
1516
|
Enabled: true
|
|
1517
|
+
SafeAutoCorrect: false
|
|
1511
1518
|
VersionAdded: '0.50'
|
|
1519
|
+
VersionChanged: '0.87'
|
|
1512
1520
|
|
|
1513
1521
|
Lint/LiteralAsCondition:
|
|
1514
1522
|
Description: 'Checks of literals used in conditions.'
|
|
@@ -1736,6 +1744,7 @@ Lint/SafeNavigationWithEmpty:
|
|
|
1736
1744
|
Description: 'Avoid `foo&.empty?` in conditionals.'
|
|
1737
1745
|
Enabled: true
|
|
1738
1746
|
VersionAdded: '0.62'
|
|
1747
|
+
VersionChanged: '0.87'
|
|
1739
1748
|
|
|
1740
1749
|
Lint/ScriptPermission:
|
|
1741
1750
|
Description: 'Grant script file execute permission.'
|
|
@@ -1902,9 +1911,10 @@ Metrics/BlockLength:
|
|
|
1902
1911
|
Description: 'Avoid long blocks with many lines.'
|
|
1903
1912
|
Enabled: true
|
|
1904
1913
|
VersionAdded: '0.44'
|
|
1905
|
-
VersionChanged: '0.
|
|
1914
|
+
VersionChanged: '0.87'
|
|
1906
1915
|
CountComments: false # count full line comments?
|
|
1907
1916
|
Max: 25
|
|
1917
|
+
CountAsOne: []
|
|
1908
1918
|
ExcludedMethods:
|
|
1909
1919
|
# By default, exclude the `#refine` method, as it tends to have larger
|
|
1910
1920
|
# associated blocks.
|
|
@@ -1925,8 +1935,10 @@ Metrics/ClassLength:
|
|
|
1925
1935
|
Description: 'Avoid classes longer than 100 lines of code.'
|
|
1926
1936
|
Enabled: true
|
|
1927
1937
|
VersionAdded: '0.25'
|
|
1938
|
+
VersionChanged: '0.87'
|
|
1928
1939
|
CountComments: false # count full line comments?
|
|
1929
1940
|
Max: 100
|
|
1941
|
+
CountAsOne: []
|
|
1930
1942
|
|
|
1931
1943
|
# Avoid complex methods.
|
|
1932
1944
|
Metrics/CyclomaticComplexity:
|
|
@@ -1944,17 +1956,20 @@ Metrics/MethodLength:
|
|
|
1944
1956
|
StyleGuide: '#short-methods'
|
|
1945
1957
|
Enabled: true
|
|
1946
1958
|
VersionAdded: '0.25'
|
|
1947
|
-
VersionChanged: '0.
|
|
1959
|
+
VersionChanged: '0.87'
|
|
1948
1960
|
CountComments: false # count full line comments?
|
|
1949
1961
|
Max: 10
|
|
1962
|
+
CountAsOne: []
|
|
1950
1963
|
ExcludedMethods: []
|
|
1951
1964
|
|
|
1952
1965
|
Metrics/ModuleLength:
|
|
1953
1966
|
Description: 'Avoid modules longer than 100 lines of code.'
|
|
1954
1967
|
Enabled: true
|
|
1955
1968
|
VersionAdded: '0.31'
|
|
1969
|
+
VersionChanged: '0.87'
|
|
1956
1970
|
CountComments: false # count full line comments?
|
|
1957
1971
|
Max: 100
|
|
1972
|
+
CountAsOne: []
|
|
1958
1973
|
|
|
1959
1974
|
Metrics/ParameterLists:
|
|
1960
1975
|
Description: 'Avoid parameter lists longer than three or four parameters.'
|
|
@@ -1992,10 +2007,12 @@ Naming/AccessorMethodName:
|
|
|
1992
2007
|
VersionAdded: '0.50'
|
|
1993
2008
|
|
|
1994
2009
|
Naming/AsciiIdentifiers:
|
|
1995
|
-
Description: 'Use only ascii symbols in identifiers.'
|
|
2010
|
+
Description: 'Use only ascii symbols in identifiers and constants.'
|
|
1996
2011
|
StyleGuide: '#english-identifiers'
|
|
1997
2012
|
Enabled: true
|
|
1998
2013
|
VersionAdded: '0.50'
|
|
2014
|
+
VersionChanged: '0.87'
|
|
2015
|
+
AsciiConstants: true
|
|
1999
2016
|
|
|
2000
2017
|
Naming/BinaryOperatorParameterName:
|
|
2001
2018
|
Description: 'When defining binary operators, name the argument other.'
|
|
@@ -2288,6 +2305,17 @@ Style/AccessModifierDeclarations:
|
|
|
2288
2305
|
- group
|
|
2289
2306
|
AllowModifiersOnSymbols: true
|
|
2290
2307
|
|
|
2308
|
+
Style/AccessorGrouping:
|
|
2309
|
+
Description: 'Checks for grouping of accessors in `class` and `module` bodies.'
|
|
2310
|
+
Enabled: 'pending'
|
|
2311
|
+
VersionAdded: '0.87'
|
|
2312
|
+
EnforcedStyle: grouped
|
|
2313
|
+
SupportedStyles:
|
|
2314
|
+
# separated: each accessor goes in a separate statement.
|
|
2315
|
+
# grouped: accessors are grouped into a single statement.
|
|
2316
|
+
- separated
|
|
2317
|
+
- grouped
|
|
2318
|
+
|
|
2291
2319
|
Style/Alias:
|
|
2292
2320
|
Description: 'Use alias instead of alias_method.'
|
|
2293
2321
|
StyleGuide: '#alias-method-lexically'
|
|
@@ -2355,6 +2383,13 @@ Style/BeginBlock:
|
|
|
2355
2383
|
Enabled: true
|
|
2356
2384
|
VersionAdded: '0.9'
|
|
2357
2385
|
|
|
2386
|
+
Style/BisectedAttrAccessor:
|
|
2387
|
+
Description: >-
|
|
2388
|
+
Checks for places where `attr_reader` and `attr_writer`
|
|
2389
|
+
for the same method can be combined into single `attr_accessor`.
|
|
2390
|
+
Enabled: 'pending'
|
|
2391
|
+
VersionAdded: '0.87'
|
|
2392
|
+
|
|
2358
2393
|
Style/BlockComments:
|
|
2359
2394
|
Description: 'Do not use block comments.'
|
|
2360
2395
|
StyleGuide: '#no-block-comments'
|
|
@@ -2729,6 +2764,7 @@ Style/DoubleNegation:
|
|
|
2729
2764
|
VersionAdded: '0.19'
|
|
2730
2765
|
VersionChanged: '0.84'
|
|
2731
2766
|
EnforcedStyle: allowed_in_returns
|
|
2767
|
+
SafeAutoCorrect: false
|
|
2732
2768
|
SupportedStyles:
|
|
2733
2769
|
- allowed_in_returns
|
|
2734
2770
|
- forbidden
|
|
@@ -2995,6 +3031,7 @@ Style/IfUnlessModifierOfIfUnless:
|
|
|
2995
3031
|
Avoid modifier if/unless usage on conditionals.
|
|
2996
3032
|
Enabled: true
|
|
2997
3033
|
VersionAdded: '0.39'
|
|
3034
|
+
VersionChanged: '0.87'
|
|
2998
3035
|
|
|
2999
3036
|
Style/IfWithSemicolon:
|
|
3000
3037
|
Description: 'Do not use if x; .... Use the ternary operator instead.'
|
|
@@ -3581,6 +3618,11 @@ Style/RandomWithOffset:
|
|
|
3581
3618
|
Enabled: true
|
|
3582
3619
|
VersionAdded: '0.52'
|
|
3583
3620
|
|
|
3621
|
+
Style/RedundantAssignment:
|
|
3622
|
+
Description: 'Checks for redundant assignment before returning.'
|
|
3623
|
+
Enabled: 'pending'
|
|
3624
|
+
VersionAdded: '0.87'
|
|
3625
|
+
|
|
3584
3626
|
Style/RedundantBegin:
|
|
3585
3627
|
Description: "Don't use begin blocks when they are not needed."
|
|
3586
3628
|
StyleGuide: '#begin-implicit'
|
|
@@ -3924,7 +3966,7 @@ Style/SymbolLiteral:
|
|
|
3924
3966
|
Style/SymbolProc:
|
|
3925
3967
|
Description: 'Use symbols as procs instead of blocks when possible.'
|
|
3926
3968
|
Enabled: true
|
|
3927
|
-
|
|
3969
|
+
Safe: false
|
|
3928
3970
|
VersionAdded: '0.26'
|
|
3929
3971
|
VersionChanged: '0.64'
|
|
3930
3972
|
# A list of method names to be ignored by the check.
|
data/lib/cookstyle/version.rb
CHANGED
|
@@ -25,6 +25,8 @@ module RuboCop
|
|
|
25
25
|
# # bad
|
|
26
26
|
# ::Chef::Recipe.send(:include, Filebeat::Helpers)
|
|
27
27
|
# ::Chef::Provider.send(:include, Filebeat::Helpers)
|
|
28
|
+
# ::Chef::Recipe.include Filebeat::Helpers
|
|
29
|
+
# ::Chef::Provider.include Filebeat::Helpers
|
|
28
30
|
#
|
|
29
31
|
# # good
|
|
30
32
|
# ::Chef::DSL::Recipe.send(:include, Filebeat::Helpers) # covers previous Recipe & Provider classes
|
|
@@ -36,10 +38,18 @@ module RuboCop
|
|
|
36
38
|
(send (const (const (cbase) :Chef) {:Recipe :Provider}) :send (sym :include) ... )
|
|
37
39
|
PATTERN
|
|
38
40
|
|
|
41
|
+
def_node_matcher :legacy_class_includes?, <<-PATTERN
|
|
42
|
+
(send (const (const (cbase) :Chef) {:Recipe :Provider}) :include ... )
|
|
43
|
+
PATTERN
|
|
44
|
+
|
|
39
45
|
def on_send(node)
|
|
40
46
|
legacy_class_sends?(node) do
|
|
41
47
|
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
|
42
48
|
end
|
|
49
|
+
|
|
50
|
+
legacy_class_includes?(node) do
|
|
51
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
|
52
|
+
end
|
|
43
53
|
end
|
|
44
54
|
|
|
45
55
|
def autocorrect(node)
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
# Use ::File.exist?('/foo/bar') instead of the slower 'test -f /foo/bar' which requires shelling out
|
|
22
|
+
#
|
|
23
|
+
# @example
|
|
24
|
+
#
|
|
25
|
+
# # bad
|
|
26
|
+
# only_if 'test -f /bin/foo'
|
|
27
|
+
#
|
|
28
|
+
# # good
|
|
29
|
+
# only_if { ::File.exist?('bin/foo') }
|
|
30
|
+
#
|
|
31
|
+
class ConditionalUsingTest < Cop
|
|
32
|
+
MSG = "Use ::File.exist?('/foo/bar') instead of the slower 'test -f /foo/bar' which requires shelling out".freeze
|
|
33
|
+
|
|
34
|
+
def_node_matcher :resource_conditional?, <<~PATTERN
|
|
35
|
+
(send nil? {:not_if :only_if} $str )
|
|
36
|
+
PATTERN
|
|
37
|
+
|
|
38
|
+
def on_send(node)
|
|
39
|
+
resource_conditional?(node) do |conditional|
|
|
40
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor) if conditional.value.match?(/^test -[ef] \S*$/)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def autocorrect(node)
|
|
45
|
+
lambda do |corrector|
|
|
46
|
+
resource_conditional?(node) do |conditional|
|
|
47
|
+
new_string = "{ ::File.exist?('#{conditional.value.match(/^test -[ef] (\S*)$/)[1]}') }"
|
|
48
|
+
corrector.replace(conditional.loc.expression, new_string)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -27,18 +27,20 @@ module RuboCop
|
|
|
27
27
|
# ::File.open('/proc/1/comm').chomp == 'systemd'
|
|
28
28
|
# File.open('/proc/1/comm').gets.chomp == 'systemd'
|
|
29
29
|
# File.open('/proc/1/comm').chomp == 'systemd'
|
|
30
|
-
# File.exist?('/proc/1/comm') && File.open('/proc/1/comm').chomp == 'systemd'
|
|
31
|
-
#
|
|
32
30
|
# IO.read('/proc/1/comm').chomp == 'systemd'
|
|
33
31
|
# IO.read('/proc/1/comm').gets.chomp == 'systemd'
|
|
34
32
|
# ::IO.read('/proc/1/comm').chomp == 'systemd'
|
|
35
33
|
# ::IO.read('/proc/1/comm').gets.chomp == 'systemd'
|
|
36
34
|
# File.exist?('/proc/1/comm') && File.open('/proc/1/comm').chomp == 'systemd'
|
|
35
|
+
# only_if 'test -f /bin/systemctl && /bin/systemctl'
|
|
37
36
|
#
|
|
38
37
|
# # good
|
|
39
38
|
# node['init_package'] == 'systemd'
|
|
39
|
+
# only_if { node['init_package'] == 'systemd' }
|
|
40
40
|
#
|
|
41
|
-
class NodeInitPackage <
|
|
41
|
+
class NodeInitPackage < Base
|
|
42
|
+
extend RuboCop::Cop::AutoCorrector
|
|
43
|
+
|
|
42
44
|
MSG = "Use node['init_package'] to check for systemd instead of reading the contents of '/proc/1/comm'".freeze
|
|
43
45
|
|
|
44
46
|
def_node_matcher :file_reads_proc_1_comm?, <<-PATTERN
|
|
@@ -58,18 +60,24 @@ module RuboCop
|
|
|
58
60
|
:== (str "systemd"))
|
|
59
61
|
PATTERN
|
|
60
62
|
|
|
63
|
+
def_node_matcher :file_systemd_conditional?, <<~PATTERN
|
|
64
|
+
(send nil? {:not_if :only_if} $(str "test -f /bin/systemctl && /bin/systemctl"))
|
|
65
|
+
PATTERN
|
|
66
|
+
|
|
61
67
|
def on_send(node)
|
|
62
68
|
compare_init_system?(node) do
|
|
63
69
|
# if there's a ::File.exist?('/proc/1/comm') check first we want to match that as well
|
|
64
70
|
node = node.parent if node.parent&.and_type? && proc_1_comm_exists?(node.parent.conditions.first)
|
|
65
71
|
|
|
66
|
-
add_offense(node
|
|
72
|
+
add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
|
73
|
+
corrector.replace(node, "node['init_package'] == 'systemd'")
|
|
74
|
+
end
|
|
67
75
|
end
|
|
68
|
-
end
|
|
69
76
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
77
|
+
file_systemd_conditional?(node) do |conditional|
|
|
78
|
+
add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
|
79
|
+
corrector.replace(conditional.loc.expression, "{ node['init_package'] == 'systemd' }")
|
|
80
|
+
end
|
|
73
81
|
end
|
|
74
82
|
end
|
|
75
83
|
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: 2020, 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
|
+
# There is no need to wrap the recipe in parentheses when using the include_recipe helper.
|
|
23
|
+
#
|
|
24
|
+
# @example
|
|
25
|
+
#
|
|
26
|
+
# # bad
|
|
27
|
+
# include_recipe('foo::bar')
|
|
28
|
+
#
|
|
29
|
+
# # good
|
|
30
|
+
# include_recipe 'foo::bar'
|
|
31
|
+
#
|
|
32
|
+
class IncludeRecipeWithParentheses < Base
|
|
33
|
+
extend RuboCop::Cop::AutoCorrector
|
|
34
|
+
|
|
35
|
+
MSG = 'There is no need to wrap the recipe in parentheses when using the include_recipe helper'.freeze
|
|
36
|
+
|
|
37
|
+
def_node_matcher :include_recipe?, <<-PATTERN
|
|
38
|
+
(send nil? :include_recipe $(str _))
|
|
39
|
+
PATTERN
|
|
40
|
+
|
|
41
|
+
def on_send(node)
|
|
42
|
+
include_recipe?(node) do |recipe|
|
|
43
|
+
return unless node.parenthesized?
|
|
44
|
+
|
|
45
|
+
# avoid chefspec: expect(chef_run).to include_recipe('foo')
|
|
46
|
+
return if node.parent&.send_type?
|
|
47
|
+
|
|
48
|
+
add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
|
49
|
+
corrector.replace(node.loc.expression, "include_recipe #{recipe.source}")
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
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: 6.
|
|
4
|
+
version: 6.11.4
|
|
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: 2020-07-
|
|
12
|
+
date: 2020-07-09 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rubocop
|
|
@@ -17,14 +17,14 @@ dependencies:
|
|
|
17
17
|
requirements:
|
|
18
18
|
- - '='
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
|
-
version: 0.
|
|
20
|
+
version: 0.87.1
|
|
21
21
|
type: :runtime
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
25
|
- - '='
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
|
-
version: 0.
|
|
27
|
+
version: 0.87.1
|
|
28
28
|
description:
|
|
29
29
|
email:
|
|
30
30
|
- thom@chef.io
|
|
@@ -149,6 +149,7 @@ files:
|
|
|
149
149
|
- lib/rubocop/cop/chef/modernize/chef_14_resources.rb
|
|
150
150
|
- lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb
|
|
151
151
|
- lib/rubocop/cop/chef/modernize/compile_time_resources.rb
|
|
152
|
+
- lib/rubocop/cop/chef/modernize/conditional_using_test.rb
|
|
152
153
|
- lib/rubocop/cop/chef/modernize/cron_manage_resource.rb
|
|
153
154
|
- lib/rubocop/cop/chef/modernize/databag_helpers.rb
|
|
154
155
|
- lib/rubocop/cop/chef/modernize/default_action_initializer.rb
|
|
@@ -239,6 +240,7 @@ files:
|
|
|
239
240
|
- lib/rubocop/cop/chef/style/comments_format.rb
|
|
240
241
|
- lib/rubocop/cop/chef/style/file_mode.rb
|
|
241
242
|
- lib/rubocop/cop/chef/style/immediate_notification_timing.rb
|
|
243
|
+
- lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb
|
|
242
244
|
- lib/rubocop/cop/chef/style/negating_only_if.rb
|
|
243
245
|
- lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb
|
|
244
246
|
- lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb
|