chefstyle 1.2.1 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/chefstyle +1 -1
- data/chefstyle.gemspec +1 -4
- data/config/chefstyle.yml +62 -2
- data/config/disable_all.yml +34 -0
- data/config/upstream.yml +160 -14
- 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: d720ee7f411ec4e21714e8caca7822a67440deae3ad360a3c9591749b4cc17e8
         | 
| 4 | 
            +
              data.tar.gz: 8cee92cb7017f748d6b55c4c7c87b7a4d3c0a88db3051e47c20fe208421e386b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 84accab6836d7c5ca64b75f257262ecf66f0aad405aec5683aa11c379a5dbb0dfce677635b13f33d2ca95262708d7729f32eae9c06a493d6e4295c8a082b14ef
         | 
| 7 | 
            +
              data.tar.gz: 0d905d5e1da9b5dc5332e56ddec2a60c480faa085efb1982b5bfed067d33e6a9863a014aafb81bfb35b7609f9b25b31e6dd00aa497e17eb8fd611e42d2ec0b8e
         | 
    
        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,64 @@ 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 | 
            +
            # more code you don't need
         | 
| 669 | 
            +
            Lint/RedundantSafeNavigation:
         | 
| 670 | 
            +
              Enabled: true
         | 
| 671 | 
            +
             | 
| 672 | 
            +
            ChefRuby/Ruby27KeywordArgumentWarnings:
         | 
| 673 | 
            +
              Description: Pass options to shell_out helpers without the brackets to avoid Ruby 2.7 deprecation warnings.
         | 
| 674 | 
            +
              Enabled: true
         | 
| 675 | 
            +
              VersionAdded: '1.3.0'
         | 
| 676 | 
            +
             | 
| 677 | 
            +
            ChefRuby/UnlessDefinedRequire:
         | 
| 678 | 
            +
              Description: Workaround RubyGems' slow requires by only running require if the constant isn't already defined
         | 
| 679 | 
            +
              Enabled: true
         | 
| 680 | 
            +
              VersionAdded: '1.3.0'
         | 
| 681 | 
            +
              Include:
         | 
| 682 | 
            +
                - 'lib/**/*'
         | 
| 683 | 
            +
             | 
| 684 | 
            +
            ChefRuby/GemspecRequireRubygems:
         | 
| 685 | 
            +
              Description: Rubygems does not need to be required in a Gemspec
         | 
| 686 | 
            +
              Enabled: true
         | 
| 687 | 
            +
              VersionAdded: '1.3.0'
         | 
| 688 | 
            +
              Include:
         | 
| 689 | 
            +
                - '**/*.gemspec'
         | 
| 690 | 
            +
             | 
| 691 | 
            +
            ChefRuby/RequireNetHttps:
         | 
| 692 | 
            +
              Description: net/https is deprecated and just includes net/http and openssl. We should include those directly instead
         | 
| 693 | 
            +
              Enabled: true
         | 
| 694 | 
            +
              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:
         | 
| @@ -213,6 +217,8 @@ Lint/BooleanSymbol: | |
| 213 217 | 
             
              Enabled: false
         | 
| 214 218 | 
             
            Lint/CircularArgumentReference:
         | 
| 215 219 | 
             
              Enabled: false
         | 
| 220 | 
            +
            Lint/ConstantDefinitionInBlock:
         | 
| 221 | 
            +
              Enabled: false
         | 
| 216 222 | 
             
            Lint/ConstantResolution:
         | 
| 217 223 | 
             
              Enabled: false
         | 
| 218 224 | 
             
            Lint/Debugger:
         | 
| @@ -231,6 +237,8 @@ Lint/DuplicateHashKey: | |
| 231 237 | 
             
              Enabled: false
         | 
| 232 238 | 
             
            Lint/DuplicateMethods:
         | 
| 233 239 | 
             
              Enabled: false
         | 
| 240 | 
            +
            Lint/DuplicateRequire:
         | 
| 241 | 
            +
              Enabled: false
         | 
| 234 242 | 
             
            Lint/DuplicateRescueException:
         | 
| 235 243 | 
             
              Enabled: false
         | 
| 236 244 | 
             
            Lint/EachWithObjectArgument:
         | 
| @@ -243,6 +251,8 @@ Lint/EmptyEnsure: | |
| 243 251 | 
             
              Enabled: false
         | 
| 244 252 | 
             
            Lint/EmptyExpression:
         | 
| 245 253 | 
             
              Enabled: false
         | 
| 254 | 
            +
            Lint/EmptyFile:
         | 
| 255 | 
            +
              Enabled: false
         | 
| 246 256 | 
             
            Lint/EmptyInterpolation:
         | 
| 247 257 | 
             
              Enabled: false
         | 
