cookstyle 6.1.6 → 6.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b60366fb42569f18aa8b379dff84bcceeb8ecb6b5feb52753cbd9c41575fd2c
4
- data.tar.gz: '098c9ff5b266289457e5127b41eb1662191b4453dc0d31fb9a7955ea1774d995'
3
+ metadata.gz: 3d1707e36ea2cbbcb24bf4fa6c8e4f79fed7ea64fdce34b7776c1888f6ee0871
4
+ data.tar.gz: faa3b6376f8d0022291709084b240ab98ec86f18106a6bb3f2271c5291064635
5
5
  SHA512:
6
- metadata.gz: 94a5cc1725f5264bc1d6abf84e5d8e8bc1e954609ea8ab5a080db7df7db0fc3333ba4d2a53199279f28e3b7567e2f22fe70c1c3564c1b11bd19e6d520790a02c
7
- data.tar.gz: 113a4e827cd32b5c20e2fbc6ee561255d7a3f1508d930851f799aa6e8bc3d4ae850071fb3f302771cc5774ffec9d80bcd1e392e53e0f713d96acc0e41dee4bbb
6
+ metadata.gz: 886ec87ae9bc65b2ddcbc061fda82c55755fe48ca5131574a3291ecf518a273b051a4977642feb8802051aa3e1def3c85e79fc6df4af8756e9e16fa5eccaa51d
7
+ data.tar.gz: 1089873dec1ec43f88eb2b8e9d0a4a059a80a26757b1f6a97b92619aad25f7a3761bdd7e01dd5a389534778ad4c9a03140e83d3828c2643e5c4ff13869f0edc9
@@ -131,6 +131,17 @@ ChefStyle/UnnecessaryOSCheck:
131
131
  Description: Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match 1:1 with OS values. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic.
132
132
  Enabled: true
133
133
  VersionAdded: '5.21.0'
134
+ Exclude:
135
+ - '**/metadata.rb'
136
+ - '**/Berksfile'
137
+
138
+ ChefStyle/NegatingOnlyIf:
139
+ Description: Use not_if instead of only_if that negates the Ruby statement with a !
140
+ VersionAdded: '6.2.0'
141
+ Enabled: true
142
+ Exclude:
143
+ - '**/metadata.rb'
144
+ - '**/Berksfile'
134
145
 
135
146
  ###############################
136
147
  # ChefCorrectness: Avoiding potential problems
@@ -1412,7 +1423,7 @@ ChefRedundantCode/GroupingMetadata:
1412
1423
  - '**/metadata.rb'
1413
1424
 
1414
1425
  ChefRedundantCode/StringPropertyWithNilDefault:
1415
- Description: 'Properties have a nil value by default so there is no need to set the default value to nil.'
1426
+ Description: Properties have a nil value by default so there is no need to set the default value to nil.
1416
1427
  Enabled: true
1417
1428
  VersionAdded: '5.21.0'
1418
1429
  Include:
@@ -1420,13 +1431,22 @@ ChefRedundantCode/StringPropertyWithNilDefault:
1420
1431
  - '**/libraries/*.rb'
1421
1432
 
1422
1433
  ChefRedundantCode/PropertySplatRegex:
1423
- Description: 'There is no need to validate the input of properties in resources using a regex value that will always pass.'
1434
+ Description: There is no need to validate the input of properties in resources using a regex value that will always pass.
1424
1435
  Enabled: true
1425
1436
  VersionAdded: '5.21.0'
1426
1437
  Include:
1427
1438
  - '**/resources/*.rb'
1428
1439
  - '**/libraries/*.rb'
1429
1440
 
1441
+ ChefRedundantCode/UseCreateIfMissing:
1442
+ Description: Use the :create_if_missing action instead of not_if with a ::File.exist(FOO) check.
1443
+ Enabled: true
1444
+ VersionAdded: '6.2.0'
1445
+ Exclude:
1446
+ - '**/metadata.rb'
1447
+ - '**/attributes/*.rb'
1448
+ - '**/Berksfile'
1449
+
1430
1450
  ###############################
