chefstyle 1.2.0 → 1.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/chefstyle +1 -1
- data/chefstyle.gemspec +1 -4
- data/config/chefstyle.yml +58 -2
- data/config/disable_all.yml +56 -4
- data/config/upstream.yml +224 -30
- data/lib/chefstyle.rb +11 -3
- data/lib/chefstyle/version.rb +3 -3
- 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 +122 -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: 4c8fc8e2962659e925a493a6f047c5bc497e4a02cc6a2b01f7e0291325030d42
|
4
|
+
data.tar.gz: c0c5b937798636ddf7d098d02d26b3cff23d11f26017e393cfbc33c89031c0e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a5b1c1f423ed919f78bd2438328d42f99afd80eff4929207efd46a0ce588a73524e9ef8d14e1f790b7d0db375abeaf1aca8646395ce4d18345ebb846a8281b1
|
7
|
+
data.tar.gz: 6ae21c6628190f2a371f831a39dfef3277111e2dc3c3c88686151d856b1c96f1bd2c7fbada5b04200948eed557255b94c88851c17b151697e828c5551ddfad99
|
data/bin/chefstyle
CHANGED
data/chefstyle.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
lib = File.expand_path("
|
2
|
+
lib = File.expand_path("lib", __dir__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
4
|
require "chefstyle/version"
|
5
5
|
|
@@ -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,60 @@ 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
|
+
# alert on invalid ruby synatx
|
637
|
+
Lint/Syntax:
|
638
|
+
Enabled: true
|
639
|
+
|
640
|
+
# remove extra requires like 'thread'
|
641
|
+
Lint/RedundantRequireStatement:
|
642
|
+
Enabled: true
|
643
|
+
|
644
|
+
# simplify stripping strings
|
645
|
+
Style/Strip:
|
646
|
+
Enabled: true
|
647
|
+
|
648
|
+
# simplify getting min/max
|
649
|
+
Style/RedundantSort:
|
650
|
+
Enabled: true
|
651
|
+
|
652
|
+
# no need for .rb in requires
|
653
|
+
Style/RedundantFileExtensionInRequire:
|
654
|
+
Enabled: true
|
655
|
+
|
656
|
+
# more code you don't need
|
657
|
+
Style/RedundantCondition:
|
658
|
+
Enabled: true
|
659
|
+
|
660
|
+
# Use __dir__ to simplify things
|
661
|
+
Style/Dir:
|
662
|
+
Enabled: true
|
663
|
+
|
664
|
+
# Use __FILE__ or __dir__ to simplify expand_paths
|
665
|
+
Style/ExpandPathArguments:
|
666
|
+
Enabled: true
|
667
|
+
|
668
|
+
ChefRuby/Ruby27KeywordArgumentWarnings:
|
669
|
+
Description: Pass options to shell_out helpers without the brackets to avoid Ruby 2.7 deprecation warnings.
|
670
|
+
Enabled: true
|
671
|
+
VersionAdded: '1.3.0'
|
672
|
+
|
673
|
+
ChefRuby/UnlessDefinedRequire:
|
674
|
+
Description: Workaround RubyGems' slow requires by only running require if the constant isn't already defined
|
675
|
+
Enabled: true
|
676
|
+
VersionAdded: '1.3.0'
|
677
|
+
Include:
|
678
|
+
- 'lib/**/*'
|
679
|
+
|
680
|
+
ChefRuby/GemspecRequireRubygems:
|
681
|
+
Description: Rubygems does not need to be required in a Gemspec
|
682
|
+
Enabled: true
|
683
|
+
VersionAdded: '1.3.0'
|
684
|
+
Include:
|
685
|
+
- '**/*.gemspec'
|
686
|
+
|
687
|
+
ChefRuby/RequireNetHttps:
|
688
|
+
Description: net/https is deprecated and just includes net/http and openssl. We should include those directly instead
|
689
|
+
Enabled: true
|
690
|
+
VersionAdded: '1.3.0'
|
data/config/disable_all.yml
CHANGED
@@ -25,6 +25,8 @@ Layout/ArrayAlignment:
|
|
25
25
|
Enabled: false
|
26
26
|
Layout/AssignmentIndentation:
|
27
27
|
Enabled: false
|
28
|
+
Layout/BeginEndAlignment:
|
29
|
+
Enabled: false
|
28
30
|
Layout/BlockAlignment:
|
29
31
|
Enabled: false
|
30
32
|
Layout/BlockEndNewline:
|
@@ -53,6 +55,8 @@ Layout/EmptyLineAfterGuardClause:
|
|
53
55
|
Enabled: false
|
54
56
|
Layout/EmptyLineAfterMagicComment:
|
55
57
|
Enabled: false
|
58
|
+
Layout/EmptyLineAfterMultilineCondition:
|
59
|
+
Enabled: false
|
56
60
|
Layout/EmptyLineBetweenDefs:
|
57
61
|
Enabled: false
|
58
62
|
Layout/EmptyLinesAroundAccessModifier:
|
@@ -207,10 +211,14 @@ Lint/AssignmentInCondition:
|
|
207
211
|
Enabled: false
|
208
212
|
Lint/BigDecimalNew:
|
209
213
|
Enabled: false
|
214
|
+
Lint/BinaryOperatorWithIdenticalOperands:
|
215
|
+
Enabled: false
|
210
216
|
Lint/BooleanSymbol:
|
211
217
|
Enabled: false
|
212
218
|
Lint/CircularArgumentReference:
|
213
219
|
Enabled: false
|
220
|
+
Lint/ConstantDefinitionInBlock:
|
221
|
+
Enabled: false
|
214
222
|
Lint/ConstantResolution:
|
215
223
|
Enabled: false
|
216
224
|
Lint/Debugger:
|
@@ -229,14 +237,22 @@ Lint/DuplicateHashKey:
|
|
229
237
|
Enabled: false
|
230
238
|
Lint/DuplicateMethods:
|
231
239
|
Enabled: false
|
240
|
+
Lint/DuplicateRequire:
|
241
|
+
Enabled: false
|
242
|
+
Lint/DuplicateRescueException:
|
243
|
+
Enabled: false
|
232
244
|
Lint/EachWithObjectArgument:
|
233
245
|
Enabled: false
|
234
246
|
Lint/ElseLayout:
|
235
247
|
Enabled: false
|
248
|
+
Lint/EmptyConditionalBody:
|
249
|
+
Enabled: false
|
236
250
|
Lint/EmptyEnsure:
|
237
251
|
Enabled: false
|
238
252
|
Lint/EmptyExpression:
|
239
253
|
Enabled: false
|
254
|
+
Lint/EmptyFile:
|
255
|
+
Enabled: false
|
240
256
|
Lint/EmptyInterpolation:
|
241
257
|
Enabled: false
|
242
258
|
Lint/EmptyWhen:
|
@@ -247,12 +263,16 @@ Lint/ErbNewArguments:
|
|
247
263
|
Enabled: false
|
248
264
|
Lint/FlipFlop:
|
249
265
|
Enabled: false
|
266
|
+
Lint/FloatComparison:
|
267
|
+
Enabled: false
|
250
268
|
Lint/FloatOutOfRange:
|
251
269
|
Enabled: false
|
252
270
|
Lint/FormatParameterMismatch:
|
253
271
|
Enabled: false
|
254
272
|
Lint/HeredocMethodCallPosition:
|
255
273
|
Enabled: false
|
274
|
+
Lint/IdentityComparison:
|
275
|
+
Enabled: false
|
256
276
|
Lint/ImplicitStringConcatenation:
|
257
277
|
Enabled: false
|
258
278
|
Lint/InheritException:
|
@@ -269,6 +289,8 @@ Lint/Loop:
|
|
269
289
|
Enabled: false
|
270
290
|
Lint/MissingCopEnableDirective:
|
271
291
|
Enabled: false
|
292
|
+
Lint/MissingSuper:
|
293
|
+
Enabled: false
|
272
294
|
Lint/MixedRegexpCaptureTypes:
|
273
295
|
Enabled: false
|
274
296
|
Lint/MultipleComparison:
|
@@ -287,6 +309,8 @@ Lint/NumberConversion:
|
|
287
309
|
Enabled: false
|
288
310
|
Lint/OrderedMagicComments:
|
289
311
|
Enabled: false
|
312
|
+
Lint/OutOfRangeRegexpRef:
|
313
|
+
Enabled: false
|
290
314
|
Lint/ParenthesesAsGroupedExpression:
|
291
315
|
Enabled: false
|
292
316
|
Lint/PercentStringArray:
|
@@ -329,6 +353,8 @@ Lint/SafeNavigationWithEmpty:
|
|
329
353
|
Enabled: false
|
330
354
|
Lint/ScriptPermission:
|
331
355
|
Enabled: false
|
356
|
+
Lint/SelfAssignment:
|
357
|
+
Enabled: false
|
332
358
|
Lint/SendWithMixinArgument:
|
333
359
|
Enabled: false
|
334
360
|
Lint/ShadowedArgument:
|
@@ -345,12 +371,18 @@ Lint/Syntax:
|
|
345
371
|
Enabled: false
|
346
372
|
Lint/ToJSON:
|
347
373
|
Enabled: false
|
374
|
+
Lint/TopLevelReturnWithArgument:
|
375
|
+
Enabled: false
|
376
|
+
Lint/TrailingCommaInAttributeDeclaration:
|
377
|
+
Enabled: false
|
348
378
|
Lint/UnderscorePrefixedVariableName:
|
349
379
|
Enabled: false
|
350
380
|
Lint/UnifiedInteger:
|
351
381
|
Enabled: false
|
352
382
|
Lint/UnreachableCode:
|
353
383
|
Enabled: false
|
384
|
+
Lint/UnreachableLoop:
|
385
|
+
Enabled: false
|
354
386
|
Lint/UnusedBlockArgument:
|
355
387
|
Enabled: false
|
356
388
|
Lint/UnusedMethodArgument:
|
@@ -363,12 +395,14 @@ Lint/UselessAccessModifier:
|
|
363
395
|
Enabled: false
|
364
396
|
Lint/UselessAssignment:
|
365
397
|
Enabled: false
|
366
|
-
Lint/UselessComparison:
|
367
|
-
Enabled: false
|
368
398
|
Lint/UselessElseWithoutRescue:
|
369
399
|
Enabled: false
|
400
|
+
Lint/UselessMethodDefinition:
|
401
|
+
Enabled: false
|
370
402
|
Lint/UselessSetterCall:
|
371
403
|
Enabled: false
|
404
|
+
Lint/UselessTimes:
|
405
|
+
Enabled: false
|
372
406
|
Lint/Void:
|
373
407
|
Enabled: false
|
374
408
|
Metrics/CyclomaticComplexity:
|
@@ -461,6 +495,8 @@ Style/ClassCheck:
|
|
461
495
|
Enabled: false
|
462
496
|
Style/ClassMethods:
|
463
497
|
Enabled: false
|
498
|
+
Style/ClassMethodsDefinitions:
|
499
|
+
Enabled: false
|
464
500
|
Style/ClassVars:
|
465
501
|
Enabled: false
|
466
502
|
Style/CollectionMethods:
|
@@ -469,6 +505,8 @@ Style/ColonMethodCall:
|
|
469
505
|
Enabled: false
|
470
506
|
Style/ColonMethodDefinition:
|
471
507
|
Enabled: false
|
508
|
+
Style/CombinableLoops:
|
509
|
+
Enabled: false
|
472
510
|
Style/CommandLiteral:
|
473
511
|
Enabled: false
|
474
512
|
Style/CommentAnnotation:
|
@@ -523,6 +561,8 @@ Style/EvenOdd:
|
|
523
561
|
Enabled: false
|
524
562
|
Style/ExpandPathArguments:
|
525
563
|
Enabled: false
|
564
|
+
Style/ExplicitBlockArgument:
|
565
|
+
Enabled: false
|
526
566
|
Style/ExponentialNotation:
|
527
567
|
Enabled: false
|
528
568
|
Style/FloatDivision:
|
@@ -535,6 +575,8 @@ Style/FormatStringToken:
|
|
535
575
|
Enabled: false
|
536
576
|
Style/FrozenStringLiteralComment:
|
537
577
|
Enabled: false
|
578
|
+
Style/GlobalStdStream:
|
579
|
+
Enabled: false
|
538
580
|
Style/GlobalVars:
|
539
581
|
Enabled: false
|
540
582
|
Style/GuardClause:
|
@@ -571,6 +613,8 @@ Style/InlineComment:
|
|
571
613
|
Enabled: false
|
572
614
|
Style/IpAddresses:
|
573
615
|
Enabled: false
|
616
|
+
Style/KeywordParametersOrder:
|
617
|
+
Enabled: false
|
574
618
|
Style/Lambda:
|
575
619
|
Enabled: false
|
576
620
|
Style/LambdaCall:
|
@@ -587,12 +631,14 @@ Style/RedundantFetchBlock:
|
|
587
631
|
Enabled: false
|
588
632
|
Style/RedundantFileExtensionInRequire:
|
589
633
|
Enabled: false
|
634
|
+
Style/RedundantSelfAssignment:
|
635
|
+
Enabled: false
|
636
|
+
Style/SoleNestedConditional:
|
637
|
+
Enabled: false
|
590
638
|
Style/MethodCalledOnDoEndBlock:
|
591
639
|
Enabled: false
|
592
640
|
Style/MethodDefParentheses:
|
593
641
|
Enabled: false
|
594
|
-
Style/MethodMissingSuper:
|
595
|
-
Enabled: false
|
596
642
|
Style/MinMax:
|
597
643
|
Enabled: false
|
598
644
|
Style/MissingElse:
|
@@ -657,6 +703,8 @@ Style/OptionHash:
|
|
657
703
|
Enabled: false
|
658
704
|
Style/OptionalArguments:
|
659
705
|
Enabled: false
|
706
|
+
Style/OptionalBooleanParameter:
|
707
|
+
Enabled: false
|
660
708
|
Style/ParallelAssignment:
|
661
709
|
Enabled: false
|
662
710
|
Style/ParenthesesAroundCondition:
|
@@ -725,6 +773,8 @@ Style/Send:
|
|
725
773
|
Enabled: false
|
726
774
|
Style/SignalException:
|
727
775
|
Enabled: false
|
776
|
+
Style/SingleArgumentDig:
|
777
|
+
Enabled: false
|
728
778
|
Style/SingleLineBlockParams:
|
729
779
|
Enabled: false
|
730
780
|
Style/SingleLineMethods:
|
@@ -737,6 +787,8 @@ Style/StabbyLambdaParentheses:
|
|
737
787
|
Enabled: false
|
738
788
|
Style/StderrPuts:
|
739
789
|
Enabled: false
|
790
|
+
Style/StringConcatenation:
|
791
|
+
Enabled: false
|
740
792
|
Style/StringHashKeys:
|
741
793
|
Enabled: false
|
742
794
|
Style/StringLiterals:
|
data/config/upstream.yml
CHANGED
@@ -117,6 +117,8 @@ AllCops:
|
|
117
117
|
# CacheRootDirectory is ~ (nil), which it is by default, the root will be
|
118
118
|
# taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if
|
119
119
|
# `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`.
|
120
|
+
# The CacheRootDirectory can be overwritten by passing the `--cache-root` command
|
121
|
+
# line option or by setting `$RUBOCOP_CACHE_ROOT` environment variable.
|
120
122
|
CacheRootDirectory: ~
|
121
123
|
# It is possible for a malicious user to know the location of RuboCop's cache
|
122
124
|
# directory by looking at CacheRootDirectory, and create a symlink in its
|
@@ -210,9 +212,10 @@ Gemspec/OrderedDependencies:
|
|
210
212
|
- '**/*.gemspec'
|
211
213
|
|
212
214
|
Gemspec/RequiredRubyVersion:
|
213
|
-
Description: 'Checks that `required_ruby_version` of gemspec and `TargetRubyVersion` of .rubocop.yml
|
215
|
+
Description: 'Checks that `required_ruby_version` of gemspec is specified and equal to `TargetRubyVersion` of .rubocop.yml.'
|
214
216
|
Enabled: true
|
215
217
|
VersionAdded: '0.52'
|
218
|
+
VersionChanged: '0.89'
|
216
219
|
Include:
|
217
220
|
- '**/*.gemspec'
|
218
221
|
|
@@ -308,6 +311,19 @@ Layout/AssignmentIndentation:
|
|
308
311
|
# But it can be overridden by setting this parameter
|
309
312
|
IndentationWidth: ~
|
310
313
|
|
314
|
+
Layout/BeginEndAlignment:
|
315
|
+
Description: 'Align ends corresponding to begins correctly.'
|
316
|
+
Enabled: pending
|
317
|
+
VersionAdded: '0.91'
|
318
|
+
# The value `start_of_line` means that `end` should be aligned the start of the line
|
319
|
+
# where the `begin` keyword is.
|
320
|
+
# The value `begin` means that `end` should be aligned with the `begin` keyword.
|
321
|
+
EnforcedStyleAlignWith: start_of_line
|
322
|
+
SupportedStylesAlignWith:
|
323
|
+
- start_of_line
|
324
|
+
- begin
|
325
|
+
Severity: warning
|
326
|
+
|
311
327
|
Layout/BlockAlignment:
|
312
328
|
Description: 'Align block ends correctly.'
|
313
329
|
Enabled: true
|
@@ -398,7 +414,6 @@ Layout/DefEndAlignment:
|
|
398
414
|
SupportedStylesAlignWith:
|
399
415
|
- start_of_line
|
400
416
|
- def
|
401
|
-
AutoCorrect: false
|
402
417
|
Severity: warning
|
403
418
|
|
404
419
|
Layout/DotPosition:
|
@@ -435,6 +450,14 @@ Layout/EmptyLineAfterMagicComment:
|
|
435
450
|
Enabled: true
|
436
451
|
VersionAdded: '0.49'
|
437
452
|
|
453
|
+
Layout/EmptyLineAfterMultilineCondition:
|
454
|
+
Description: 'Enforces empty line after multiline condition.'
|
455
|
+
# This is disabled, because this style is not very common in practice.
|
456
|
+
Enabled: false
|
457
|
+
VersionAdded: '0.90'
|
458
|
+
Reference:
|
459
|
+
- https://github.com/airbnb/ruby#multiline-if-newline
|
460
|
+
|
438
461
|
Layout/EmptyLineBetweenDefs:
|
439
462
|
Description: 'Use empty lines between defs.'
|
440
463
|
StyleGuide: '#empty-lines-between-methods'
|
@@ -554,7 +577,6 @@ Layout/EndAlignment:
|
|
554
577
|
- keyword
|
555
578
|
- variable
|
556
579
|
- start_of_line
|
557
|
-
AutoCorrect: false
|
558
580
|
Severity: warning
|
559
581
|
|
560
582
|
Layout/EndOfLine:
|
@@ -1234,7 +1256,7 @@ Layout/SpaceInsideBlockBraces:
|
|
1234
1256
|
|
1235
1257
|
Layout/SpaceInsideHashLiteralBraces:
|
1236
1258
|
Description: "Use spaces inside hash literal braces - or don't."
|
1237
|
-
StyleGuide: '#spaces-
|
1259
|
+
StyleGuide: '#spaces-braces'
|
1238
1260
|
Enabled: true
|
1239
1261
|
VersionAdded: '0.49'
|
1240
1262
|
EnforcedStyle: space
|
@@ -1355,6 +1377,12 @@ Lint/BigDecimalNew:
|
|
1355
1377
|
Enabled: true
|
1356
1378
|
VersionAdded: '0.53'
|
1357
1379
|
|
1380
|
+
Lint/BinaryOperatorWithIdenticalOperands:
|
1381
|
+
Description: 'This cop checks for places where binary operator has identical operands.'
|
1382
|
+
Enabled: pending
|
1383
|
+
Safe: false
|
1384
|
+
VersionAdded: '0.89'
|
1385
|
+
|
1358
1386
|
Lint/BooleanSymbol:
|
1359
1387
|
Description: 'Check for `:true` and `:false` symbols.'
|
1360
1388
|
Enabled: true
|
@@ -1367,6 +1395,12 @@ Lint/CircularArgumentReference:
|
|
1367
1395
|
Enabled: true
|
1368
1396
|
VersionAdded: '0.33'
|
1369
1397
|
|
1398
|
+
Lint/ConstantDefinitionInBlock:
|
1399
|
+
Description: 'Do not define constants within a block.'
|
1400
|
+
StyleGuide: '#no-constant-definition-in-block'
|
1401
|
+
Enabled: pending
|
1402
|
+
VersionAdded: '0.91'
|
1403
|
+
|
1370
1404
|
Lint/ConstantResolution:
|
1371
1405
|
Description: 'Check that constants are fully qualified with `::`.'
|
1372
1406
|
Enabled: false
|
@@ -1420,6 +1454,16 @@ Lint/DuplicateMethods:
|
|
1420
1454
|
Enabled: true
|
1421
1455
|
VersionAdded: '0.29'
|
1422
1456
|
|
1457
|
+
Lint/DuplicateRequire:
|
1458
|
+
Description: 'Check for duplicate `require`s and `require_relative`s.'
|
1459
|
+
Enabled: pending
|
1460
|
+
VersionAdded: '0.90'
|
1461
|
+
|
1462
|
+
Lint/DuplicateRescueException:
|
1463
|
+
Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.'
|
1464
|
+
Enabled: pending
|
1465
|
+
VersionAdded: '0.89'
|
1466
|
+
|
1423
1467
|
Lint/EachWithObjectArgument:
|
1424
1468
|
Description: 'Check for immutable argument given to each_with_object.'
|
1425
1469
|
Enabled: true
|
@@ -1430,18 +1474,29 @@ Lint/ElseLayout:
|
|
1430
1474
|
Enabled: true
|
1431
1475
|
VersionAdded: '0.17'
|
1432
1476
|
|
1477
|
+
Lint/EmptyConditionalBody:
|
1478
|
+
Description: 'This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.'
|
1479
|
+
Enabled: 'pending'
|
1480
|
+
AllowComments: true
|
1481
|
+
VersionAdded: '0.89'
|
1482
|
+
|
1433
1483
|
Lint/EmptyEnsure:
|
1434
1484
|
Description: 'Checks for empty ensure block.'
|
1435
1485
|
Enabled: true
|
1436
1486
|
VersionAdded: '0.10'
|
1437
1487
|
VersionChanged: '0.48'
|
1438
|
-
AutoCorrect: false
|
1439
1488
|
|
1440
1489
|
Lint/EmptyExpression:
|
1441
1490
|
Description: 'Checks for empty expressions.'
|
1442
1491
|
Enabled: true
|
1443
1492
|
VersionAdded: '0.45'
|
1444
1493
|
|
1494
|
+
Lint/EmptyFile:
|
1495
|
+
Description: 'Enforces that Ruby source files are not empty.'
|
1496
|
+
Enabled: pending
|
1497
|
+
AllowComments: true
|
1498
|
+
VersionAdded: '0.90'
|
1499
|
+
|
1445
1500
|
Lint/EmptyInterpolation:
|
1446
1501
|
Description: 'Checks for empty string interpolation.'
|
1447
1502
|
Enabled: true
|
@@ -1473,6 +1528,12 @@ Lint/FlipFlop:
|
|
1473
1528
|
Enabled: true
|
1474
1529
|
VersionAdded: '0.16'
|
1475
1530
|
|
1531
|
+
Lint/FloatComparison:
|
1532
|
+
Description: 'Checks for the presence of precise comparison of floating point numbers.'
|
1533
|
+
StyleGuide: '#float-comparison'
|
1534
|
+
Enabled: pending
|
1535
|
+
VersionAdded: '0.89'
|
1536
|
+
|
1476
1537
|
Lint/FloatOutOfRange:
|
1477
1538
|
Description: >-
|
1478
1539
|
Catches floating-point literals too large or small for Ruby to
|
@@ -1493,6 +1554,12 @@ Lint/HeredocMethodCallPosition:
|
|
1493
1554
|
StyleGuide: '#heredoc-method-calls'
|
1494
1555
|
VersionAdded: '0.68'
|
1495
1556
|
|
1557
|
+
Lint/IdentityComparison:
|
1558
|
+
Description: 'Prefer `equal?` over `==` when comparing `object_id`.'
|
1559
|
+
Enabled: pending
|
1560
|
+
StyleGuide: '#identity-comparison'
|
1561
|
+
VersionAdded: '0.91'
|
1562
|
+
|
1496
1563
|
Lint/ImplicitStringConcatenation:
|
1497
1564
|
Description: >-
|
1498
1565
|
Checks for adjacent string literals on the same line, which
|
@@ -1520,7 +1587,7 @@ Lint/InheritException:
|
|
1520
1587
|
Lint/InterpolationCheck:
|
1521
1588
|
Description: 'Raise warning for interpolation in single q strs.'
|
1522
1589
|
Enabled: true
|
1523
|
-
|
1590
|
+
Safe: false
|
1524
1591
|
VersionAdded: '0.50'
|
1525
1592
|
VersionChanged: '0.87'
|
1526
1593
|
|
@@ -1542,6 +1609,7 @@ Lint/Loop:
|
|
1542
1609
|
StyleGuide: '#loop-with-break'
|
1543
1610
|
Enabled: true
|
1544
1611
|
VersionAdded: '0.9'
|
1612
|
+
VersionChanged: '0.89'
|
1545
1613
|
|
1546
1614
|
Lint/MissingCopEnableDirective:
|
1547
1615
|
Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`.'
|
@@ -1556,6 +1624,13 @@ Lint/MissingCopEnableDirective:
|
|
1556
1624
|
# .inf for any size
|
1557
1625
|
MaximumRangeSize: .inf
|
1558
1626
|
|
1627
|
+
Lint/MissingSuper:
|
1628
|
+
Description: >-
|
1629
|
+
This cop checks for the presence of constructors and lifecycle callbacks
|
1630
|
+
without calls to `super`'.
|
1631
|
+
Enabled: pending
|
1632
|
+
VersionAdded: '0.89'
|
1633
|
+
|
1559
1634
|
Lint/MixedRegexpCaptureTypes:
|
1560
1635
|
Description: 'Do not mix named captures and numbered captures in a Regexp literal.'
|
1561
1636
|
Enabled: pending
|
@@ -1608,6 +1683,12 @@ Lint/OrderedMagicComments:
|
|
1608
1683
|
Enabled: true
|
1609
1684
|
VersionAdded: '0.53'
|
1610
1685
|
|
1686
|
+
Lint/OutOfRangeRegexpRef:
|
1687
|
+
Description: 'Checks for out of range reference for Regexp because it always returns nil.'
|
1688
|
+
Enabled: pending
|
1689
|
+
Safe: false
|
1690
|
+
VersionAdded: '0.89'
|
1691
|
+
|
1611
1692
|
Lint/ParenthesesAsGroupedExpression:
|
1612
1693
|
Description: >-
|
1613
1694
|
Checks for method calls with a space before the opening
|
@@ -1730,6 +1811,7 @@ Lint/SafeNavigationChain:
|
|
1730
1811
|
- presence
|
1731
1812
|
- try
|
1732
1813
|
- try!
|
1814
|
+
- in?
|
1733
1815
|
|
1734
1816
|
Lint/SafeNavigationConsistency:
|
1735
1817
|
Description: >-
|
@@ -1758,6 +1840,11 @@ Lint/ScriptPermission:
|
|
1758
1840
|
VersionAdded: '0.49'
|
1759
1841
|
VersionChanged: '0.50'
|
1760
1842
|
|
1843
|
+
Lint/SelfAssignment:
|
1844
|
+
Description: 'Checks for self-assignments.'
|
1845
|
+
Enabled: pending
|
1846
|
+
VersionAdded: '0.89'
|
1847
|
+
|
1761
1848
|
Lint/SendWithMixinArgument:
|
1762
1849
|
Description: 'Checks for `send` method when using mixin.'
|
1763
1850
|
Enabled: true
|
@@ -1808,6 +1895,16 @@ Lint/ToJSON:
|
|
1808
1895
|
Enabled: true
|
1809
1896
|
VersionAdded: '0.66'
|
1810
1897
|
|
1898
|
+
Lint/TopLevelReturnWithArgument:
|
1899
|
+
Description: 'This cop detects top level return statements with argument.'
|
1900
|
+
Enabled: 'pending'
|
1901
|
+
VersionAdded: '0.89'
|
1902
|
+
|
1903
|
+
Lint/TrailingCommaInAttributeDeclaration:
|
1904
|
+
Description: 'This cop checks for trailing commas in attribute declarations.'
|
1905
|
+
Enabled: pending
|
1906
|
+
VersionAdded: '0.90'
|
1907
|
+
|
1811
1908
|
Lint/UnderscorePrefixedVariableName:
|
1812
1909
|
Description: 'Do not use prefix `_` for a variable that is used.'
|
1813
1910
|
Enabled: true
|
@@ -1824,6 +1921,11 @@ Lint/UnreachableCode:
|
|
1824
1921
|
Enabled: true
|
1825
1922
|
VersionAdded: '0.9'
|
1826
1923
|
|
1924
|
+
Lint/UnreachableLoop:
|
1925
|
+
Description: 'This cop checks for loops that will have at most one iteration.'
|
1926
|
+
Enabled: pending
|
1927
|
+
VersionAdded: '0.89'
|
1928
|
+
|
1827
1929
|
Lint/UnusedBlockArgument:
|
1828
1930
|
Description: 'Checks for unused block arguments.'
|
1829
1931
|
StyleGuide: '#underscore-unused-vars'
|
@@ -1873,16 +1975,18 @@ Lint/UselessAssignment:
|
|
1873
1975
|
Enabled: true
|
1874
1976
|
VersionAdded: '0.11'
|
1875
1977
|
|
1876
|
-
Lint/UselessComparison:
|
1877
|
-
Description: 'Checks for comparison of something with itself.'
|
1878
|
-
Enabled: true
|
1879
|
-
VersionAdded: '0.11'
|
1880
|
-
|
1881
1978
|
Lint/UselessElseWithoutRescue:
|
1882
1979
|
Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
|
1883
1980
|
Enabled: true
|
1884
1981
|
VersionAdded: '0.17'
|
1885
1982
|
|
1983
|
+
Lint/UselessMethodDefinition:
|
1984
|
+
Description: 'Checks for useless method definitions.'
|
1985
|
+
Enabled: pending
|
1986
|
+
VersionAdded: '0.90'
|
1987
|
+
Safe: false
|
1988
|
+
AllowComments: true
|
1989
|
+
|
1886
1990
|
Lint/UselessSetterCall:
|
1887
1991
|
Description: 'Checks for useless setter call to a local variable.'
|
1888
1992
|
Enabled: true
|
@@ -1890,6 +1994,12 @@ Lint/UselessSetterCall:
|
|
1890
1994
|
VersionChanged: '0.80'
|
1891
1995
|
Safe: false
|
1892
1996
|
|
1997
|
+
Lint/UselessTimes:
|
1998
|
+
Description: 'Checks for useless `Integer#times` calls.'
|
1999
|
+
Enabled: pending
|
2000
|
+
VersionAdded: '0.91'
|
2001
|
+
Safe: false
|
2002
|
+
|
1893
2003
|
Lint/Void:
|
1894
2004
|
Description: 'Possible use of operator/literal/variable in void context.'
|
1895
2005
|
Enabled: true
|
@@ -1911,7 +2021,7 @@ Metrics/AbcSize:
|
|
1911
2021
|
# The ABC size is a calculated magnitude, so this number can be an Integer or
|
1912
2022
|
# a Float.
|
1913
2023
|
IgnoredMethods: []
|
1914
|
-
Max:
|
2024
|
+
Max: 17
|
1915
2025
|
|
1916
2026
|
Metrics/BlockLength:
|
1917
2027
|
Description: 'Avoid long blocks with many lines.'
|
@@ -1993,7 +2103,7 @@ Metrics/PerceivedComplexity:
|
|
1993
2103
|
VersionAdded: '0.25'
|
1994
2104
|
VersionChanged: '0.81'
|
1995
2105
|
IgnoredMethods: []
|
1996
|
-
Max:
|
2106
|
+
Max: 8
|
1997
2107
|
|
1998
2108
|
################## Migration #############################
|
1999
2109
|
|
@@ -2352,7 +2462,8 @@ Style/ArrayCoercion:
|
|
2352
2462
|
Use Array() instead of explicit Array check or [*var], when dealing
|
2353
2463
|
with a variable you want to treat as an Array, but you're not certain it's an array.
|
2354
2464
|
StyleGuide: '#array-coercion'
|
2355
|
-
|
2465
|
+
Safe: false
|
2466
|
+
Enabled: false
|
2356
2467
|
VersionAdded: '0.88'
|
2357
2468
|
|
2358
2469
|
Style/ArrayJoin:
|
@@ -2527,6 +2638,7 @@ Style/CaseEquality:
|
|
2527
2638
|
StyleGuide: '#no-case-equality'
|
2528
2639
|
Enabled: true
|
2529
2640
|
VersionAdded: '0.9'
|
2641
|
+
VersionChanged: '0.89'
|
2530
2642
|
# If AllowOnConstant is enabled, the cop will ignore violations when the receiver of
|
2531
2643
|
# the case equality operator is a constant.
|
2532
2644
|
#
|
@@ -2541,6 +2653,7 @@ Style/CaseLikeIf:
|
|
2541
2653
|
Description: 'This cop identifies places where `if-elsif` constructions can be replaced with `case-when`.'
|
2542
2654
|
StyleGuide: '#case-vs-if-else'
|
2543
2655
|
Enabled: 'pending'
|
2656
|
+
Safe: false
|
2544
2657
|
VersionAdded: '0.88'
|
2545
2658
|
|
2546
2659
|
Style/CharacterLiteral:
|
@@ -2558,7 +2671,6 @@ Style/ClassAndModuleChildren:
|
|
2558
2671
|
# have the knowledge to perform either operation safely and thus requires
|
2559
2672
|
# manual oversight.
|
2560
2673
|
SafeAutoCorrect: false
|
2561
|
-
AutoCorrect: false
|
2562
2674
|
Enabled: true
|
2563
2675
|
VersionAdded: '0.19'
|
2564
2676
|
#
|
@@ -2597,6 +2709,16 @@ Style/ClassMethods:
|
|
2597
2709
|
VersionAdded: '0.9'
|
2598
2710
|
VersionChanged: '0.20'
|
2599
2711
|
|
2712
|
+
Style/ClassMethodsDefinitions:
|
2713
|
+
Description: 'Enforces using `def self.method_name` or `class << self` to define class methods.'
|
2714
|
+
StyleGuide: '#def-self-class-methods'
|
2715
|
+
Enabled: false
|
2716
|
+
VersionAdded: '0.89'
|
2717
|
+
EnforcedStyle: def_self
|
2718
|
+
SupportedStyles:
|
2719
|
+
- def_self
|
2720
|
+
- self_class
|
2721
|
+
|
2600
2722
|
Style/ClassVars:
|
2601
2723
|
Description: 'Avoid the use of class variables.'
|
2602
2724
|
StyleGuide: '#no-class-vars'
|
@@ -2637,6 +2759,14 @@ Style/ColonMethodDefinition:
|
|
2637
2759
|
Enabled: true
|
2638
2760
|
VersionAdded: '0.52'
|
2639
2761
|
|
2762
|
+
Style/CombinableLoops:
|
2763
|
+
Description: >-
|
2764
|
+
Checks for places where multiple consecutive loops over the same data
|
2765
|
+
can be combined into a single loop.
|
2766
|
+
Enabled: pending
|
2767
|
+
Safe: false
|
2768
|
+
VersionAdded: '0.90'
|
2769
|
+
|
2640
2770
|
Style/CommandLiteral:
|
2641
2771
|
Description: 'Use `` or %x around command literals.'
|
2642
2772
|
StyleGuide: '#percent-x'
|
@@ -2733,7 +2863,8 @@ Style/DateTime:
|
|
2733
2863
|
StyleGuide: '#date--time'
|
2734
2864
|
Enabled: false
|
2735
2865
|
VersionAdded: '0.51'
|
2736
|
-
VersionChanged: '0.
|
2866
|
+
VersionChanged: '0.92'
|
2867
|
+
SafeAutoCorrect: false
|
2737
2868
|
AllowCoercion: false
|
2738
2869
|
|
2739
2870
|
Style/DefWithParentheses:
|
@@ -2880,6 +3011,16 @@ Style/ExpandPathArguments:
|
|
2880
3011
|
Enabled: true
|
2881
3012
|
VersionAdded: '0.53'
|
2882
3013
|
|
3014
|
+
Style/ExplicitBlockArgument:
|
3015
|
+
Description: >-
|
3016
|
+
Consider using explicit block argument to avoid writing block literal
|
3017
|
+
that just passes its arguments to another block.
|
3018
|
+
StyleGuide: '#block-argument'
|
3019
|
+
Enabled: pending
|
3020
|
+
# May change the yielding arity.
|
3021
|
+
Safe: false
|
3022
|
+
VersionAdded: '0.89'
|
3023
|
+
|
2883
3024
|
Style/ExponentialNotation:
|
2884
3025
|
Description: 'When using exponential notation, favor a mantissa between 1 (inclusive) and 10 (exclusive).'
|
2885
3026
|
StyleGuide: '#exponential-notation'
|
@@ -2961,7 +3102,14 @@ Style/FrozenStringLiteralComment:
|
|
2961
3102
|
# `never` will enforce that the frozen string literal comment does not
|
2962
3103
|
# exist in a file.
|
2963
3104
|
- never
|
2964
|
-
|
3105
|
+
SafeAutoCorrect: false
|
3106
|
+
|
3107
|
+
Style/GlobalStdStream:
|
3108
|
+
Description: 'Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.'
|
3109
|
+
StyleGuide: '#global-stdout'
|
3110
|
+
Enabled: pending
|
3111
|
+
VersionAdded: '0.89'
|
3112
|
+
SafeAutoCorrect: false
|
2965
3113
|
|
2966
3114
|
Style/GlobalVars:
|
2967
3115
|
Description: 'Do not introduce global variables.'
|
@@ -3035,15 +3183,17 @@ Style/HashSyntax:
|
|
3035
3183
|
PreferHashRocketsForNonAlnumEndingSymbols: false
|
3036
3184
|
|
3037
3185
|
Style/HashTransformKeys:
|
3038
|
-
Description: 'Prefer `transform_keys` over `each_with_object`
|
3186
|
+
Description: 'Prefer `transform_keys` over `each_with_object`, `map`, or `to_h`.'
|
3039
3187
|
Enabled: 'pending'
|
3040
3188
|
VersionAdded: '0.80'
|
3189
|
+
VersionChanged: '0.90'
|
3041
3190
|
Safe: false
|
3042
3191
|
|
3043
3192
|
Style/HashTransformValues:
|
3044
|
-
Description: 'Prefer `transform_values` over `each_with_object`
|
3193
|
+
Description: 'Prefer `transform_values` over `each_with_object`, `map`, or `to_h`.'
|
3045
3194
|
Enabled: 'pending'
|
3046
3195
|
VersionAdded: '0.80'
|
3196
|
+
VersionChanged: '0.90'
|
3047
3197
|
Safe: false
|
3048
3198
|
|
3049
3199
|
Style/IdenticalConditionalBranches:
|
@@ -3134,11 +3284,22 @@ Style/IpAddresses:
|
|
3134
3284
|
Description: "Don't include literal IP addresses in code."
|
3135
3285
|
Enabled: false
|
3136
3286
|
VersionAdded: '0.58'
|
3137
|
-
VersionChanged: '0.
|
3287
|
+
VersionChanged: '0.91'
|
3138
3288
|
# Allow addresses to be permitted
|
3139
3289
|
AllowedAddresses:
|
3140
3290
|
- "::"
|
3141
3291
|
# :: is a valid IPv6 address, but could potentially be legitimately in code
|
3292
|
+
Exclude:
|
3293
|
+
- '**/*.gemfile'
|
3294
|
+
- '**/Gemfile'
|
3295
|
+
- '**/gems.rb'
|
3296
|
+
- '**/*.gemspec'
|
3297
|
+
|
3298
|
+
Style/KeywordParametersOrder:
|
3299
|
+
Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.'
|
3300
|
+
StyleGuide: '#keyword-parameters-order'
|
3301
|
+
Enabled: pending
|
3302
|
+
VersionAdded: '0.90'
|
3142
3303
|
|
3143
3304
|
Style/Lambda:
|
3144
3305
|
Description: 'Use the new lambda literal syntax for single-line blocks.'
|
@@ -3218,12 +3379,6 @@ Style/MethodDefParentheses:
|
|
3218
3379
|
- require_no_parentheses
|
3219
3380
|
- require_no_parentheses_except_multiline
|
3220
3381
|
|
3221
|
-
Style/MethodMissingSuper:
|
3222
|
-
Description: Checks for `method_missing` to call `super`.
|
3223
|
-
StyleGuide: '#no-method-missing'
|
3224
|
-
Enabled: true
|
3225
|
-
VersionAdded: '0.56'
|
3226
|
-
|
3227
3382
|
Style/MinMax:
|
3228
3383
|
Description: >-
|
3229
3384
|
Use `Enumerable#minmax` instead of `Enumerable#min`
|
@@ -3519,7 +3674,6 @@ Style/NumericPredicate:
|
|
3519
3674
|
# object. Switching these methods has to be done with knowledge of the types
|
3520
3675
|
# of the variables which rubocop doesn't have.
|
3521
3676
|
SafeAutoCorrect: false
|
3522
|
-
AutoCorrect: false
|
3523
3677
|
Enabled: true
|
3524
3678
|
VersionAdded: '0.42'
|
3525
3679
|
VersionChanged: '0.59'
|
@@ -3535,12 +3689,13 @@ Style/NumericPredicate:
|
|
3535
3689
|
|
3536
3690
|
Style/OneLineConditional:
|
3537
3691
|
Description: >-
|
3538
|
-
Favor the ternary operator(?:) over
|
3539
|
-
if/then/else/end constructs.
|
3692
|
+
Favor the ternary operator (?:) or multi-line constructs over
|
3693
|
+
single-line if/then/else/end constructs.
|
3540
3694
|
StyleGuide: '#ternary-operator'
|
3541
3695
|
Enabled: true
|
3696
|
+
AlwaysCorrectToMultiline: false
|
3542
3697
|
VersionAdded: '0.9'
|
3543
|
-
VersionChanged: '0.
|
3698
|
+
VersionChanged: '0.90'
|
3544
3699
|
|
3545
3700
|
Style/OptionHash:
|
3546
3701
|
Description: "Don't use option hashes when you can use keyword arguments."
|
@@ -3565,6 +3720,15 @@ Style/OptionalArguments:
|
|
3565
3720
|
VersionAdded: '0.33'
|
3566
3721
|
VersionChanged: '0.83'
|
3567
3722
|
|
3723
|
+
Style/OptionalBooleanParameter:
|
3724
|
+
Description: 'Use keyword arguments when defining method with boolean argument.'
|
3725
|
+
StyleGuide: '#boolean-keyword-arguments'
|
3726
|
+
Enabled: pending
|
3727
|
+
Safe: false
|
3728
|
+
VersionAdded: '0.89'
|
3729
|
+
AllowedMethods:
|
3730
|
+
- respond_to_missing?
|
3731
|
+
|
3568
3732
|
Style/OrAssignment:
|
3569
3733
|
Description: 'Recommend usage of double pipe equals (||=) where applicable.'
|
3570
3734
|
StyleGuide: '#double-pipe-for-uninit'
|
@@ -3764,6 +3928,12 @@ Style/RedundantSelf:
|
|
3764
3928
|
VersionAdded: '0.10'
|
3765
3929
|
VersionChanged: '0.13'
|
3766
3930
|
|
3931
|
+
Style/RedundantSelfAssignment:
|
3932
|
+
Description: 'Checks for places where redundant assignments are made for in place modification methods.'
|
3933
|
+
Enabled: pending
|
3934
|
+
Safe: false
|
3935
|
+
VersionAdded: '0.90'
|
3936
|
+
|
3767
3937
|
Style/RedundantSort:
|
3768
3938
|
Description: >-
|
3769
3939
|
Use `min` instead of `sort.first`,
|
@@ -3826,6 +3996,8 @@ Style/SafeNavigation:
|
|
3826
3996
|
This cop transforms usages of a method call safeguarded by
|
3827
3997
|
a check for the existence of the object to
|
3828
3998
|
safe navigation (`&.`).
|
3999
|
+
Auto-correction is unsafe as it assumes the object will
|
4000
|
+
be `nil` or truthy, but never `false`.
|
3829
4001
|
Enabled: true
|
3830
4002
|
VersionAdded: '0.43'
|
3831
4003
|
VersionChanged: '0.77'
|
@@ -3838,6 +4010,7 @@ Style/SafeNavigation:
|
|
3838
4010
|
- presence
|
3839
4011
|
- try
|
3840
4012
|
- try!
|
4013
|
+
SafeAutoCorrect: false
|
3841
4014
|
|
3842
4015
|
Style/Sample:
|
3843
4016
|
Description: >-
|
@@ -3883,6 +4056,12 @@ Style/SignalException:
|
|
3883
4056
|
- only_fail
|
3884
4057
|
- semantic
|
3885
4058
|
|
4059
|
+
Style/SingleArgumentDig:
|
4060
|
+
Description: 'Avoid using single argument dig method.'
|
4061
|
+
Enabled: pending
|
4062
|
+
VersionAdded: '0.89'
|
4063
|
+
Safe: false
|
4064
|
+
|
3886
4065
|
Style/SingleLineBlockParams:
|
3887
4066
|
Description: 'Enforces the names of some block params.'
|
3888
4067
|
Enabled: false
|
@@ -3910,6 +4089,14 @@ Style/SlicingWithRange:
|
|
3910
4089
|
VersionAdded: '0.83'
|
3911
4090
|
Safe: false
|
3912
4091
|
|
4092
|
+
Style/SoleNestedConditional:
|
4093
|
+
Description: >-
|
4094
|
+
Finds sole nested conditional nodes
|
4095
|
+
which can be merged into outer conditional node.
|
4096
|
+
Enabled: pending
|
4097
|
+
VersionAdded: '0.89'
|
4098
|
+
AllowModifier: false
|
4099
|
+
|
3913
4100
|
Style/SpecialGlobalVars:
|
3914
4101
|
Description: 'Avoid Perl-style global variables.'
|
3915
4102
|
StyleGuide: '#no-cryptic-perlisms'
|
@@ -3938,6 +4125,13 @@ Style/StderrPuts:
|
|
3938
4125
|
Enabled: true
|
3939
4126
|
VersionAdded: '0.51'
|
3940
4127
|
|
4128
|
+
Style/StringConcatenation:
|
4129
|
+
Description: 'Checks for places where string concatenation can be replaced with string interpolation.'
|
4130
|
+
StyleGuide: '#string-interpolation'
|
4131
|
+
Enabled: pending
|
4132
|
+
Safe: false
|
4133
|
+
VersionAdded: '0.89'
|
4134
|
+
|
3941
4135
|
Style/StringHashKeys:
|
3942
4136
|
Description: 'Prefer symbols instead of strings as hash keys.'
|
3943
4137
|
StyleGuide: '#symbols-as-keys'
|
data/lib/chefstyle.rb
CHANGED
@@ -9,7 +9,7 @@ module RuboCop
|
|
9
9
|
class ConfigLoader
|
10
10
|
RUBOCOP_HOME.gsub!(
|
11
11
|
/^.*$/,
|
12
|
-
File.realpath(File.join(
|
12
|
+
File.realpath(File.join(__dir__, ".."))
|
13
13
|
)
|
14
14
|
|
15
15
|
DEFAULT_FILE.gsub!(
|
@@ -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(__dir__ + "/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,122 @@
|
|
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::CANARY",
|
38
|
+
"chef-utils/dist" => "ChefUtils::Dist",
|
39
|
+
"csv" => "CSV",
|
40
|
+
"digest" => "Digest",
|
41
|
+
"digest/md5" => "Digest::MD5",
|
42
|
+
"digest/sha1" => "Digest::SHA1",
|
43
|
+
"digest/sha2" => "Digest::SHA2",
|
44
|
+
"droplet_kit" => "DropletKit",
|
45
|
+
"erb" => "Erb",
|
46
|
+
"erubis" => "Erubis",
|
47
|
+
"etc" => "Etc",
|
48
|
+
"excon" => "Excon",
|
49
|
+
"faraday" => "Faraday",
|
50
|
+
"ffi_yajl" => "FFI_Yajl",
|
51
|
+
"ffi" => "FFI",
|
52
|
+
"fileutils" => "FileUtils",
|
53
|
+
"find" => "Find.find",
|
54
|
+
"forwardable" => "Forwardable",
|
55
|
+
"ipaddr" => "IPAddr",
|
56
|
+
"json" => "JSON",
|
57
|
+
"mime/types" => "MIME::Types",
|
58
|
+
"mixlib/archive" => "Mixlib::Archive",
|
59
|
+
"mixlib/cli" => "Mixlib::CLI",
|
60
|
+
"mixlib/config" => "Mixlib::Config",
|
61
|
+
"mixlib/shellout" => "Mixlib::ShellOut",
|
62
|
+
"multi_json" => "MultiJson",
|
63
|
+
"net/http" => "Net::HTTP",
|
64
|
+
"net/ssh" => "Net::SSH",
|
65
|
+
"netaddr" => "NetAddr",
|
66
|
+
"nokogiri" => "Nokogiri",
|
67
|
+
"ohai" => "Ohai::System",
|
68
|
+
"open-uri" => "OpenURI",
|
69
|
+
"openssl" => "OpenSSL",
|
70
|
+
"optparse" => "OptionParser",
|
71
|
+
"ostruct" => "OpenStruct",
|
72
|
+
"pathname" => "Pathname",
|
73
|
+
"pp" => "PP",
|
74
|
+
"rack" => "Rack",
|
75
|
+
"rbconfig" => "RbConfig",
|
76
|
+
"retryable" => "Retryable",
|
77
|
+
"rexml/document" => "REXML::Document",
|
78
|
+
"rubygems" => "Gem",
|
79
|
+
"rubygems/package" => "Gem::Package",
|
80
|
+
"securerandom" => "SecureRandom",
|
81
|
+
"set" => "Set",
|
82
|
+
"shellwords" => "Shellwords",
|
83
|
+
"singleton" => "Singleton",
|
84
|
+
"socket" => "Socket",
|
85
|
+
"sslshake" => "SSLShake",
|
86
|
+
"stringio" => "StringIO",
|
87
|
+
"tempfile" => "Tempfile",
|
88
|
+
"thor" => "Thor",
|
89
|
+
"time" => "Time.zone_offset",
|
90
|
+
"timeout" => "Timeout",
|
91
|
+
"tmpdir" => "Dir.mktmpdir",
|
92
|
+
"tomlrb" => "Tomlrb",
|
93
|
+
"uri" => "URI",
|
94
|
+
"webrick" => "WEBrick",
|
95
|
+
"win32/registry" => "Win32::Registry",
|
96
|
+
"win32ole" => "WIN32OLE",
|
97
|
+
"winrm" => "WinRM::Connection",
|
98
|
+
"yard" => "YARD",
|
99
|
+
"zip" => "Zip",
|
100
|
+
"zlib" => "Zlib",
|
101
|
+
"pastel" => "Pastel",
|
102
|
+
}.freeze
|
103
|
+
|
104
|
+
def_node_matcher :require?, <<-PATTERN
|
105
|
+
(send nil? :require (str $_) )
|
106
|
+
PATTERN
|
107
|
+
|
108
|
+
def on_send(node)
|
109
|
+
require?(node) do |r|
|
110
|
+
next if node.parent && node.parent.conditional? # catch both if and unless
|
111
|
+
next unless REQUIRE_TO_CLASS[r]
|
112
|
+
|
113
|
+
add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
114
|
+
corrector.replace(node.loc.expression, "#{node.source} unless defined?(#{REQUIRE_TO_CLASS[r]})")
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
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.
|
4
|
+
version: 1.4.3
|
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-29 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.92.0
|
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.92.0
|
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
|