| 248 258 | 
             
            Lint/EmptyWhen:
         | 
| @@ -259,8 +269,12 @@ Lint/FloatOutOfRange: | |
| 259 269 | 
             
              Enabled: false
         | 
| 260 270 | 
             
            Lint/FormatParameterMismatch:
         | 
| 261 271 | 
             
              Enabled: false
         | 
| 272 | 
            +
            Lint/HashCompareByIdentity:
         | 
| 273 | 
            +
              Enabled: false
         | 
| 262 274 | 
             
            Lint/HeredocMethodCallPosition:
         | 
| 263 275 | 
             
              Enabled: false
         | 
| 276 | 
            +
            Lint/IdentityComparison:
         | 
| 277 | 
            +
              Enabled: false
         | 
| 264 278 | 
             
            Lint/ImplicitStringConcatenation:
         | 
| 265 279 | 
             
              Enabled: false
         | 
| 266 280 | 
             
            Lint/InheritException:
         | 
| @@ -315,6 +329,8 @@ Lint/RedundantCopEnableDirective: | |
| 315 329 | 
             
              Enabled: false
         | 
| 316 330 | 
             
            Lint/RedundantRequireStatement:
         | 
| 317 331 | 
             
              Enabled: false
         | 
| 332 | 
            +
            Lint/RedundantSafeNavigation:
         | 
| 333 | 
            +
              Enabled: false
         | 
| 318 334 | 
             
            Lint/RedundantSplatExpansion:
         | 
| 319 335 | 
             
              Enabled: false
         | 
| 320 336 | 
             
            Lint/RedundantStringCoercion:
         | 
| @@ -361,6 +377,8 @@ Lint/ToJSON: | |
| 361 377 | 
             
              Enabled: false
         | 
| 362 378 | 
             
            Lint/TopLevelReturnWithArgument:
         | 
| 363 379 | 
             
              Enabled: false
         | 
| 380 | 
            +
            Lint/TrailingCommaInAttributeDeclaration:
         | 
| 381 | 
            +
              Enabled: false
         | 
| 364 382 | 
             
            Lint/UnderscorePrefixedVariableName:
         | 
| 365 383 | 
             
              Enabled: false
         | 
| 366 384 | 
             
            Lint/UnifiedInteger:
         | 
| @@ -383,8 +401,12 @@ Lint/UselessAssignment: | |
| 383 401 | 
             
              Enabled: false
         | 
| 384 402 | 
             
            Lint/UselessElseWithoutRescue:
         | 
| 385 403 | 
             
              Enabled: false
         | 
| 404 | 
            +
            Lint/UselessMethodDefinition:
         | 
| 405 | 
            +
              Enabled: false
         | 
| 386 406 | 
             
            Lint/UselessSetterCall:
         | 
| 387 407 | 
             
              Enabled: false
         | 
| 408 | 
            +
            Lint/UselessTimes:
         | 
| 409 | 
            +
              Enabled: false
         | 
| 388 410 | 
             
            Lint/Void:
         | 
| 389 411 | 
             
              Enabled: false
         | 
| 390 412 | 
             
            Metrics/CyclomaticComplexity:
         | 
| @@ -475,8 +497,12 @@ Style/ClassAndModuleChildren: | |
| 475 497 | 
             
              Enabled: false
         | 
| 476 498 | 
             
            Style/ClassCheck:
         | 
| 477 499 | 
             
              Enabled: false
         | 
| 500 | 
            +
            Style/ClassEqualityComparison:
         | 
| 501 | 
            +
              Enabled: false
         | 
| 478 502 | 
             
            Style/ClassMethods:
         | 
| 479 503 | 
             
              Enabled: false
         | 
| 504 | 
            +
            Style/ClassMethodsDefinitions:
         | 
| 505 | 
            +
              Enabled: false
         | 
| 480 506 | 
             
            Style/ClassVars:
         | 
| 481 507 | 
             
              Enabled: false
         | 
| 482 508 | 
             
            Style/CollectionMethods:
         | 
| @@ -485,6 +511,8 @@ Style/ColonMethodCall: | |
| 485 511 | 
             
              Enabled: false
         | 
| 486 512 | 
             
            Style/ColonMethodDefinition:
         | 
| 487 513 | 
             
              Enabled: false
         | 
| 514 | 
            +
            Style/CombinableLoops:
         | 
| 515 | 
            +
              Enabled: false
         | 
| 488 516 | 
             
            Style/CommandLiteral:
         | 
| 489 517 | 
             
              Enabled: false
         | 
| 490 518 | 
             
            Style/CommentAnnotation:
         | 
| @@ -591,6 +619,8 @@ Style/InlineComment: | |
| 591 619 | 
             
              Enabled: false
         | 