1431
1451
  # Migrating to new patterns
1432
1452
  ###############################
@@ -231,8 +231,6 @@ Lint/EmptyInterpolation:
231
231
  Enabled: false
232
232
  Lint/EmptyWhen:
233
233
  Enabled: false
234
- Lint/EndInMethod:
235
- Enabled: false
236
234
  Lint/EnsureReturn:
237
235
  Enabled: false
238
236
  Lint/ErbNewArguments:
@@ -283,6 +281,8 @@ Lint/PercentStringArray:
283
281
  Enabled: false
284
282
  Lint/PercentSymbolArray:
285
283
  Enabled: false
284
+ Lint/RaiseException:
285
+ Enabled: false
286
286
  Lint/RandOne:
287
287
  Enabled: false
288
288
  Lint/RedundantCopDisableDirective:
@@ -325,6 +325,8 @@ Lint/ShadowedException:
325
325
  Enabled: false
326
326
  Lint/ShadowingOuterLocalVariable:
327
327
  Enabled: false
328
+ Lint/StructNewOverride:
329
+ Enabled: false
328
330
  Lint/SuppressedException:
329
331
  Enabled: false
330
332
  Lint/Syntax:
@@ -725,6 +727,8 @@ Style/TrailingCommaInArguments:
725
727
  Enabled: false
726
728
  Style/TrailingCommaInArrayLiteral:
727
729
  Enabled: false
730
+ Style/TrailingCommaInBlockArgs:
731
+ Enabled: false
728
732
  Style/TrailingCommaInHashLiteral:
729
733
  Enabled: false
730
734
  Style/TrailingMethodEndStatement:
@@ -255,10 +255,30 @@ Layout/ArrayAlignment:
255
255
  Description: >-
256
256
  Align the elements of an array literal if they span more than
257
257
  one line.
258
- StyleGuide: '#align-multiline-arrays'
258
+ StyleGuide: '#no-double-indent'
259
259
  Enabled: true
260
260
  VersionAdded: '0.49'
261
261
  VersionChanged: '0.77'
262
+ # Alignment of elements of a multi-line array.
263
+ #
264
+ # The `with_first_parameter` style aligns the following lines along the same
265
+ # column as the first element.
266
+ #
267
+ # array = [1, 2, 3,
268
+ # 4, 5, 6]
269
+ #
270
+ # The `with_fixed_indentation` style aligns the following lines with one
271
+ # level of indentation relative to the start of the line with start of array.
272
+ #
273
+ # array = [1, 2, 3,
274
+ # 4, 5, 6]
275
+ EnforcedStyle: with_first_element
276
+ SupportedStyles:
277
+ - with_first_element
278
+ - with_fixed_indentation
279
+ # By default, the indentation width from Layout/IndentationWidth is used
280
+ # But it can be overridden by setting this parameter
281
+ IndentationWidth: ~
262
282
 
263
283
  Layout/AssignmentIndentation:
264
284
  Description: >-
@@ -1303,6 +1323,7 @@ Lint/BooleanSymbol:
1303
1323
  Description: 'Check for `:true` and `:false` symbols.'
1304
1324
  Enabled: true
1305
1325
  VersionAdded: '0.50'
1326
+ VersionChanged: '0.81'
1306
1327
 
1307
1328
  Lint/CircularArgumentReference:
1308
1329
  Description: "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument."
@@ -1375,11 +1396,6 @@ Lint/EmptyWhen:
1375
1396
  Enabled: true
1376
1397
  VersionAdded: '0.45'
1377
1398
 
1378
- Lint/EndInMethod:
1379
- Description: 'END blocks should not be placed inside method definitions.'
1380
- Enabled: true
1381
- VersionAdded: '0.9'
1382
-
1383
1399
  Lint/EnsureReturn:
1384
1400
  Description: 'Do not use return in an ensure block.'
1385
1401
  StyleGuide: '#no-return-ensure'
@@ -1546,6 +1562,12 @@ Lint/PercentSymbolArray:
1546
1562
  Enabled: true
