chefstyle 1.2.1 → 1.3.2
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/chefstyle.gemspec +0 -3
- data/config/chefstyle.yml +26 -2
- data/config/disable_all.yml +21 -1
- data/config/upstream.yml +79 -11
- data/lib/chefstyle.rb +10 -2
- data/lib/chefstyle/version.rb +2 -2
- data/lib/rubocop/chef.rb +11 -0
- data/lib/rubocop/cop/chef/ruby/gemspec_require_rubygems.rb +46 -0
- data/lib/rubocop/cop/chef/ruby/require_net_https.rb +54 -0
- data/lib/rubocop/cop/chef/ruby/ruby_27_keyword_argument_warnings.rb +57 -0
- data/lib/rubocop/cop/chef/ruby/unless_defined_require.rb +121 -0
- metadata +9 -46
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 53fa6bb2f80dbe12ea389014623ddc52076c9432383e533f21e5c571e069c14d
|
|
4
|
+
data.tar.gz: 064cdbbf2ba18a12b09e5db1d4a508bab1c27e36a91007e0c5e03aeaed14b36f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7cc1e3008f9624c9868f5d13d4a0010b932c4ce4a41d3b4368405c62b808acf34b712914b580e0334dbdfdb19510da7840866a0a126656ef84eb2a5b829c1f0f
|
|
7
|
+
data.tar.gz: 27707feacf6dcd7e0890d95a07fcab77d44d7bb474f56a5e6f4f1c363161683c48881946b920c660b5fe277bf18a8980cdc67379b458d242406803dd4d0c3be1
|
data/chefstyle.gemspec
CHANGED
|
@@ -18,8 +18,5 @@ Gem::Specification.new do |spec|
|
|
|
18
18
|
spec.executables = %w{chefstyle}
|
|
19
19
|
spec.require_paths = ["lib"]
|
|
20
20
|
|
|
21
|
-
spec.add_development_dependency "bundler"
|
|
22
|
-
spec.add_development_dependency "rake", ">= 12.0"
|
|
23
|
-
spec.add_development_dependency "rspec"
|
|
24
21
|
spec.add_dependency("rubocop", Chefstyle::RUBOCOP_VERSION)
|
|
25
22
|
end
|
data/config/chefstyle.yml
CHANGED
|
@@ -554,7 +554,7 @@ Style/RescueModifier:
|
|
|
554
554
|
Style/AsciiComments:
|
|
555
555
|
Enabled: false
|
|
556
556
|
|
|
557
|
-
# Parens around ternaries often make them more readable and reduces cognitive load over operator
|
|
557
|
+
# Parens around ternaries often make them more readable and reduces cognitive load over operator precedence
|
|
558
558
|
Style/TernaryParentheses:
|
|
559
559
|
Enabled: false
|
|
560
560
|
|
|
@@ -631,4 +631,28 @@ Style/CommentedKeyword:
|
|
|
631
631
|
|
|
632
632
|
# make sure we catch this Ruby 3.0 breaking change now
|
|
633
633
|
Lint/DeprecatedOpenSSLConstant:
|
|
634
|
-
Enabled: true
|
|
634
|
+
Enabled: true
|
|
635
|
+
|
|
636
|
+
ChefRuby/Ruby27KeywordArgumentWarnings:
|
|
637
|
+
Description: Pass options to shell_out helpers without the brackets to avoid Ruby 2.7 deprecation warnings.
|
|
638
|
+
Enabled: true
|
|
639
|
+
VersionAdded: '1.3.0'
|
|
640
|
+
|
|
641
|
+
ChefRuby/UnlessDefinedRequire:
|
|
642
|
+
Description: Workaround RubyGems' slow requires by only running require if the constant isn't already defined
|
|
643
|
+
Enabled: true
|
|
644
|
+
VersionAdded: '1.3.0'
|
|
645
|
+
Include:
|
|
646
|
+
- 'lib/**/*'
|
|
647
|
+
|
|
648
|
+
ChefRuby/GemspecRequireRubygems:
|
|
649
|
+
Description: Rubygems does not need to be required in a Gemspec
|
|
650
|
+
Enabled: true
|
|
651
|
+
VersionAdded: '1.3.0'
|
|
652
|
+
Include:
|
|
653
|
+
- '**/*.gemspec'
|
|
654
|
+
|
|
655
|
+
ChefRuby/RequireNetHttps:
|
|
656
|
+
Description: net/https is deprecated and just includes net/http and openssl. We should include those directly instead
|
|
657
|
+
Enabled: true
|
|
658
|
+
VersionAdded: '1.3.0'
|
data/config/disable_all.yml
CHANGED
|
@@ -53,6 +53,8 @@ Layout/EmptyLineAfterGuardClause:
|
|
|
53
53
|
Enabled: false
|
|
54
54
|
Layout/EmptyLineAfterMagicComment:
|
|
55
55
|
Enabled: false
|
|
56
|
+
Layout/EmptyLineAfterMultilineCondition:
|
|
57
|
+
Enabled: false
|
|
56
58
|
Layout/EmptyLineBetweenDefs:
|
|
57
59
|
Enabled: false
|
|
58
60
|
Layout/EmptyLinesAroundAccessModifier:
|
|
@@ -231,6 +233,8 @@ Lint/DuplicateHashKey:
|
|
|
231
233
|
Enabled: false
|
|
232
234
|
Lint/DuplicateMethods:
|
|
233
235
|
Enabled: false
|
|
236
|
+
Lint/DuplicateRequire:
|
|
237
|
+
Enabled: false
|
|
234
238
|
Lint/DuplicateRescueException:
|
|
235
239
|
Enabled: false
|
|
236
240
|
Lint/EachWithObjectArgument:
|
|
@@ -243,6 +247,8 @@ Lint/EmptyEnsure:
|
|
|
243
247
|
Enabled: false
|
|
244
248
|
Lint/EmptyExpression:
|
|
245
249
|
Enabled: false
|
|
250
|
+
Lint/EmptyFile:
|
|
251
|
+
Enabled: false
|
|
246
252
|
Lint/EmptyInterpolation:
|
|
247
253
|
Enabled: false
|
|
248
254
|
Lint/EmptyWhen:
|
|
@@ -361,6 +367,8 @@ Lint/ToJSON:
|
|
|
361
367
|
Enabled: false
|
|
362
368
|
Lint/TopLevelReturnWithArgument:
|
|
363
369
|
Enabled: false
|
|
370
|
+
Lint/TrailingCommaInAttributeDeclaration:
|
|
371
|
+
Enabled: false
|
|
364
372
|
Lint/UnderscorePrefixedVariableName:
|
|
365
373
|
Enabled: false
|
|
366
374
|
Lint/UnifiedInteger:
|
|
@@ -383,6 +391,8 @@ Lint/UselessAssignment:
|
|
|
383
391
|
Enabled: false
|
|
384
392
|
Lint/UselessElseWithoutRescue:
|
|
385
393
|
Enabled: false
|
|
394
|
+
Lint/UselessMethodDefinition:
|
|
395
|
+
Enabled: false
|
|
386
396
|
Lint/UselessSetterCall:
|
|
387
397
|
Enabled: false
|
|
388
398
|
Lint/Void:
|
|
@@ -477,6 +487,8 @@ Style/ClassCheck:
|
|
|
477
487
|
Enabled: false
|
|
478
488
|
Style/ClassMethods:
|
|
479
489
|
Enabled: false
|
|
490
|
+
Style/ClassMethodsDefinitions:
|
|
491
|
+
Enabled: false
|
|
480
492
|
Style/ClassVars:
|
|
481
493
|
Enabled: false
|
|
482
494
|
Style/CollectionMethods:
|
|
@@ -485,6 +497,8 @@ Style/ColonMethodCall:
|
|
|
485
497
|
Enabled: false
|
|
486
498
|
Style/ColonMethodDefinition:
|
|
487
499
|
Enabled: false
|
|
500
|
+
Style/CombinableLoops:
|
|
501
|
+
Enabled: false
|
|
488
502
|
Style/CommandLiteral:
|
|
489
503
|
Enabled: false
|
|
490
504
|
Style/CommentAnnotation:
|
|
@@ -591,6 +605,8 @@ Style/InlineComment:
|
|
|
591
605
|
Enabled: false
|
|
592
606
|
Style/IpAddresses:
|
|
593
607
|
Enabled: false
|
|
608
|
+
Style/KeywordParametersOrder:
|
|
609
|
+
Enabled: false
|
|
594
610
|
Style/Lambda:
|
|
595
611
|
Enabled: false
|
|
596
612
|
Style/LambdaCall:
|
|
@@ -607,6 +623,10 @@ Style/RedundantFetchBlock:
|
|
|
607
623
|
Enabled: false
|
|
608
624
|
Style/RedundantFileExtensionInRequire:
|
|
609
625
|
Enabled: false
|
|
626
|
+
Style/RedundantSelfAssignment:
|
|
627
|
+
Enabled: false
|
|
628
|
+
Style/SoleNestedConditional:
|
|
629
|
+
Enabled: false
|
|
610
630
|
Style/MethodCalledOnDoEndBlock:
|
|
611
631
|
Enabled: false
|
|
612
632
|
Style/MethodDefParentheses:
|
|
@@ -828,4 +848,4 @@ Security/MarshalLoad:
|
|
|
828
848
|
Security/Open:
|
|
829
849
|
Enabled: false
|
|
830
850
|
Security/YAMLLoad:
|
|
831
|
-
Enabled: false
|
|
851
|
+
Enabled: false
|
data/config/upstream.yml
CHANGED
|
@@ -399,7 +399,6 @@ Layout/DefEndAlignment:
|
|
|
399
399
|
SupportedStylesAlignWith:
|
|
400
400
|
- start_of_line
|
|
401
401
|
- def
|
|
402
|
-
AutoCorrect: false
|
|
403
402
|
Severity: warning
|
|
404
403
|
|
|
405
404
|
Layout/DotPosition:
|
|
@@ -436,6 +435,14 @@ Layout/EmptyLineAfterMagicComment:
|
|
|
436
435
|
Enabled: true
|
|
437
436
|
VersionAdded: '0.49'
|
|
438
437
|
|
|
438
|
+
Layout/EmptyLineAfterMultilineCondition:
|
|
439
|
+
Description: 'Enforces empty line after multiline condition.'
|
|
440
|
+
# This is disabled, because this style is not very common in practice.
|
|
441
|
+
Enabled: false
|
|
442
|
+
VersionAdded: '0.90'
|
|
443
|
+
Reference:
|
|
444
|
+
- https://github.com/airbnb/ruby#multiline-if-newline
|
|
445
|
+
|
|
439
446
|
Layout/EmptyLineBetweenDefs:
|
|
440
447
|
Description: 'Use empty lines between defs.'
|
|
441
448
|
StyleGuide: '#empty-lines-between-methods'
|
|
@@ -555,7 +562,6 @@ Layout/EndAlignment:
|
|
|
555
562
|
- keyword
|
|
556
563
|
- variable
|
|
557
564
|
- start_of_line
|
|
558
|
-
AutoCorrect: false
|
|
559
565
|
Severity: warning
|
|
560
566
|
|
|
561
567
|
Layout/EndOfLine:
|
|
@@ -1427,6 +1433,11 @@ Lint/DuplicateMethods:
|
|
|
1427
1433
|
Enabled: true
|
|
1428
1434
|
VersionAdded: '0.29'
|
|
1429
1435
|
|
|
1436
|
+
Lint/DuplicateRequire:
|
|
1437
|
+
Description: 'Check for duplicate `require`s and `require_relative`s.'
|
|
1438
|
+
Enabled: pending
|
|
1439
|
+
VersionAdded: '0.90'
|
|
1440
|
+
|
|
1430
1441
|
Lint/DuplicateRescueException:
|
|
1431
1442
|
Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.'
|
|
1432
1443
|
Enabled: pending
|
|
@@ -1453,13 +1464,18 @@ Lint/EmptyEnsure:
|
|
|
1453
1464
|
Enabled: true
|
|
1454
1465
|
VersionAdded: '0.10'
|
|
1455
1466
|
VersionChanged: '0.48'
|
|
1456
|
-
AutoCorrect: false
|
|
1457
1467
|
|
|
1458
1468
|
Lint/EmptyExpression:
|
|
1459
1469
|
Description: 'Checks for empty expressions.'
|
|
1460
1470
|
Enabled: true
|
|
1461
1471
|
VersionAdded: '0.45'
|
|
1462
1472
|
|
|
1473
|
+
Lint/EmptyFile:
|
|
1474
|
+
Description: 'Enforces that Ruby source files are not empty.'
|
|
1475
|
+
Enabled: pending
|
|
1476
|
+
AllowComments: true
|
|
1477
|
+
VersionAdded: '0.90'
|
|
1478
|
+
|
|
1463
1479
|
Lint/EmptyInterpolation:
|
|
1464
1480
|
Description: 'Checks for empty string interpolation.'
|
|
1465
1481
|
Enabled: true
|
|
@@ -1856,6 +1872,11 @@ Lint/TopLevelReturnWithArgument:
|
|
|
1856
1872
|
Enabled: 'pending'
|
|
1857
1873
|
VersionAdded: '0.89'
|
|
1858
1874
|
|
|
1875
|
+
Lint/TrailingCommaInAttributeDeclaration:
|
|
1876
|
+
Description: 'This cop checks for trailing commas in attribute declarations.'
|
|
1877
|
+
Enabled: pending
|
|
1878
|
+
VersionAdded: '0.90'
|
|
1879
|
+
|
|
1859
1880
|
Lint/UnderscorePrefixedVariableName:
|
|
1860
1881
|
Description: 'Do not use prefix `_` for a variable that is used.'
|
|
1861
1882
|
Enabled: true
|
|
@@ -1931,6 +1952,13 @@ Lint/UselessElseWithoutRescue:
|
|
|
1931
1952
|
Enabled: true
|
|
1932
1953
|
VersionAdded: '0.17'
|
|
1933
1954
|
|
|
1955
|
+
Lint/UselessMethodDefinition:
|
|
1956
|
+
Description: 'Checks for useless method definitions.'
|
|
1957
|
+
Enabled: pending
|
|
1958
|
+
VersionAdded: '0.90'
|
|
1959
|
+
Safe: false
|
|
1960
|
+
AllowComments: true
|
|
1961
|
+
|
|
1934
1962
|
Lint/UselessSetterCall:
|
|
1935
1963
|
Description: 'Checks for useless setter call to a local variable.'
|
|
1936
1964
|
Enabled: true
|
|
@@ -2591,6 +2619,7 @@ Style/CaseLikeIf:
|
|
|
2591
2619
|
Description: 'This cop identifies places where `if-elsif` constructions can be replaced with `case-when`.'
|
|
2592
2620
|
StyleGuide: '#case-vs-if-else'
|
|
2593
2621
|
Enabled: 'pending'
|
|
2622
|
+
Safe: false
|
|
2594
2623
|
VersionAdded: '0.88'
|
|
2595
2624
|
|
|
2596
2625
|
Style/CharacterLiteral:
|
|
@@ -2608,7 +2637,6 @@ Style/ClassAndModuleChildren:
|
|
|
2608
2637
|
# have the knowledge to perform either operation safely and thus requires
|
|
2609
2638
|
# manual oversight.
|
|
2610
2639
|
SafeAutoCorrect: false
|
|
2611
|
-
AutoCorrect: false
|
|
2612
2640
|
Enabled: true
|
|
2613
2641
|
VersionAdded: '0.19'
|
|
2614
2642
|
#
|
|
@@ -2647,6 +2675,16 @@ Style/ClassMethods:
|
|
|
2647
2675
|
VersionAdded: '0.9'
|
|
2648
2676
|
VersionChanged: '0.20'
|
|
2649
2677
|
|
|
2678
|
+
Style/ClassMethodsDefinitions:
|
|
2679
|
+
Description: 'Enforces using `def self.method_name` or `class << self` to define class methods.'
|
|
2680
|
+
StyleGuide: '#def-self-class-methods'
|
|
2681
|
+
Enabled: false
|
|
2682
|
+
VersionAdded: '0.89'
|
|
2683
|
+
EnforcedStyle: def_self
|
|
2684
|
+
SupportedStyles:
|
|
2685
|
+
- def_self
|
|
2686
|
+
- self_class
|
|
2687
|
+
|
|
2650
2688
|
Style/ClassVars:
|
|
2651
2689
|
Description: 'Avoid the use of class variables.'
|
|
2652
2690
|
StyleGuide: '#no-class-vars'
|
|
@@ -2687,6 +2725,14 @@ Style/ColonMethodDefinition:
|
|
|
2687
2725
|
Enabled: true
|
|
2688
2726
|
VersionAdded: '0.52'
|
|
2689
2727
|
|
|
2728
|
+
Style/CombinableLoops:
|
|
2729
|
+
Description: >-
|
|
2730
|
+
Checks for places where multiple consecutive loops over the same data
|
|
2731
|
+
can be combined into a single loop.
|
|
2732
|
+
Enabled: pending
|
|
2733
|
+
Safe: false
|
|
2734
|
+
VersionAdded: '0.90'
|
|
2735
|
+
|
|
2690
2736
|
Style/CommandLiteral:
|
|
2691
2737
|
Description: 'Use `` or %x around command literals.'
|
|
2692
2738
|
StyleGuide: '#percent-x'
|
|
@@ -3021,7 +3067,7 @@ Style/FrozenStringLiteralComment:
|
|
|
3021
3067
|
# `never` will enforce that the frozen string literal comment does not
|
|
3022
3068
|
# exist in a file.
|
|
3023
3069
|
- never
|
|
3024
|
-
|
|
3070
|
+
SafeAutoCorrect: false
|
|
3025
3071
|
|
|
3026
3072
|
Style/GlobalStdStream:
|
|
3027
3073
|
Description: 'Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.'
|
|
@@ -3101,15 +3147,17 @@ Style/HashSyntax:
|
|
|
3101
3147
|
PreferHashRocketsForNonAlnumEndingSymbols: false
|
|
3102
3148
|
|
|
3103
3149
|
Style/HashTransformKeys:
|
|
3104
|
-
Description: 'Prefer `transform_keys` over `each_with_object`
|
|
3150
|
+
Description: 'Prefer `transform_keys` over `each_with_object`, `map`, or `to_h`.'
|
|
3105
3151
|
Enabled: 'pending'
|
|
3106
3152
|
VersionAdded: '0.80'
|
|
3153
|
+
VersionChanged: '0.90'
|
|
3107
3154
|
Safe: false
|
|
3108
3155
|
|
|
3109
3156
|
Style/HashTransformValues:
|
|
3110
|
-
Description: 'Prefer `transform_values` over `each_with_object`
|
|
3157
|
+
Description: 'Prefer `transform_values` over `each_with_object`, `map`, or `to_h`.'
|
|
3111
3158
|
Enabled: 'pending'
|
|
3112
3159
|
VersionAdded: '0.80'
|
|
3160
|
+
VersionChanged: '0.90'
|
|
3113
3161
|
Safe: false
|
|
3114
3162
|
|
|
3115
3163
|
Style/IdenticalConditionalBranches:
|
|
@@ -3206,6 +3254,12 @@ Style/IpAddresses:
|
|
|
3206
3254
|
- "::"
|
|
3207
3255
|
# :: is a valid IPv6 address, but could potentially be legitimately in code
|
|
3208
3256
|
|
|
3257
|
+
Style/KeywordParametersOrder:
|
|
3258
|
+
Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.'
|
|
3259
|
+
StyleGuide: '#keyword-parameters-order'
|
|
3260
|
+
Enabled: pending
|
|
3261
|
+
VersionAdded: '0.90'
|
|
3262
|
+
|
|
3209
3263
|
Style/Lambda:
|
|
3210
3264
|
Description: 'Use the new lambda literal syntax for single-line blocks.'
|
|
3211
3265
|
StyleGuide: '#lambda-multi-line'
|
|
@@ -3579,7 +3633,6 @@ Style/NumericPredicate:
|
|
|
3579
3633
|
# object. Switching these methods has to be done with knowledge of the types
|
|
3580
3634
|
# of the variables which rubocop doesn't have.
|
|
3581
3635
|
SafeAutoCorrect: false
|
|
3582
|
-
AutoCorrect: false
|
|
3583
3636
|
Enabled: true
|
|
3584
3637
|
VersionAdded: '0.42'
|
|
3585
3638
|
VersionChanged: '0.59'
|
|
@@ -3595,12 +3648,13 @@ Style/NumericPredicate:
|
|
|
3595
3648
|
|
|
3596
3649
|
Style/OneLineConditional:
|
|
3597
3650
|
Description: >-
|
|
3598
|
-
Favor the ternary operator(?:) over
|
|
3599
|
-
if/then/else/end constructs.
|
|
3651
|
+
Favor the ternary operator (?:) or multi-line constructs over
|
|
3652
|
+
single-line if/then/else/end constructs.
|
|
3600
3653
|
StyleGuide: '#ternary-operator'
|
|
3601
3654
|
Enabled: true
|
|
3655
|
+
AlwaysCorrectToMultiline: false
|
|
3602
3656
|
VersionAdded: '0.9'
|
|
3603
|
-
VersionChanged: '0.
|
|
3657
|
+
VersionChanged: '0.90'
|
|
3604
3658
|
|
|
3605
3659
|
Style/OptionHash:
|
|
3606
3660
|
Description: "Don't use option hashes when you can use keyword arguments."
|
|
@@ -3831,6 +3885,12 @@ Style/RedundantSelf:
|
|
|
3831
3885
|
VersionAdded: '0.10'
|
|
3832
3886
|
VersionChanged: '0.13'
|
|
3833
3887
|
|
|
3888
|
+
Style/RedundantSelfAssignment:
|
|
3889
|
+
Description: 'Checks for places where redundant assignments are made for in place modification methods.'
|
|
3890
|
+
Enabled: pending
|
|
3891
|
+
Safe: false
|
|
3892
|
+
VersionAdded: '0.90'
|
|
3893
|
+
|
|
3834
3894
|
Style/RedundantSort:
|
|
3835
3895
|
Description: >-
|
|
3836
3896
|
Use `min` instead of `sort.first`,
|
|
@@ -3983,6 +4043,14 @@ Style/SlicingWithRange:
|
|
|
3983
4043
|
VersionAdded: '0.83'
|
|
3984
4044
|
Safe: false
|
|
3985
4045
|
|
|
4046
|
+
Style/SoleNestedConditional:
|
|
4047
|
+
Description: >-
|
|
4048
|
+
Finds sole nested conditional nodes
|
|
4049
|
+
which can be merged into outer conditional node.
|
|
4050
|
+
Enabled: pending
|
|
4051
|
+
VersionAdded: '0.89'
|
|
4052
|
+
AllowModifier: false
|
|
4053
|
+
|
|
3986
4054
|
Style/SpecialGlobalVars:
|
|
3987
4055
|
Description: 'Avoid Perl-style global variables.'
|
|
3988
4056
|
StyleGuide: '#no-cryptic-perlisms'
|
data/lib/chefstyle.rb
CHANGED
|
@@ -22,9 +22,17 @@ end
|
|
|
22
22
|
# Chefstyle patches the RuboCop tool to set a new default configuration that
|
|
23
23
|
# is vendored in the Chefstyle codebase.
|
|
24
24
|
module Chefstyle
|
|
25
|
-
# @return [String] the absolute path to the main RuboCop configuration YAML
|
|
26
|
-
# file
|
|
25
|
+
# @return [String] the absolute path to the main RuboCop configuration YAML file
|
|
27
26
|
def self.config
|
|
28
27
|
RuboCop::ConfigLoader::DEFAULT_FILE
|
|
29
28
|
end
|
|
30
29
|
end
|
|
30
|
+
|
|
31
|
+
require_relative "rubocop/chef"
|
|
32
|
+
|
|
33
|
+
# Chef custom cops
|
|
34
|
+
Dir.glob(File.dirname(__FILE__) + "/rubocop/cop/chef/**/*.rb") do |file|
|
|
35
|
+
next if File.directory?(file)
|
|
36
|
+
|
|
37
|
+
require_relative file # not actually relative but require_relative is faster
|
|
38
|
+
end
|
data/lib/chefstyle/version.rb
CHANGED
data/lib/rubocop/chef.rb
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module RuboCop
|
|
3
|
+
# RuboCop Chef project namespace
|
|
4
|
+
module Chef
|
|
5
|
+
PROJECT_ROOT = Pathname.new(__dir__).parent.parent.expand_path.freeze
|
|
6
|
+
CONFIG_DEFAULT = PROJECT_ROOT.join("config", "chefstyle.yml").freeze
|
|
7
|
+
CONFIG = YAML.load(CONFIG_DEFAULT.read).freeze
|
|
8
|
+
|
|
9
|
+
private_constant(*constants(false))
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright:: 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
|
+
|
|
19
|
+
module RuboCop
|
|
20
|
+
module Cop
|
|
21
|
+
module Chef
|
|
22
|
+
module ChefRuby
|
|
23
|
+
# Rubygems does not need to be required in a Gemspec. It's already loaded out of the box in Ruby now.
|
|
24
|
+
class GemspecRequireRubygems < Base
|
|
25
|
+
extend RuboCop::Cop::AutoCorrector
|
|
26
|
+
include RangeHelp
|
|
27
|
+
|
|
28
|
+
MSG = "Rubygems does not need to be required in a Gemspec. It's already loaded out of the box in Ruby now."
|
|
29
|
+
|
|
30
|
+
def_node_matcher :require_rubygems?, <<-PATTERN
|
|
31
|
+
(send nil? :require (str "rubygems") )
|
|
32
|
+
PATTERN
|
|
33
|
+
|
|
34
|
+
def on_send(node)
|
|
35
|
+
require_rubygems?(node) do |r|
|
|
36
|
+
node = node.parent if node.parent && node.parent.conditional? # make sure we identify conditionals on the require
|
|
37
|
+
add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
|
38
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright:: 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
|
+
|
|
19
|
+
module RuboCop
|
|
20
|
+
module Cop
|
|
21
|
+
module Chef
|
|
22
|
+
module ChefRuby
|
|
23
|
+
# net/https is deprecated and just includes net/http and openssl. We should include those directly instead.
|
|
24
|
+
#
|
|
25
|
+
# @example
|
|
26
|
+
#
|
|
27
|
+
# # bad
|
|
28
|
+
# require 'net/https'
|
|
29
|
+
#
|
|
30
|
+
# # good
|
|
31
|
+
# require 'net/http'
|
|
32
|
+
# require 'openssl'
|
|
33
|
+
#
|
|
34
|
+
class RequireNetHttps < Base
|
|
35
|
+
extend RuboCop::Cop::AutoCorrector
|
|
36
|
+
|
|
37
|
+
MSG = "net/https is deprecated and just includes net/http and openssl. We should include those directly instead."
|
|
38
|
+
|
|
39
|
+
def_node_matcher :require_net_https?, <<-PATTERN
|
|
40
|
+
(send nil? :require (str "net/https"))
|
|
41
|
+
PATTERN
|
|
42
|
+
|
|
43
|
+
def on_send(node)
|
|
44
|
+
require_net_https?(node) do
|
|
45
|
+
add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
|
46
|
+
corrector.replace(node, %Q{require "net/http"\nrequire "openssl"})
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright:: 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
|
+
|
|
19
|
+
module RuboCop
|
|
20
|
+
module Cop
|
|
21
|
+
module Chef
|
|
22
|
+
module ChefRuby
|
|
23
|
+
# Pass options to shell_out helpers without the brackets to avoid Ruby 2.7 deprecation warnings.
|
|
24
|
+
#
|
|
25
|
+
# @example
|
|
26
|
+
#
|
|
27
|
+
# # bad
|
|
28
|
+
# shell_out!('hostnamectl status', { returns: [0, 1] })
|
|
29
|
+
# shell_out('hostnamectl status', { returns: [0, 1] })
|
|
30
|
+
#
|
|
31
|
+
# # good
|
|
32
|
+
# shell_out!('hostnamectl status', returns: [0, 1])
|
|
33
|
+
# shell_out('hostnamectl status', returns: [0, 1])
|
|
34
|
+
#
|
|
35
|
+
class Ruby27KeywordArgumentWarnings < Base
|
|
36
|
+
extend RuboCop::Cop::AutoCorrector
|
|
37
|
+
|
|
38
|
+
MSG = "Pass options to shell_out helpers without the brackets to avoid Ruby 2.7 deprecation warnings."
|
|
39
|
+
|
|
40
|
+
def_node_matcher :positional_shellout?, <<-PATTERN
|
|
41
|
+
(send nil? {:shell_out :shell_out!} ... $(hash ... ))
|
|
42
|
+
PATTERN
|
|
43
|
+
|
|
44
|
+
def on_send(node)
|
|
45
|
+
positional_shellout?(node) do |h|
|
|
46
|
+
next unless h.braces?
|
|
47
|
+
|
|
48
|
+
add_offense(h.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
|
49
|
+
corrector.replace(h.loc.expression, h.loc.expression.source[1..-2])
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright:: 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
|
+
|
|
19
|
+
module RuboCop
|
|
20
|
+
module Cop
|
|
21
|
+
module Chef
|
|
22
|
+
module ChefRuby
|
|
23
|
+
# Rubygems is VERY slow to require gems even if they've already been loaded. To work around this
|
|
24
|
+
# wrap your require statement with an `if defined?()` check.
|
|
25
|
+
#
|
|
26
|
+
class UnlessDefinedRequire < Base
|
|
27
|
+
extend RuboCop::Cop::AutoCorrector
|
|
28
|
+
|
|
29
|
+
MSG = "Workaround rubygems slow requires by only running require if the class isn't already defined"
|
|
30
|
+
|
|
31
|
+
REQUIRE_TO_CLASS = {
|
|
32
|
+
"addressable/uri" => "Addressable::URI",
|
|
33
|
+
"appscript" => "Appscript",
|
|
34
|
+
"base64" => "Base64",
|
|
35
|
+
"benchmark" => "Benchmark",
|
|
36
|
+
"cgi" => "CGI",
|
|
37
|
+
"chef-utils" => "ChefUtils",
|
|
38
|
+
"csv" => "CSV",
|
|
39
|
+
"digest" => "Digest",
|
|
40
|
+
"digest/md5" => "Digest::MD5",
|
|
41
|
+
"digest/sha1" => "Digest::SHA1",
|
|
42
|
+
"digest/sha2" => "Digest::SHA2",
|
|
43
|
+
"droplet_kit" => "DropletKit",
|
|
44
|
+
"erb" => "Erb",
|
|
45
|
+
"erubis" => "Erubis",
|
|
46
|
+
"etc" => "Etc",
|
|
47
|
+
"excon" => "Excon",
|
|
48
|
+
"faraday" => "Faraday",
|
|
49
|
+
"ffi_yajl" => "FFI_Yajl",
|
|
50
|
+
"ffi" => "FFI",
|
|
51
|
+
"fileutils" => "FileUtils",
|
|
52
|
+
"find" => "Find.find",
|
|
53
|
+
"forwardable" => "Forwardable",
|
|
54
|
+
"ipaddr" => "IPAddr",
|
|
55
|
+
"json" => "JSON",
|
|
56
|
+
"mime/types" => "MIME::Types",
|
|
57
|
+
"mixlib/archive" => "Mixlib::Archive",
|
|
58
|
+
"mixlib/cli" => "Mixlib::CLI",
|
|
59
|
+
"mixlib/config" => "Mixlib::Config",
|
|
60
|
+
"mixlib/shellout" => "Mixlib::ShellOut",
|
|
61
|
+
"multi_json" => "MultiJson",
|
|
62
|
+
"net/http" => "Net::HTTP",
|
|
63
|
+
"net/ssh" => "Net::SSH",
|
|
64
|
+
"netaddr" => "NetAddr",
|
|
65
|
+
"nokogiri" => "Nokogiri",
|
|
66
|
+
"ohai" => "Ohai::System",
|
|
67
|
+
"open-uri" => "OpenURI",
|
|
68
|
+
"openssl" => "OpenSSL",
|
|
69
|
+
"optparse" => "OptionParser",
|
|
70
|
+
"ostruct" => "OpenStruct",
|
|
71
|
+
"pathname" => "Pathname",
|
|
72
|
+
"pp" => "PP",
|
|
73
|
+
"rack" => "Rack",
|
|
74
|
+
"rbconfig" => "RbConfig",
|
|
75
|
+
"retryable" => "Retryable",
|
|
76
|
+
"rexml/document" => "REXML::Document",
|
|
77
|
+
"rubygems" => "Gem",
|
|
78
|
+
"rubygems/package" => "Gem::Package",
|
|
79
|
+
"securerandom" => "SecureRandom",
|
|
80
|
+
"set" => "Set",
|
|
81
|
+
"shellwords" => "Shellwords",
|
|
82
|
+
"singleton" => "Singleton",
|
|
83
|
+
"socket" => "Socket",
|
|
84
|
+
"sslshake" => "SSLShake",
|
|
85
|
+
"stringio" => "StringIO",
|
|
86
|
+
"tempfile" => "Tempfile",
|
|
87
|
+
"thor" => "Thor",
|
|
88
|
+
"time" => "Time.zone_offset",
|
|
89
|
+
"timeout" => "Timeout",
|
|
90
|
+
"tmpdir" => "Dir.mktmpdir",
|
|
91
|
+
"tomlrb" => "Tomlrb",
|
|
92
|
+
"uri" => "URI",
|
|
93
|
+
"webrick" => "WEBrick",
|
|
94
|
+
"win32/registry" => "Win32::Registry",
|
|
95
|
+
"win32ole" => "WIN32OLE",
|
|
96
|
+
"winrm" => "WinRM::Connection",
|
|
97
|
+
"yaml" => "YAML",
|
|
98
|
+
"yard" => "YARD",
|
|
99
|
+
"zip" => "Zip",
|
|
100
|
+
"zlib" => "Zlib",
|
|
101
|
+
}.freeze
|
|
102
|
+
|
|
103
|
+
def_node_matcher :require?, <<-PATTERN
|
|
104
|
+
(send nil? :require (str $_) )
|
|
105
|
+
PATTERN
|
|
106
|
+
|
|
107
|
+
def on_send(node)
|
|
108
|
+
require?(node) do |r|
|
|
109
|
+
next if node.parent && node.parent.conditional? # catch both if and unless
|
|
110
|
+
next unless REQUIRE_TO_CLASS[r]
|
|
111
|
+
|
|
112
|
+
add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
|
113
|
+
corrector.replace(node.loc.expression, "#{node.source} unless defined?(#{REQUIRE_TO_CLASS[r]})")
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
metadata
CHANGED
|
@@ -1,71 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: chefstyle
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2
|
|
4
|
+
version: 1.3.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chef Software, Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-09-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: bundler
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0'
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: rake
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '12.0'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '12.0'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: rspec
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">="
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ">="
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
55
13
|
- !ruby/object:Gem::Dependency
|
|
56
14
|
name: rubocop
|
|
57
15
|
requirement: !ruby/object:Gem::Requirement
|
|
58
16
|
requirements:
|
|
59
17
|
- - '='
|
|
60
18
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 0.
|
|
19
|
+
version: '0.90'
|
|
62
20
|
type: :runtime
|
|
63
21
|
prerelease: false
|
|
64
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
23
|
requirements:
|
|
66
24
|
- - '='
|
|
67
25
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0.
|
|
26
|
+
version: '0.90'
|
|
69
27
|
description:
|
|
70
28
|
email:
|
|
71
29
|
- oss@chef.io
|
|
@@ -83,6 +41,11 @@ files:
|
|
|
83
41
|
- config/upstream.yml
|
|
84
42
|
- lib/chefstyle.rb
|
|
85
43
|
- lib/chefstyle/version.rb
|
|
44
|
+
- lib/rubocop/chef.rb
|
|
45
|
+
- lib/rubocop/cop/chef/ruby/gemspec_require_rubygems.rb
|
|
46
|
+
- lib/rubocop/cop/chef/ruby/require_net_https.rb
|
|
47
|
+
- lib/rubocop/cop/chef/ruby/ruby_27_keyword_argument_warnings.rb
|
|
48
|
+
- lib/rubocop/cop/chef/ruby/unless_defined_require.rb
|
|
86
49
|
homepage: https://github.com/chef/chefstyle
|
|
87
50
|
licenses:
|
|
88
51
|
- Apache-2.0
|