| 592 620 | 
             
            Style/IpAddresses:
         | 
| 593 621 | 
             
              Enabled: false
         | 
| 622 | 
            +
            Style/KeywordParametersOrder:
         | 
| 623 | 
            +
              Enabled: false
         | 
| 594 624 | 
             
            Style/Lambda:
         | 
| 595 625 | 
             
              Enabled: false
         | 
| 596 626 | 
             
            Style/LambdaCall:
         | 
| @@ -607,6 +637,10 @@ Style/RedundantFetchBlock: | |
| 607 637 | 
             
              Enabled: false
         | 
| 608 638 | 
             
            Style/RedundantFileExtensionInRequire:
         | 
| 609 639 | 
             
              Enabled: false
         | 
| 640 | 
            +
            Style/RedundantSelfAssignment:
         | 
| 641 | 
            +
              Enabled: false
         | 
| 642 | 
            +
            Style/SoleNestedConditional:
         | 
| 643 | 
            +
              Enabled: false
         | 
| 610 644 | 
             
            Style/MethodCalledOnDoEndBlock:
         | 
| 611 645 | 
             
              Enabled: false
         | 
| 612 646 | 
             
            Style/MethodDefParentheses:
         | 
    
        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
         | 
| @@ -309,6 +311,19 @@ Layout/AssignmentIndentation: | |
| 309 311 | 
             
              # But it can be overridden by setting this parameter
         | 
| 310 312 | 
             
              IndentationWidth: ~
         | 
| 311 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 | 
            +
             | 
| 312 327 | 
             
            Layout/BlockAlignment:
         | 
| 313 328 | 
             
              Description: 'Align block ends correctly.'
         | 
| 314 329 | 
             
              Enabled: true
         | 
| @@ -399,7 +414,6 @@ Layout/DefEndAlignment: | |
| 399 414 | 
             
              SupportedStylesAlignWith:
         | 
| 400 415 | 
             
                - start_of_line
         | 
| 401 416 | 
             
                - def
         | 
| 402 | 
            -
              AutoCorrect: false
         | 
| 403 417 | 
             
              Severity: warning
         | 
| 404 418 |  | 
| 405 419 | 
             
            Layout/DotPosition:
         | 
| @@ -436,6 +450,14 @@ Layout/EmptyLineAfterMagicComment: | |
| 436 450 | 
             
              Enabled: true
         | 
| 437 451 | 
             
              VersionAdded: '0.49'
         | 
| 438 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 | 
            +
             | 
| 439 461 | 
             
            Layout/EmptyLineBetweenDefs:
         | 
| 440 462 | 
             
              Description: 'Use empty lines between defs.'
         | 
| 441 463 | 
             
              StyleGuide: '#empty-lines-between-methods'
         | 
| @@ -555,7 +577,6 @@ Layout/EndAlignment: | |
| 555 577 | 
             
                - keyword
         | 
| 556 578 | 
             
                - variable
         | 
| 557 579 | 
             
                - start_of_line
         | 
| 558 | 
            -
              AutoCorrect: false
         | 
| 559 580 | 
             
              Severity: warning
         | 
| 560 581 |  | 
| 561 582 | 
             
            Layout/EndOfLine:
         | 
| @@ -1374,6 +1395,12 @@ Lint/CircularArgumentReference: | |
| 1374 1395 | 
             
              Enabled: true
         | 
| 1375 1396 | 
             
              VersionAdded: '0.33'
         | 
| 1376 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 | 
            +
             | 
| 1377 1404 | 
             
            Lint/ConstantResolution:
         | 
| 1378 1405 | 
             
              Description: 'Check that constants are fully qualified with `::`.'
         | 
| 1379 1406 | 
             
              Enabled: false
         | 
| @@ -1427,6 +1454,11 @@ Lint/DuplicateMethods: | |
| 1427 1454 | 
             
              Enabled: true
         | 
| 1428 1455 | 
             
              VersionAdded: '0.29'
         | 
| 1429 1456 |  | 
| 1457 | 
            +
            Lint/DuplicateRequire:
         | 
| 1458 | 
            +
              Description: 'Check for duplicate `require`s and `require_relative`s.'
         | 
| 1459 | 
            +
              Enabled: pending
         | 
| 1460 | 
            +
              VersionAdded: '0.90'
         | 
| 1461 | 
            +
             | 
| 1430 1462 | 
             
            Lint/DuplicateRescueException:
         | 
| 1431 1463 | 
             
              Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.'
         | 
| 1432 1464 | 
             
              Enabled: pending
         | 
| @@ -1453,13 +1485,18 @@ Lint/EmptyEnsure: | |
| 1453 1485 | 
             
              Enabled: true
         | 
| 1454 1486 | 
             
              VersionAdded: '0.10'
         | 