1547
1563
  VersionAdded: '0.41'
1548
1564
 
1565
+ Lint/RaiseException:
1566
+ Description: Checks for `raise` or `fail` statements which are raising `Exception` class.
1567
+ StyleGuide: '#raise-exception'
1568
+ Enabled: pending
1569
+ VersionAdded: '0.81'
1570
+
1549
1571
  Lint/RandOne:
1550
1572
  Description: >-
1551
1573
  Checks for `rand(1)` calls. Such calls always return `0`
@@ -1574,7 +1596,7 @@ Lint/RedundantRequireStatement:
1574
1596
  Lint/RedundantSplatExpansion:
1575
1597
  Description: 'Checks for splat unnecessarily being called on literals.'
1576
1598
  Enabled: true
1577
- VersionChanged: '0.76'
1599
+ VersionAdded: '0.76'
1578
1600
 
1579
1601
  Lint/RedundantStringCoercion:
1580
1602
  Description: 'Checks for Object#to_s usage in string interpolation.'
@@ -1688,13 +1710,18 @@ Lint/ShadowingOuterLocalVariable:
1688
1710
  Enabled: true
1689
1711
  VersionAdded: '0.9'
1690
1712
 
1713
+ Lint/StructNewOverride:
1714
+ Description: 'Disallow overriding the `Struct` built-in methods via `Struct.new`.'
1715
+ Enabled: pending
1716
+ VersionAdded: '0.81'
1717
+
1691
1718
  Lint/SuppressedException:
1692
1719
  Description: "Don't suppress exceptions."
1693
1720
  StyleGuide: '#dont-hide-exceptions'
1694
1721
  Enabled: true
1695
- AllowComments: false
1722
+ AllowComments: true
1696
1723
  VersionAdded: '0.9'
1697
- VersionChanged: '0.77'
1724
+ VersionChanged: '0.81'
1698
1725
 
1699
1726
  Lint/Syntax:
1700
1727
  Description: 'Checks syntax error.'
@@ -1705,6 +1732,7 @@ Lint/Syntax:
1705
1732
  Lint/ToJSON:
1706
1733
  Description: 'Ensure #to_json includes an optional argument.'
1707
1734
  Enabled: true
1735
+ VersionAdded: '0.66'
1708
1736
 
1709
1737
  Lint/UnderscorePrefixedVariableName:
1710
1738
  Description: 'Do not use prefix `_` for a variable that is used.'
@@ -1736,9 +1764,10 @@ Lint/UnusedMethodArgument:
1736
1764
  StyleGuide: '#underscore-unused-vars'
1737
1765
  Enabled: true
1738
1766
  VersionAdded: '0.21'
1739
- VersionChanged: '0.35'
1767
+ VersionChanged: '0.81'
1740
1768
  AllowUnusedKeywordArguments: false
1741
1769
  IgnoreEmptyMethods: true
1770
+ IgnoreNotImplementedMethods: true
1742
1771
 
1743
1772
  Lint/UriEscapeUnescape:
1744
1773
  Description: >-
@@ -1804,9 +1833,10 @@ Metrics/AbcSize:
1804
1833
  - https://en.wikipedia.org/wiki/ABC_Software_Metric
1805
1834
  Enabled: true
1806
1835
  VersionAdded: '0.27'
1807
- VersionChanged: '0.66'
1836
+ VersionChanged: '0.81'
1808
1837
  # The ABC size is a calculated magnitude, so this number can be an Integer or
1809
1838
  # a Float.
1839
+ IgnoredMethods: []
1810
1840
  Max: 15
1811
1841
 
1812
1842
  Metrics/BlockLength:
@@ -1846,6 +1876,8 @@ Metrics/CyclomaticComplexity:
1846
1876
  of test cases needed to validate a method.
1847
1877
  Enabled: true
1848
1878
  VersionAdded: '0.25'
1879
+ VersionChanged: '0.81'
1880
+ IgnoredMethods: []
1849
1881
  Max: 6
1850
1882
 
1851
1883
  Metrics/MethodLength:
@@ -1879,6 +1911,8 @@ Metrics/PerceivedComplexity:
1879
1911
  human reader.
1880
1912
  Enabled: true
1881
1913
  VersionAdded: '0.25'
1914
+ VersionChanged: '0.81'
1915
+ IgnoredMethods: []
1882
1916
  Max: 7
1883
1917
 
1884
1918
  ################## Migration #############################
@@ -1888,6 +1922,7 @@ Migration/DepartmentName:
1888
1922
  Check that cop names in rubocop:disable (etc) comments are
1889
1923
  given with department name.
1890
1924
  Enabled: true
1925
+ VersionAdded: '0.75'
1891
1926
 
1892
1927
  #################### Naming ##############################
1893
1928
 
@@ -2178,10 +2213,12 @@ Style/AccessModifierDeclarations:
2178
2213
  Description: 'Checks style of how access modifiers are used.'
2179
2214
  Enabled: true
2180
2215
  VersionAdded: '0.57'
2216
+ VersionChanged: '0.81'
2181
2217
  EnforcedStyle: group
2182
2218
  SupportedStyles:
2183
2219
  - inline
2184
2220
  - group
2221
+ AllowModifiersOnSymbols: true
2185
2222
 
2186
2223
  Style/Alias:
2187
2224
  Description: 'Use alias instead of alias_method.'
@@ -2384,7 +2421,7 @@ Style/ClassAndModuleChildren:
2384
2421
  StyleGuide: '#namespace-definition'
2385
2422
  # Moving from compact to nested children requires knowledge of whether the
2386
2423
  # outer parent is a module or a class. Moving from nested to compact requires
2387
- # verification that the outer parent is defined elsewhere. RuboCop does not
2424
+ # verification that the outer parent is defined elsewhere. Rubocop does not
2388
2425
  # have the knowledge to perform either operation safely and thus requires
2389
2426
  # manual oversight.
2390
2427
  SafeAutoCorrect: false
@@ -2435,7 +2472,7 @@ Style/ClassVars:
2435
2472
  # Align with the style guide.
2436
2473
  Style/CollectionMethods:
2437
2474
  Description: 'Preferred collection methods.'
2438
- StyleGuide: '#map-find-select-reduce-size'
2475
+ StyleGuide: '#map-find-select-reduce-include-size'
2439
2476
  Enabled: false
2440
2477
  VersionAdded: '0.9'
2441
2478
  VersionChanged: '0.27'
@@ -2452,6 +2489,7 @@ Style/CollectionMethods:
2452
2489
  inject: 'reduce'
2453
2490
  detect: 'find'
2454
2491
  find_all: 'select'
2492
+ member?: 'include?'
2455
2493
 
2456
2494
  Style/ColonMethodCall:
2457
2495
  Description: 'Do not use :: for method call.'
@@ -2677,6 +2715,7 @@ Style/EndBlock:
2677
2715
  StyleGuide: '#no-END-blocks'
2678
2716
  Enabled: true
2679
2717
  VersionAdded: '0.9'
2718
+ VersionChanged: '0.81'
2680
2719
 
2681
2720
  Style/EvalWithLocation:
2682
2721
  Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.'
@@ -2937,7 +2976,7 @@ Style/LambdaCall:
2937
2976
  Description: 'Use lambda.call(...) instead of lambda.(...).'
2938
2977
  StyleGuide: '#proc-call'
2939
2978
  Enabled: true
2940
- VersionAdded: '0.13.1'
2979
+ VersionAdded: '0.13'
2941
2980
  VersionChanged: '0.14'
2942
2981
  EnforcedStyle: call
2943
2982
  SupportedStyles:
@@ -3067,6 +3106,7 @@ Style/ModuleFunction:
3067
3106
  SupportedStyles:
3068
3107
  - module_function
3069
3108
  - extend_self
3109
+ - forbidden
3070
3110
  Autocorrect: false
3071
3111
  SafeAutoCorrect: false
3072
3112
 
@@ -3806,22 +3846,29 @@ Style/TrailingCommaInArrayLiteral:
3806
3846
  StyleGuide: '#no-trailing-array-commas'