| 1455 1487 | 
             
              VersionChanged: '0.48'
         | 
| 1456 | 
            -
              AutoCorrect: false
         | 
| 1457 1488 |  | 
| 1458 1489 | 
             
            Lint/EmptyExpression:
         | 
| 1459 1490 | 
             
              Description: 'Checks for empty expressions.'
         | 
| 1460 1491 | 
             
              Enabled: true
         | 
| 1461 1492 | 
             
              VersionAdded: '0.45'
         | 
| 1462 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 | 
            +
             | 
| 1463 1500 | 
             
            Lint/EmptyInterpolation:
         | 
| 1464 1501 | 
             
              Description: 'Checks for empty string interpolation.'
         | 
| 1465 1502 | 
             
              Enabled: true
         | 
| @@ -1509,6 +1546,13 @@ Lint/FormatParameterMismatch: | |
| 1509 1546 | 
             
              Enabled: true
         | 
| 1510 1547 | 
             
              VersionAdded: '0.33'
         | 
| 1511 1548 |  | 
| 1549 | 
            +
            Lint/HashCompareByIdentity:
         | 
| 1550 | 
            +
              Description: 'Prefer using `Hash#compare_by_identity` than using `object_id` for keys.'
         | 
| 1551 | 
            +
              StyleGuide: '#identity-comparison'
         | 
| 1552 | 
            +
              Enabled: pending
         | 
| 1553 | 
            +
              Safe: false
         | 
| 1554 | 
            +
              VersionAdded: '0.93'
         | 
| 1555 | 
            +
             | 
| 1512 1556 | 
             
            Lint/HeredocMethodCallPosition:
         | 
| 1513 1557 | 
             
              Description: >-
         | 
| 1514 1558 | 
             
                             Checks for the ordering of a method call where
         | 
| @@ -1517,6 +1561,12 @@ Lint/HeredocMethodCallPosition: | |
| 1517 1561 | 
             
              StyleGuide: '#heredoc-method-calls'
         | 
| 1518 1562 | 
             
              VersionAdded: '0.68'
         | 
| 1519 1563 |  | 
| 1564 | 
            +
            Lint/IdentityComparison:
         | 
| 1565 | 
            +
              Description: 'Prefer `equal?` over `==` when comparing `object_id`.'
         | 
| 1566 | 
            +
              Enabled: pending
         | 
| 1567 | 
            +
              StyleGuide: '#identity-comparison'
         | 
| 1568 | 
            +
              VersionAdded: '0.91'
         | 
| 1569 | 
            +
             | 
| 1520 1570 | 
             
            Lint/ImplicitStringConcatenation:
         | 
| 1521 1571 | 
             
              Description: >-
         | 
| 1522 1572 | 
             
                             Checks for adjacent string literals on the same line, which
         | 
| @@ -1703,6 +1753,21 @@ Lint/RedundantRequireStatement: | |
| 1703 1753 | 
             
              Enabled: true
         | 
| 1704 1754 | 
             
              VersionAdded: '0.76'
         | 
| 1705 1755 |  | 
| 1756 | 
            +
            Lint/RedundantSafeNavigation:
         | 
| 1757 | 
            +
              Description: 'Checks for redundant safe navigation calls.'
         | 
| 1758 | 
            +
              Enabled: pending
         | 
| 1759 | 
            +
              VersionAdded: '0.93'
         | 
| 1760 | 
            +
              Safe: false
         | 
| 1761 | 
            +
              IgnoredMethods:
         | 
| 1762 | 
            +
                - to_c
         | 
| 1763 | 
            +
                - to_f
         | 
| 1764 | 
            +
                - to_i
         | 
| 1765 | 
            +
                - to_r
         | 
| 1766 | 
            +
                - rationalize
         | 
| 1767 | 
            +
                - public_send
         | 
| 1768 | 
            +
                - send
         | 
| 1769 | 
            +
                - __send__
         | 
| 1770 | 
            +
             | 
| 1706 1771 | 
             
            Lint/RedundantSplatExpansion:
         | 
| 1707 1772 | 
             
              Description: 'Checks for splat unnecessarily being called on literals.'
         | 
| 1708 1773 | 
             
              Enabled: true
         | 
| @@ -1768,6 +1833,7 @@ Lint/SafeNavigationChain: | |
| 1768 1833 | 
             
                - presence
         | 
| 1769 1834 | 
             
                - try
         | 
| 1770 1835 | 
             
                - try!
         | 
| 1836 | 
            +
                - in?
         | 
| 1771 1837 |  | 
| 1772 1838 | 
             
            Lint/SafeNavigationConsistency:
         | 
| 1773 1839 | 
             
              Description: >-
         | 