3807
3847
  Enabled: true
3808
3848
  VersionAdded: '0.53'
3849
+ # If `comma`, the cop requires a comma after the last item in an array,
3809
3850
  # but only when each item is on its own line.
3810
3851
  # If `consistent_comma`, the cop requires a comma after the last item of all
3811
- # non-empty array literals.
3852
+ # non-empty, multiline array literals.
3812
3853
  EnforcedStyleForMultiline: no_comma
3813
3854
  SupportedStylesForMultiline:
3814
3855
  - comma
3815
3856
  - consistent_comma
3816
3857
  - no_comma
3817
3858
 
3859
+ Style/TrailingCommaInBlockArgs:
3860
+ Description: 'Checks for useless trailing commas in block arguments.'
3861
+ Enabled: false
3862
+ Safe: false
3863
+ VersionAdded: '0.81'
3864
+
3818
3865
  Style/TrailingCommaInHashLiteral:
3819
3866
  Description: 'Checks for trailing comma in hash literals.'
3820
3867
  Enabled: true
3821
3868
  # If `comma`, the cop requires a comma after the last item in a hash,
3822
3869
  # but only when each item is on its own line.
3823
3870
  # If `consistent_comma`, the cop requires a comma after the last item of all
3824
- # non-empty hash literals.
3871
+ # non-empty, multiline hash literals.
3825
3872
  EnforcedStyleForMultiline: no_comma
3826
3873
  SupportedStylesForMultiline:
3827
3874
  - comma
@@ -1,4 +1,4 @@
1
1
  module Cookstyle
2
- VERSION = "6.1.6".freeze # rubocop: disable Style/StringLiterals
3
- RUBOCOP_VERSION = '0.80.1'.freeze
2
+ VERSION = "6.2.5".freeze # rubocop: disable Style/StringLiterals
3
+ RUBOCOP_VERSION = '0.81.0'.freeze
4
4
  end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright:: Copyright 2019, Chef Software Inc.
2
+ # Copyright:: Copyright 2019-2020, Chef Software Inc.
3
3
  # Author:: Tim Smith (<tsmith@chef.io>)
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,24 +18,22 @@ module RuboCop
18
18
  module Cop
19
19
  module Chef
20
20
  module ChefCorrectness
21
- # Libraries should be injected into the Chef::DSL::Recipe or Chef::DSL::Resource classes and not Recipe/Resource/Provider classes directly.
21
+ # Libraries should be injected into the Chef::DSL::Recipe class and not Chef::Recipe or Chef::Provider classes directly.
22
22
  #
23
23
  # @example
24
24
  #
25
25
  # # bad
26
26
  # ::Chef::Recipe.send(:include, Filebeat::Helpers)
27
27
  # ::Chef::Provider.send(:include, Filebeat::Helpers)
28
- # ::Chef::Resource.send(:include, Filebeat::Helpers)
29
28
  #
30
29
  # # good
31
30
  # ::Chef::DSL::Recipe.send(:include, Filebeat::Helpers) # covers previous Recipe & Provider classes
32
- # ::Chef::DSL::Resource.send(:include, Filebeat::Helpers)
33
31
  #
34
32
  class IncorrectLibraryInjection < Cop
35
- MSG = 'Libraries should be injected into the Chef::DSL::Recipe or Chef::DSL::Resource classes and not Recipe/Resource/Provider classes directly.'.freeze
33
+ MSG = 'Libraries should be injected into the Chef::DSL::Recipe class and not Chef::Recipe or Chef::Provider classes directly.'.freeze
36
34
 
37
35
  def_node_matcher :legacy_class_sends?, <<-PATTERN
38
- (send (const (const (cbase) :Chef) {:Recipe :Provider :Resource}) :send (sym :include) ... )
36
+ (send (const (const (cbase) :Chef) {:Recipe :Provider}) :send (sym :include) ... )
39
37
  PATTERN
40
38
 
41
39
  def on_send(node)
@@ -46,11 +44,7 @@ module RuboCop
46
44
 
47
45
  def autocorrect(node)
48
46
  lambda do |corrector|
49
- new_val = node.source
50
- new_val.gsub!(/Chef::(Provider|Recipe)/, 'Chef::DSL::Recipe')
51
- new_val.gsub!(/Chef::Resource/, 'Chef::DSL::Resource')
52
-
53
- corrector.replace(node.loc.expression, new_val)
47
+ corrector.replace(node.loc.expression, node.source.gsub(/Chef::(Provider|Recipe)/, 'Chef::DSL::Recipe'))
54
48
  end
55
49
  end
56
50
  end
@@ -26,6 +26,10 @@ module RuboCop
26
26
  # depends 'partial_search'
27
27
  #
28
28
  class CookbookDependsOnPartialSearch < Cop
29
+ extend TargetChefVersion
30
+
31
+ minimum_target_chef_version '13.0'
32
+
29
33
  MSG = "Don't depend on the deprecated partial_search cookbook made obsolete by Chef 13".freeze
30
34
 
31
35
  def_node_matcher :depends_partial_search?, <<-PATTERN
@@ -42,6 +42,9 @@ module RuboCop
42
42
  #
43
43
  class DeprecatedYumRepositoryProperties < Cop
44
44
  include RuboCop::Chef::CookbookHelpers
45
+ extend TargetChefVersion
46
+
47
+ minimum_target_chef_version '12.14'
45
48
 
46
49
  MSG = 'With the release of Chef Infra Client 12.14 and the yum cookbook 3.0 several properties in the yum_repository resource were renamed. url -> baseurl, keyurl -> gpgkey, and mirrorexpire -> mirror_expire.'.freeze
47
50
 
@@ -34,6 +34,9 @@ module RuboCop
34
34
  #
35
35
  class LaunchdDeprecatedHashProperty < Cop
36
36
  include RuboCop::Chef::CookbookHelpers
37
+ extend TargetChefVersion
38
+
39
+ minimum_target_chef_version '12.19'
37
40
 
38
41
  MSG = "The launchd resource's hash property was renamed to plist_hash in Chef Infra Client 13+ to avoid conflicts with Ruby's hash class.".freeze
39
42
 
@@ -34,6 +34,9 @@ module RuboCop
34
34
  #
35
35
  class VerifyPropertyUsesFileExpansion < Cop
36
36
  include RuboCop::Chef::CookbookHelpers
37
+ extend TargetChefVersion
38
+
39
+ minimum_target_chef_version '12.5'
37
40
 
38
41
  MSG = "Use the 'path' variable in the verify property and not the 'file' variable which was removed in Chef Infra Client 13.".freeze
39
42
 
@@ -41,6 +41,9 @@ module RuboCop
41
41
  #
42
42
  class WindowsTaskChangeAction < Cop
43
43
  include RuboCop::Chef::CookbookHelpers
44
+ extend TargetChefVersion
45
+
46
+ minimum_target_chef_version '13.0'
44
47
 
45
48
  MSG = 'The :change action in the windows_task resource was removed when windows_task was added to Chef Infra Client 13+. The default action of :create should can now be used to create an update tasks.'.freeze
46
49
 