| @@ -1856,6 +1922,11 @@ Lint/TopLevelReturnWithArgument: | |
| 1856 1922 | 
             
              Enabled: 'pending'
         | 
| 1857 1923 | 
             
              VersionAdded: '0.89'
         | 
| 1858 1924 |  | 
| 1925 | 
            +
            Lint/TrailingCommaInAttributeDeclaration:
         | 
| 1926 | 
            +
              Description: 'This cop checks for trailing commas in attribute declarations.'
         | 
| 1927 | 
            +
              Enabled: pending
         | 
| 1928 | 
            +
              VersionAdded: '0.90'
         | 
| 1929 | 
            +
             | 
| 1859 1930 | 
             
            Lint/UnderscorePrefixedVariableName:
         | 
| 1860 1931 | 
             
              Description: 'Do not use prefix `_` for a variable that is used.'
         | 
| 1861 1932 | 
             
              Enabled: true
         | 
| @@ -1931,6 +2002,13 @@ Lint/UselessElseWithoutRescue: | |
| 1931 2002 | 
             
              Enabled: true
         | 
| 1932 2003 | 
             
              VersionAdded: '0.17'
         | 
| 1933 2004 |  | 
| 2005 | 
            +
            Lint/UselessMethodDefinition:
         | 
| 2006 | 
            +
              Description: 'Checks for useless method definitions.'
         | 
| 2007 | 
            +
              Enabled: pending
         | 
| 2008 | 
            +
              VersionAdded: '0.90'
         | 
| 2009 | 
            +
              Safe: false
         | 
| 2010 | 
            +
              AllowComments: true
         | 
| 2011 | 
            +
             | 
| 1934 2012 | 
             
            Lint/UselessSetterCall:
         | 
| 1935 2013 | 
             
              Description: 'Checks for useless setter call to a local variable.'
         | 
| 1936 2014 | 
             
              Enabled: true
         | 
| @@ -1938,6 +2016,12 @@ Lint/UselessSetterCall: | |
| 1938 2016 | 
             
              VersionChanged: '0.80'
         | 
| 1939 2017 | 
             
              Safe: false
         | 
| 1940 2018 |  | 
| 2019 | 
            +
            Lint/UselessTimes:
         | 
| 2020 | 
            +
              Description: 'Checks for useless `Integer#times` calls.'
         | 
| 2021 | 
            +
              Enabled: pending
         | 
| 2022 | 
            +
              VersionAdded: '0.91'
         | 
| 2023 | 
            +
              Safe: false
         | 
| 2024 | 
            +
             | 
| 1941 2025 | 
             
            Lint/Void:
         | 
| 1942 2026 | 
             
              Description: 'Possible use of operator/literal/variable in void context.'
         | 
| 1943 2027 | 
             
              Enabled: true
         | 
| @@ -2401,7 +2485,7 @@ Style/ArrayCoercion: | |
| 2401 2485 | 
             
                              with a variable you want to treat as an Array, but you're not certain it's an array.
         | 
| 2402 2486 | 
             
              StyleGuide: '#array-coercion'
         | 
| 2403 2487 | 
             
              Safe: false
         | 
| 2404 | 
            -
              Enabled:  | 
| 2488 | 
            +
              Enabled: false
         | 
| 2405 2489 | 
             
              VersionAdded: '0.88'
         | 
| 2406 2490 |  | 
| 2407 2491 | 
             
            Style/ArrayJoin:
         | 
| @@ -2591,6 +2675,7 @@ Style/CaseLikeIf: | |
| 2591 2675 | 
             
              Description: 'This cop identifies places where `if-elsif` constructions can be replaced with `case-when`.'
         | 
| 2592 2676 | 
             
              StyleGuide: '#case-vs-if-else'
         | 
| 2593 2677 | 
             
              Enabled: 'pending'
         | 
| 2678 | 
            +
              Safe: false
         | 
| 2594 2679 | 
             
              VersionAdded: '0.88'
         | 
| 2595 2680 |  | 
| 2596 2681 | 
             
            Style/CharacterLiteral:
         | 
| @@ -2608,7 +2693,6 @@ Style/ClassAndModuleChildren: | |
| 2608 2693 | 
             
              # have the knowledge to perform either operation safely and thus requires
         | 
| 2609 2694 | 
             
              # manual oversight.
         | 
| 2610 2695 | 
             
              SafeAutoCorrect: false
         | 
| 2611 | 
            -
              AutoCorrect: false
         | 
| 2612 2696 | 
             
              Enabled: true
         | 
| 2613 2697 | 
             
              VersionAdded: '0.19'
         | 
| 2614 2698 | 
             
              #
         | 
| @@ -2640,6 +2724,16 @@ Style/ClassCheck: | |
| 2640 2724 | 
             
                - is_a?
         | 