@@ -0,0 +1,77 @@
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
+ module RuboCop
18
+ module Cop
19
+ module Chef
20
+ module ChefRedundantCode
21
+ # Use the :create_if_missing action instead of not_if with a ::File.exist(FOO) check.
22
+ #
23
+ # @example
24
+ #
25
+ # # bad
26
+ # cookbook_file '/logs/foo/error.log' do
27
+ # source 'error.log'
28
+ # owner 'root'
29
+ # group 'root'
30
+ # mode '0644'
31
+ # not_if { ::File.exists?('/logs/foo/error.log') }
32
+ # end
33
+ #
34
+ # # good
35
+ # cookbook_file '/logs/foo/error.log' do
36
+ # source 'error.log'
37
+ # owner 'root'
38
+ # group 'root'
39
+ # mode '0644'
40
+ # action :create_if_missing
41
+ # end
42
+ #
43
+ class UseCreateIfMissing < Cop
44
+ include RuboCop::Chef::CookbookHelpers
45
+ MSG = 'Use the :create_if_missing action instead of not_if with a ::File.exist(FOO) check.'.freeze
46
+
47
+ def_node_matcher :not_if_file_exist?, <<-PATTERN
48
+ (block (send nil? :not_if) (args) (send (const {nil? (cbase)} :File) {:exist? :exists?} $(str ...)))
49
+ PATTERN
50
+
51
+ def_node_matcher :file_like_resource?, <<-PATTERN
52
+ (block (send nil? {:cookbook_file :file :remote_directory :cron_d :remote_file :template} $str) ... )
53
+ PATTERN
54
+
55
+ def_node_search :create_action?, '(send nil? :action $sym)'
56
+
57
+ def on_block(node)
58
+ not_if_file_exist?(node) do |props|
59
+ file_like_resource?(node.parent.parent) do |resource_blk_name|
60
+ # the not_if file name is the same as the resource name and there's no action defined (it's the default)
61
+ if props == resource_blk_name && create_action?(node.parent.parent).nil?
62
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ def autocorrect(node)
69
+ lambda do |corrector|
70
+ corrector.replace(node.loc.expression, 'action :create_if_missing')
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,67 @@
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
+ module RuboCop
18
+ module Cop
19
+ module Chef
20
+ module ChefStyle
21
+ # Use not_if instead of only_if that negates the Ruby statement with a !
22
+ #
23
+ # @example
24
+ #
25
+ # # bad
26
+ # package 'legacy-sysv-deps' do
27
+ # only_if { !systemd }
28
+ # end
29
+ #
30
+ # # good
31
+ # package 'legacy-sysv-deps' do
32
+ # not_if { systemd }
33
+ # end
34
+ #
35
+ class NegatingOnlyIf < Cop
36
+ MSG = 'Use not_if instead of only_if that negates the Ruby statement with a !'.freeze
37
+
38
+ def_node_matcher :negated_only_if?, <<-PATTERN
39
+ (block
40
+ $(send nil? :only_if)
41
+ (args)
42
+ $(send
43
+ $(...) :!))
44
+ PATTERN
45
+
46
+ def on_block(node)
47
+ negated_only_if?(node) do |_only_if, code|
48
+ # the value was double negated to work around types: ex: !!systemd?
49
+ return if code.descendants.first.negation_method?
50
+
51
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
52
+ end
53
+ end
54
+
55
+ def autocorrect(node)
56
+ negated_only_if?(node) do |only_if, code|
57
+ lambda do |corrector|
58
+ corrector.replace(code.loc.expression, code.source.gsub(/^!/, ''))
59
+ corrector.replace(only_if.source_range, 'not_if')
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ 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.1.6
4
+ version: 6.2.5
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-03-27 00:00:00.000000000 Z
12
+ date: 2020-04-03 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.80.1
20
+ version: 0.81.0
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.80.1
27
+ version: 0.81.0
28
28
  description:
29
29
  email:
30
30
  - thom@chef.io
@@ -212,6 +212,7 @@ files:
212
212
  - lib/rubocop/cop/chef/redundant/suggests_metadata.rb
213
213
  - lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb
214
214
  - lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb
215
+ - lib/rubocop/cop/chef/redundant/use_create_if_missing.rb
215
216
  - lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb
216
217
  - lib/rubocop/cop/chef/sharing/empty_metadata_field.rb
217
218
  - lib/rubocop/cop/chef/sharing/include_property_descriptions.rb
@@ -226,6 +227,7 @@ files:
226
227
  - lib/rubocop/cop/chef/style/comments_format.rb
227
228
  - lib/rubocop/cop/chef/style/file_mode.rb
228
229
  - lib/rubocop/cop/chef/style/immediate_notification_timing.rb
230
+ - lib/rubocop/cop/chef/style/negating_only_if.rb
229
231
  - lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb
230
232
  - lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb
231
233
  - lib/rubocop/cop/chef/style/true_false_resource_properties.rb