| 2641 2725 | 
             
                - kind_of?
         | 
| 2642 2726 |  | 
| 2727 | 
            +
            Style/ClassEqualityComparison:
         | 
| 2728 | 
            +
              Description: 'Enforces the use of `Object#instance_of?` instead of class comparison for equality.'
         | 
| 2729 | 
            +
              StyleGuide: '#instance-of-vs-class-comparison'
         | 
| 2730 | 
            +
              Enabled: pending
         | 
| 2731 | 
            +
              VersionAdded: '0.93'
         | 
| 2732 | 
            +
              IgnoredMethods:
         | 
| 2733 | 
            +
                - ==
         | 
| 2734 | 
            +
                - equal?
         | 
| 2735 | 
            +
                - eql?
         | 
| 2736 | 
            +
             | 
| 2643 2737 | 
             
            Style/ClassMethods:
         | 
| 2644 2738 | 
             
              Description: 'Use self when defining module/class methods.'
         | 
| 2645 2739 | 
             
              StyleGuide: '#def-self-class-methods'
         | 
| @@ -2647,6 +2741,16 @@ Style/ClassMethods: | |
| 2647 2741 | 
             
              VersionAdded: '0.9'
         | 
| 2648 2742 | 
             
              VersionChanged: '0.20'
         | 
| 2649 2743 |  | 
| 2744 | 
            +
            Style/ClassMethodsDefinitions:
         | 
| 2745 | 
            +
              Description: 'Enforces using `def self.method_name` or `class << self` to define class methods.'
         | 
| 2746 | 
            +
              StyleGuide: '#def-self-class-methods'
         | 
| 2747 | 
            +
              Enabled: false
         | 
| 2748 | 
            +
              VersionAdded: '0.89'
         | 
| 2749 | 
            +
              EnforcedStyle:  def_self
         | 
| 2750 | 
            +
              SupportedStyles:
         | 
| 2751 | 
            +
                - def_self
         | 
| 2752 | 
            +
                - self_class
         | 
| 2753 | 
            +
             | 
| 2650 2754 | 
             
            Style/ClassVars:
         | 
| 2651 2755 | 
             
              Description: 'Avoid the use of class variables.'
         | 
| 2652 2756 | 
             
              StyleGuide: '#no-class-vars'
         | 
| @@ -2687,6 +2791,14 @@ Style/ColonMethodDefinition: | |
| 2687 2791 | 
             
              Enabled: true
         | 
| 2688 2792 | 
             
              VersionAdded: '0.52'
         | 
| 2689 2793 |  | 
| 2794 | 
            +
            Style/CombinableLoops:
         | 
| 2795 | 
            +
              Description: >-
         | 
| 2796 | 
            +
                              Checks for places where multiple consecutive loops over the same data
         | 
| 2797 | 
            +
                              can be combined into a single loop.
         | 
| 2798 | 
            +
              Enabled: pending
         | 
| 2799 | 
            +
              Safe: false
         | 
| 2800 | 
            +
              VersionAdded: '0.90'
         | 
| 2801 | 
            +
             | 
| 2690 2802 | 
             
            Style/CommandLiteral:
         | 
| 2691 2803 | 
             
              Description: 'Use `` or %x around command literals.'
         | 
| 2692 2804 | 
             
              StyleGuide: '#percent-x'
         | 
| @@ -2783,7 +2895,8 @@ Style/DateTime: | |
| 2783 2895 | 
             
              StyleGuide: '#date--time'
         | 
| 2784 2896 | 
             
              Enabled: false
         | 
| 2785 2897 | 
             
              VersionAdded: '0.51'
         | 
| 2786 | 
            -
              VersionChanged: '0. | 
| 2898 | 
            +
              VersionChanged: '0.92'
         | 
| 2899 | 
            +
              SafeAutoCorrect: false
         | 
| 2787 2900 | 
             
              AllowCoercion: false
         | 
| 2788 2901 |  | 
| 2789 2902 | 
             
            Style/DefWithParentheses:
         | 
| @@ -3021,13 +3134,14 @@ Style/FrozenStringLiteralComment: | |
| 3021 3134 | 
             
                # `never` will enforce that the frozen string literal comment does not
         | 
| 3022 3135 | 
             
                # exist in a file.
         | 
| 3023 3136 | 
             
                - never
         | 
| 3024 | 
            -
               | 
| 3137 | 
            +
              SafeAutoCorrect: false
         | 
| 3025 3138 |  | 
| 3026 3139 | 
             
            Style/GlobalStdStream:
         | 
| 3027 3140 | 
             
              Description: 'Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.'
         | 
| 3028 3141 | 
             
              StyleGuide: '#global-stdout'
         | 
| 3029 3142 | 
             
              Enabled: pending
         | 
| 3030 3143 | 
             
              VersionAdded: '0.89'
         | 
| 3144 | 
            +
              SafeAutoCorrect: false
         | 
| 3031 3145 |  | 
| 3032 3146 | 
             
            Style/GlobalVars:
         | 
| 3033 3147 | 
             
              Description: 'Do not introduce global variables.'
         | 
| @@ -3101,15 +3215,17 @@ Style/HashSyntax: | |
| 3101 3215 | 
             
              PreferHashRocketsForNonAlnumEndingSymbols: false
         | 
| 3102 3216 |  | 
| 3103 3217 | 
             
            Style/HashTransformKeys:
         | 
| 3104 | 
            -
              Description: 'Prefer `transform_keys` over `each_with_object`  | 
| 3218 | 
            +
              Description: 'Prefer `transform_keys` over `each_with_object`, `map`, or `to_h`.'
         | 
| 3105 3219 | 
             
              Enabled: 'pending'
         | 
| 3106 3220 | 
             
              VersionAdded: '0.80'
         | 
| 3221 | 
            +
              VersionChanged: '0.90'
         | 
| 3107 3222 | 
             
              Safe: false
         | 
| 3108 3223 |  | 
| 3109 3224 | 
             
            Style/HashTransformValues:
         | 
| 3110 | 
            -
              Description: 'Prefer `transform_values` over `each_with_object`  | 
| 3225 | 
            +
              Description: 'Prefer `transform_values` over `each_with_object`, `map`, or `to_h`.'
         | 
| 3111 3226 | 
             
              Enabled: 'pending'
         | 
| 3112 3227 | 
             
              VersionAdded: '0.80'
         | 
| 3228 | 
            +
              VersionChanged: '0.90'
         | 
| 3113 3229 | 
             
              Safe: false
         | 
| 3114 3230 |  | 
| 3115 3231 | 
             
            Style/IdenticalConditionalBranches:
         | 
| @@ -3200,11 +3316,22 @@ Style/IpAddresses: | |
| 3200 3316 | 
             
              Description: "Don't include literal IP addresses in code."
         | 
| 3201 3317 | 
             
              Enabled: false
         | 
| 3202 3318 | 
             
              VersionAdded: '0.58'
         | 
| 3203 | 
            -
              VersionChanged: '0. | 
| 3319 | 
            +
              VersionChanged: '0.91'
         | 
| 3204 3320 | 
             
              # Allow addresses to be permitted
         | 
| 3205 3321 | 
             
              AllowedAddresses:
         | 
| 3206 3322 | 
             
                - "::"
         | 
| 3207 3323 | 
             
                # :: is a valid IPv6 address, but could potentially be legitimately in code
         | 
| 3324 | 
            +
              Exclude:
         | 
| 3325 | 
            +
                - '**/*.gemfile'
         | 
| 3326 | 
            +
                - '**/Gemfile'
         | 
| 3327 | 
            +
                - '**/gems.rb'
         | 
| 3328 | 
            +
                - '**/*.gemspec'
         | 
| 3329 | 
            +
             | 
| 3330 | 
            +
            Style/KeywordParametersOrder:
         | 
| 3331 | 
            +
              Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.'
         | 
| 3332 | 
            +
              StyleGuide: '#keyword-parameters-order'
         | 
| 3333 | 
            +
              Enabled: pending
         | 
| 3334 | 
            +
              VersionAdded: '0.90'
         | 
| 3208 3335 |  | 
| 3209 3336 | 
             
            Style/Lambda:
         | 
| 3210 3337 | 
             
              Description: 'Use the new lambda literal syntax for single-line blocks.'
         | 
| @@ -3579,7 +3706,6 @@ Style/NumericPredicate: | |
| 3579 3706 | 
             
              # object. Switching these methods has to be done with knowledge of the types
         | 
| 3580 3707 | 
             
              # of the variables which rubocop doesn't have.
         | 
| 3581 3708 | 
             
              SafeAutoCorrect: false
         | 
| 3582 | 
            -
              AutoCorrect: false
         | 
| 3583 3709 | 
             
              Enabled: true
         | 
| 3584 3710 | 
             
              VersionAdded: '0.42'
         | 
| 3585 3711 | 
             
              VersionChanged: '0.59'
         | 
| @@ -3595,12 +3721,13 @@ Style/NumericPredicate: | |
| 3595 3721 |  | 
| 3596 3722 | 
             
            Style/OneLineConditional:
         | 
| 3597 3723 | 
             
              Description: >-
         | 
| 3598 | 
            -
                             Favor the ternary operator(?:) over
         | 
| 3599 | 
            -
                             if/then/else/end constructs.
         | 
| 3724 | 
            +
                             Favor the ternary operator (?:) or multi-line constructs over
         | 
| 3725 | 
            +
                             single-line if/then/else/end constructs.
         | 
| 3600 3726 | 
             
              StyleGuide: '#ternary-operator'
         | 
| 3601 3727 | 
             
              Enabled: true
         | 
| 3728 | 
            +
              AlwaysCorrectToMultiline: false
         | 
| 3602 3729 | 
             
              VersionAdded: '0.9'
         | 
| 3603 | 
            -
              VersionChanged: '0. | 
| 3730 | 
            +
              VersionChanged: '0.90'
         | 
| 3604 3731 |  | 
| 3605 3732 | 
             
            Style/OptionHash:
         | 
| 3606 3733 | 
             
              Description: "Don't use option hashes when you can use keyword arguments."
         | 
| @@ -3631,6 +3758,8 @@ Style/OptionalBooleanParameter: | |
| 3631 3758 | 
             
              Enabled: pending
         | 
| 3632 3759 | 
             
              Safe: false
         | 
| 3633 3760 | 
             
              VersionAdded: '0.89'
         | 
| 3761 | 
            +
              AllowedMethods:
         | 
| 3762 | 
            +
                - respond_to_missing?
         | 
| 3634 3763 |  | 
| 3635 3764 | 
             
            Style/OrAssignment:
         | 
| 3636 3765 | 
             
              Description: 'Recommend usage of double pipe equals (||=) where applicable.'
         | 
| @@ -3831,6 +3960,12 @@ Style/RedundantSelf: | |
| 3831 3960 | 
             
              VersionAdded: '0.10'
         | 
| 3832 3961 | 
             
              VersionChanged: '0.13'
         | 
| 3833 3962 |  | 
| 3963 | 
            +
            Style/RedundantSelfAssignment:
         | 
| 3964 | 
            +
              Description: 'Checks for places where redundant assignments are made for in place modification methods.'
         | 
| 3965 | 
            +
              Enabled: pending
         | 
| 3966 | 
            +
              Safe: false
         | 
| 3967 | 
            +
              VersionAdded: '0.90'
         | 
| 3968 | 
            +
             | 
| 3834 3969 | 
             
            Style/RedundantSort:
         | 
| 3835 3970 | 
             
              Description: >-
         | 
| 3836 3971 | 
             
                              Use `min` instead of `sort.first`,
         | 
| @@ -3893,6 +4028,8 @@ Style/SafeNavigation: | |
| 3893 4028 | 
             
                              This cop transforms usages of a method call safeguarded by
         | 
| 3894 4029 | 
             
                              a check for the existence of the object to
         | 
| 3895 4030 | 
             
                              safe navigation (`&.`).
         | 
| 4031 | 
            +
                              Auto-correction is unsafe as it assumes the object will
         | 
| 4032 | 
            +
                              be `nil` or truthy, but never `false`.
         | 
| 3896 4033 | 
             
              Enabled: true
         | 
| 3897 4034 | 
             
              VersionAdded: '0.43'
         | 
| 3898 4035 | 
             
              VersionChanged: '0.77'
         | 
| @@ -3905,6 +4042,7 @@ Style/SafeNavigation: | |
| 3905 4042 | 
             
                - presence
         | 
| 3906 4043 | 
             
                - try
         | 
| 3907 4044 | 
             
                - try!
         | 
| 4045 | 
            +
              SafeAutoCorrect: false
         | 
| 3908 4046 |  | 
| 3909 4047 | 
             
            Style/Sample:
         | 
| 3910 4048 | 
             
              Description: >-
         | 
| @@ -3983,6 +4121,14 @@ Style/SlicingWithRange: | |
| 3983 4121 | 
             
              VersionAdded: '0.83'
         | 
| 3984 4122 | 
             
              Safe: false
         | 
| 3985 4123 |  | 
| 4124 | 
            +
            Style/SoleNestedConditional:
         | 
| 4125 | 
            +
              Description: >-
         | 
| 4126 | 
            +
                              Finds sole nested conditional nodes
         | 
| 4127 | 
            +
                              which can be merged into outer conditional node.
         | 
| 4128 | 
            +
              Enabled: pending
         | 
| 4129 | 
            +
              VersionAdded: '0.89'
         | 
| 4130 | 
            +
              AllowModifier: false
         | 
| 4131 | 
            +
             | 
| 3986 4132 | 
             
            Style/SpecialGlobalVars:
         | 
| 3987 4133 | 
             
              Description: 'Avoid Perl-style global variables.'
         | 
| 3988 4134 | 
             
              StyleGuide: '#no-cryptic-perlisms'
         | 
    
        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.4
         | 
| 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-08 | 
| 11 | 
            +
            date: 2020-10-08 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.93.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.93.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
         |