Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rubygem-rubocop for openSUSE:Factory 
checked in at 2021-01-22 21:50:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-rubocop (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-rubocop.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-rubocop"

Fri Jan 22 21:50:10 2021 rev:21 rq:866024 version:1.8.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-rubocop/rubygem-rubocop.changes  
2021-01-04 19:10:18.887446603 +0100
+++ 
/work/SRC/openSUSE:Factory/.rubygem-rubocop.new.28504/rubygem-rubocop.changes   
    2021-01-22 21:50:26.897689466 +0100
@@ -1,0 +2,48 @@
+Wed Jan 20 13:16:40 UTC 2021 - Stephan Kulow <co...@suse.com>
+
+updated to version 1.8.1
+  no changelog found
+
+-------------------------------------------------------------------
+Fri Jan  8 08:28:48 UTC 2021 - Dan ??erm??k <dcer...@suse.com>
+
+- New upstream release 1.8.0
+
+### New features
+
+* [#9324](https://github.com/rubocop-hq/rubocop/pull/9324): Add new 
`Lint/DeprecatedConstants` cop. ([@koic][])
+* [#9319](https://github.com/rubocop-hq/rubocop/pull/9319): Support asdf's 
.tool-versions file. ([@noon-ng][])
+* [#9301](https://github.com/rubocop-hq/rubocop/pull/9301): Add new 
`Lint/RedundantDirGlobSort` cop. ([@koic][])
+* [#9281](https://github.com/rubocop-hq/rubocop/pull/9281): Add new cop 
`Style/EndlessMethod`. ([@dvandersluis][])
+
+### Bug fixes
+
+* [#9298](https://github.com/rubocop-hq/rubocop/issues/9298): Fix an incorrect 
auto-correct for `Lint/RedundantCopDisableDirective` when there is a blank line 
before inline comment. ([@koic][])
+* [#9233](https://github.com/rubocop-hq/rubocop/issues/9233): Fix 
`Style/SoleNestedConditional` copying non-relevant comments during 
auto-correction. ([@Darhazer][])
+* [#9312](https://github.com/rubocop-hq/rubocop/issues/9312): Fix 
`Layout/FirstHashElementLineBreak` to apply to multi-line hashes with only a 
single element. ([@muirdm][])
+* [#9316](https://github.com/rubocop-hq/rubocop/issues/9316): Fix 
`Style/EmptyLiteral` registering wrong offense when using a numbered block for 
Hash.new, i.e. `Hash.new { _1[_2] = [] }`. ([@agargiulo][])
+* [#9308](https://github.com/rubocop-hq/rubocop/issues/9308): Fix an error for 
`Layout/EmptyLineBetweenDefs` when using endless class method. ([@koic][])
+* [#9314](https://github.com/rubocop-hq/rubocop/issues/9314): Fix an incorrect 
auto-correct for `Style/RedundantReturn` when multiple return values have a 
parenthesized return value. ([@koic][])
+* [#9335](https://github.com/rubocop-hq/rubocop/issues/9335): Fix an incorrect 
auto-correct for `EnforcedStyle: require_parentheses` of 
`Style/MethodCallWithArgsParentheses` with `Style/NestedParenthesizedCalls`. 
([@koic][])
+* [#9290](https://github.com/rubocop-hq/rubocop/issues/9290): Fix a false 
positive for `Layout/SpaceBeforeBrackets` when using array literal method 
argument. ([@koic][])
+* [#9333](https://github.com/rubocop-hq/rubocop/issues/9333): Fix an error for 
`Style/IfInsideElse` when using a modifier `if` nested inside an `else` after 
`elsif`. ([@koic][])
+* [#9303](https://github.com/rubocop-hq/rubocop/issues/9303): Fix an incorrect 
auto-correct for `Style/RaiseArgs` with `EnforcedStyle: compact` when using 
exception instantiation argument. ([@koic][])
+
+### Changes
+
+* [#9300](https://github.com/rubocop-hq/rubocop/pull/9300): Make 
`Lint/NonDeterministicRequireOrder` not to register offense when using Ruby 3.0 
or higher. ([@koic][])
+* [#9320](https://github.com/rubocop-hq/rubocop/pull/9320): Support 
unicode-display_width v2. ([@dduugg][])
+* [#9288](https://github.com/rubocop-hq/rubocop/pull/9288): Require Parser 
3.0.0.0 or higher. ([@koic][])
+* [#9337](https://github.com/rubocop-hq/rubocop/issues/9337): Add 
`AllowedIdentifiers` to `Naming/VariableName`. ([@dvandersluis][])
+* [#9295](https://github.com/rubocop-hq/rubocop/pull/9295): Update 
`Style/SingleLineMethods` to correct to an endless method definition if they 
are allowed. ([@dvandersluis][])
+* [#9331](https://github.com/rubocop-hq/rubocop/pull/9331): Mark 
`Style/MutableConstant` as unsafe. ([@koic][])
+
+[@koic]: https://github.com/koic
+[@noon-ng]: https://github.com/noon-ng
+[@dvandersluis]: https://github.com/dvandersluis
+[@Darhazer]: https://github.com/Darhazer
+[@muirdm]: https://github.com/muirdm
+[@agargiulo]: https://github.com/agargiulo
+[@dduugg]: https://github.com/dduugg
+
+-------------------------------------------------------------------

Old:
----
  rubocop-1.7.0.gem

New:
----
  rubocop-1.8.1.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-rubocop.spec ++++++
--- /var/tmp/diff_new_pack.cyN7uj/_old  2021-01-22 21:50:27.485690300 +0100
+++ /var/tmp/diff_new_pack.cyN7uj/_new  2021-01-22 21:50:27.493690312 +0100
@@ -16,28 +16,29 @@
 #
 
 
-%define mod_name rubocop
-%define mod_full_name %{mod_name}-%{version}
 #
 # This file was generated with a gem2rpm.yml and not just plain gem2rpm.
 # All sections marked as MANUAL, license headers, summaries and descriptions
 # can be maintained in that file. Please consult this file before editing any
 # of those fields
 #
+
 Name:           rubygem-rubocop
-Version:        1.7.0
+Version:        1.8.1
 Release:        0
-Summary:        Automatic Ruby code style checking tool
-License:        MIT
-Group:          Development/Languages/Ruby
-URL:            https://github.com/rubocop-hq/rubocop
-Source:         https://rubygems.org/gems/%{mod_full_name}.gem
-Source1:        gem2rpm.yml
+%define mod_name rubocop
+%define mod_full_name %{mod_name}-%{version}
+BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  %{ruby >= 2.4.0}
 BuildRequires:  %{rubygem gem2rpm}
 BuildRequires:  ruby-macros >= 5
 BuildRequires:  update-alternatives
-# FIXME: use proper Requires(pre/post/preun/...)
+URL:            https://github.com/rubocop-hq/rubocop
+Source:         https://rubygems.org/gems/%{mod_full_name}.gem
+Source1:        gem2rpm.yml
+Summary:        Automatic Ruby code style checking tool
+License:        MIT
+Group:          Development/Languages/Ruby
 PreReq:         update-alternatives
 
 %description

++++++ rubocop-1.7.0.gem -> rubocop-1.8.1.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/LICENSE.txt new/LICENSE.txt
--- old/LICENSE.txt     2020-12-25 08:21:01.000000000 +0100
+++ new/LICENSE.txt     2021-01-11 12:18:17.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright (c) 2012-20 Bozhidar Batsov
+Copyright (c) 2012-21 Bozhidar Batsov
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md       2020-12-25 08:21:01.000000000 +0100
+++ new/README.md       2021-01-11 12:18:17.000000000 +0100
@@ -51,7 +51,7 @@
 in your `Gemfile`:
 
 ```rb
-gem 'rubocop', '~> 1.7', require: false
+gem 'rubocop', '~> 1.8', require: false
 ```
 
 See [versioning](https://docs.rubocop.org/rubocop/1.0/versioning.html) for 
further details.
@@ -109,6 +109,7 @@
 * [Maxim Krizhanovski](https://github.com/darhazer)
 * [Benjamin Quorning](https://github.com/bquorning)
 * [Marc-Andr?? Lafortune](https://github.com/marcandre)
+* [Daniel Vandersluis](https://github.com/dvandersluis)
 
 See the [team page](https://docs.rubocop.org/rubocop/about/team.html) for more 
details.
 
@@ -241,5 +242,5 @@
 
 ## Copyright
 
-Copyright (c) 2012-2020 Bozhidar Batsov. See [LICENSE.txt](LICENSE.txt) for
+Copyright (c) 2012-2021 Bozhidar Batsov. See [LICENSE.txt](LICENSE.txt) for
 further details.
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/default.yml new/config/default.yml
--- old/config/default.yml      2020-12-25 08:21:01.000000000 +0100
+++ new/config/default.yml      2021-01-11 12:18:17.000000000 +0100
@@ -132,12 +132,13 @@
   # If a value is specified for TargetRubyVersion then it is used. Acceptable
   # values are specificed as a float (i.e. 2.5); the teeny version of Ruby
   # should not be included. If the project specifies a Ruby version in the
-  # .ruby-version file, Gemfile or gems.rb file, RuboCop will try to determine
-  # the desired version of Ruby by inspecting the .ruby-version file first,
-  # followed by the Gemfile.lock or gems.locked file. (Although the Ruby 
version
-  # is specified in the Gemfile or gems.rb file, RuboCop reads the final value
-  # from the lock file.) If the Ruby version is still unresolved, RuboCop will
-  # use the oldest officially supported Ruby version (currently Ruby 2.4).
+  # .tool-versions or .ruby-version files, Gemfile or gems.rb file, RuboCop 
will
+  # try to determine the desired version of Ruby by inspecting the
+  # .tool-versions file first, then .ruby-version, followed by the Gemfile.lock
+  # or gems.locked file. (Although the Ruby version is specified in the Gemfile
+  # or gems.rb file, RuboCop reads the final value from the lock file.) If the
+  # Ruby version is still unresolved, RuboCop will use the oldest officially
+  # supported Ruby version (currently Ruby 2.4).
   TargetRubyVersion: ~
   # Determines if a notification for extension libraries should be shown when
   # rubocop is run. Keys are the name of the extension, and values are an array
@@ -1197,7 +1198,6 @@
   StyleGuide: '#space-in-brackets-access'
   Enabled: pending
   VersionAdded: '1.7'
-  Safe: false
 
 Layout/SpaceBeforeComma:
   Description: 'No spaces before commas.'
@@ -1469,6 +1469,34 @@
   Enabled: true
   VersionAdded: '0.19'
 
+Lint/DeprecatedConstants:
+  Description: 'Checks for deprecated constants.'
+  Enabled: pending
+  VersionAdded: '1.8'
+  # You can configure deprecated constants.
+  # If there is an alternative method, you can set alternative value as 
`Alternative`.
+  # And you can set the deprecated version as `DeprecatedVersion`.
+  # These options can be omitted if they are not needed.
+  #
+  # DeprecatedConstants:
+  #   'DEPRECATED_CONSTANT':
+  #     Alternative: 'alternative_value'
+  #     DeprecatedVersion: 'deprecated_version'
+  #
+  DeprecatedConstants:
+    'NIL':
+      Alternative: 'nil'
+      DeprecatedVersion: '2.4'
+    'TRUE':
+      Alternative: 'true'
+      DeprecatedVersion: '2.4'
+    'FALSE':
+      Alternative: 'false'
+      DeprecatedVersion: '2.4'
+    'Random::DEFAULT':
+      Alternative: 'Random.new'
+      DeprecatedVersion: '3.0'
+
 Lint/DeprecatedOpenSSLConstant:
   Description: "Don't use algorithm constants for `OpenSSL::Cipher` and 
`OpenSSL::Digest`."
   Enabled: true
@@ -1674,6 +1702,11 @@
   VersionAdded: '0.50'
   VersionChanged: '0.87'
 
+Lint/LambdaWithoutLiteralBlock:
+  Description: 'Checks uses of lambda without a literal block.'
+  Enabled: pending
+  VersionAdded: '1.8'
+
 Lint/LiteralAsCondition:
   Description: 'Checks of literals used in conditions.'
   Enabled: true
@@ -1836,6 +1869,11 @@
   Enabled: true
   VersionAdded: '0.76'
 
+Lint/RedundantDirGlobSort:
+  Description: 'Checks for redundant `sort` method to `Dir.glob` and `Dir[]`.'
+  Enabled: pending
+  VersionAdded: '1.8'
+
 Lint/RedundantRequireStatement:
   Description: 'Checks for unnecessary `require` statement.'
   Enabled: true
@@ -2502,10 +2540,12 @@
   StyleGuide: '#snake-case-symbols-methods-vars'
   Enabled: true
   VersionAdded: '0.50'
+  VersionChanged: '1.8'
   EnforcedStyle: snake_case
   SupportedStyles:
     - snake_case
     - camelCase
+  AllowedIdentifiers: []
 
 Naming/VariableNumber:
   Description: 'Use the configured style when numbering symbols, methods and 
variables.'
@@ -3197,6 +3237,17 @@
   VersionAdded: '0.9'
   VersionChanged: '0.81'
 
+Style/EndlessMethod:
+  Description: 'Avoid the use of multi-lined endless method definitions.'
+  StyleGuide: '#endless-methods'
+  Enabled: pending
+  VersionAdded: '1.8'
+  EnforcedStyle: allow_single_line
+  SupportedStyles:
+    - allow_single_line
+    - allow_always
+    - disallow
+
 Style/EvalWithLocation:
   Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are 
used by backtraces.'
   Enabled: true
@@ -3220,9 +3271,8 @@
                   that just passes its arguments to another block.
   StyleGuide: '#block-argument'
   Enabled: true
-  # May change the yielding arity.
-  Safe: false
   VersionAdded: '0.89'
+  VersionChanged: '1.8'
 
 Style/ExponentialNotation:
   Description: 'When using exponential notation, favor a mantissa between 1 
(inclusive) and 10 (exclusive).'
@@ -3726,7 +3776,8 @@
   Description: 'Do not assign mutable objects to constants.'
   Enabled: true
   VersionAdded: '0.34'
-  VersionChanged: '0.65'
+  VersionChanged: '1.8'
+  SafeAutoCorrect: false
   EnforcedStyle: literals
   SupportedStyles:
     # literals: freeze literals assigned to constants
@@ -4330,7 +4381,7 @@
   StyleGuide: '#no-single-line-methods'
   Enabled: true
   VersionAdded: '0.9'
-  VersionChanged: '1.7'
+  VersionChanged: '1.8'
   AllowIfMethodIsEmpty: true
 
 Style/SlicingWithRange:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/comment_config.rb 
new/lib/rubocop/comment_config.rb
--- old/lib/rubocop/comment_config.rb   2020-12-25 08:21:01.000000000 +0100
+++ new/lib/rubocop/comment_config.rb   2021-01-11 12:18:17.000000000 +0100
@@ -47,6 +47,12 @@
       )
     end
 
+    def comment_only_line?(line_number)
+      non_comment_token_line_numbers.none? do |non_comment_line_number|
+        non_comment_line_number == line_number
+      end
+    end
+
     private
 
     def extra_enabled_comments_with_names(extras:, names:)
@@ -166,12 +172,6 @@
       @all_cop_names ||= Cop::Registry.global.names - [REDUNDANT_DISABLE]
     end
 
-    def comment_only_line?(line_number)
-      non_comment_token_line_numbers.none? do |non_comment_line_number|
-        non_comment_line_number == line_number
-      end
-    end
-
     def non_comment_token_line_numbers
       @non_comment_token_line_numbers ||= begin
         non_comment_tokens = processed_source.tokens.reject(&:comment?)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/config_loader.rb 
new/lib/rubocop/config_loader.rb
--- old/lib/rubocop/config_loader.rb    2020-12-25 08:21:01.000000000 +0100
+++ new/lib/rubocop/config_loader.rb    2021-01-11 12:18:17.000000000 +0100
@@ -175,7 +175,7 @@
       end
 
       def loaded_features
-        @loaded_features.flatten.compact
+        @loaded_features.flatten.compact.uniq
       end
 
       # @api private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/layout/empty_line_between_defs.rb 
new/lib/rubocop/cop/layout/empty_line_between_defs.rb
--- old/lib/rubocop/cop/layout/empty_line_between_defs.rb       2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/layout/empty_line_between_defs.rb       2021-01-11 
12:18:17.000000000 +0100
@@ -210,7 +210,7 @@
         end
 
         def end_loc(node)
-          if node.def_type? && node.endless?
+          if (node.def_type? || node.defs_type?) && node.endless?
             node.loc.expression.end
           else
             node.loc.end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/rubocop/cop/layout/multiline_operation_indentation.rb 
new/lib/rubocop/cop/layout/multiline_operation_indentation.rb
--- old/lib/rubocop/cop/layout/multiline_operation_indentation.rb       
2020-12-25 08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/layout/multiline_operation_indentation.rb       
2021-01-11 12:18:17.000000000 +0100
@@ -16,14 +16,14 @@
       #   if a +
       #       b
       #     something &&
-      #     something_else
+      #       something_else
       #   end
       #
       #   # good
       #   if a +
       #      b
       #     something &&
-      #       something_else
+      #     something_else
       #   end
       #
       # @example EnforcedStyle: indented
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/layout/space_before_brackets.rb 
new/lib/rubocop/cop/layout/space_before_brackets.rb
--- old/lib/rubocop/cop/layout/space_before_brackets.rb 2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/layout/space_before_brackets.rb 2021-01-11 
12:18:17.000000000 +0100
@@ -6,10 +6,6 @@
       # Checks for space between the name of a receiver and a left
       # brackets.
       #
-      # This cop is marked as unsafe because it can occur false positives
-      # for `do_something [this_is_an_array_literal_argument]` that take
-      # an array without parentheses as an argument.
-      #
       # @example
       #
       #   # bad
@@ -25,21 +21,23 @@
         MSG = 'Remove the space before the opening brackets.'
 
         def on_send(node)
-          return if node.parenthesized? || node.parent&.send_type?
           return unless (first_argument = node.first_argument)
 
           begin_pos = first_argument.source_range.begin_pos
-
-          return unless (range = offense_range(node, first_argument, 
begin_pos))
+          return unless (range = offense_range(node, begin_pos))
 
           register_offense(range)
         end
 
         private
 
-        def offense_range(node, first_argument, begin_pos)
-          if space_before_brackets?(node, first_argument)
-            range_between(node.loc.selector.end_pos, begin_pos)
+        def offense_range(node, begin_pos)
+          if reference_variable_with_brackets?(node)
+            receiver_end_pos = node.receiver.source_range.end_pos
+            selector_begin_pos = node.loc.selector.begin_pos
+            return if receiver_end_pos >= selector_begin_pos
+
+            range_between(receiver_end_pos, selector_begin_pos)
           elsif node.method?(:[]=)
             end_pos = node.receiver.source_range.end_pos
 
@@ -55,8 +53,8 @@
           end
         end
 
-        def space_before_brackets?(node, first_argument)
-          node.receiver.nil? && first_argument.array_type? && 
node.arguments.size == 1
+        def reference_variable_with_brackets?(node)
+          node.receiver&.variable? && node.method?(:[]) && node.arguments.size 
== 1
         end
       end
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/lint/deprecated_constants.rb 
new/lib/rubocop/cop/lint/deprecated_constants.rb
--- old/lib/rubocop/cop/lint/deprecated_constants.rb    1970-01-01 
01:00:00.000000000 +0100
+++ new/lib/rubocop/cop/lint/deprecated_constants.rb    2021-01-11 
12:18:17.000000000 +0100
@@ -0,0 +1,75 @@
+# frozen_string_literal: true
+
+module RuboCop
+  module Cop
+    module Lint
+      # This cop checks for deprecated constants.
+      #
+      # It has `DeprecatedConstants` config. If there is an alternative 
method, you can set
+      # alternative value as `Alternative`. And you can set the deprecated 
version as
+      # `DeprecatedVersion`. These options can be omitted if they are not 
needed.
+      #
+      #   DeprecatedConstants:
+      #     'DEPRECATED_CONSTANT':
+      #       Alternative: 'alternative_value'
+      #       DeprecatedVersion: 'deprecated_version'
+      #
+      # By default, `NIL`, `TRUE`, `FALSE` and `Random::DEFAULT` are 
configured.
+      #
+      # @example
+      #
+      #   # bad
+      #   NIL
+      #   TRUE
+      #   FALSE
+      #   Random::DEFAULT # Return value of Ruby 2 is `Random` instance, Ruby 
3.0 is `Random` class.
+      #
+      #   # good
+      #   nil
+      #   true
+      #   false
+      #   Random.new # `::DEFAULT` has been deprecated in Ruby 3, `.new` is 
compatible with Ruby 2.
+      #
+      class DeprecatedConstants < Base
+        extend AutoCorrector
+
+        SUGGEST_GOOD_MSG = 'Use `%<good>s` instead of 
`%<bad>s`%<deprecated_message>s.'
+        DO_NOT_USE_MSG = 'Do not use `%<bad>s`%<deprecated_message>s.'
+
+        def on_const(node)
+          constant = node.absolute? ? consntant_name(node, 
node.short_name.to_s) : node.source
+          return unless (deprecated_constant = deprecated_constants[constant])
+
+          alternative = deprecated_constant['Alternative']
+          version = deprecated_constant['DeprecatedVersion']
+
+          add_offense(node, message: message(alternative, node.source, 
version)) do |corrector|
+            corrector.replace(node, alternative)
+          end
+        end
+
+        private
+
+        def consntant_name(node, nested_constant_name)
+          return nested_constant_name unless node.namespace.const_type?
+
+          consntant_name(node.namespace, 
"#{node.namespace.short_name}::#{nested_constant_name}")
+        end
+
+        def message(good, bad, deprecated_version)
+          deprecated_message = ", deprecated since Ruby #{deprecated_version}" 
if deprecated_version
+
+          if good
+            format(SUGGEST_GOOD_MSG, good: good, bad: bad, deprecated_message: 
deprecated_message)
+          else
+            format(DO_NOT_USE_MSG, bad: bad, deprecated_message: 
deprecated_message)
+          end
+        end
+
+        def deprecated_constants
+          cop_config.fetch('DeprecatedConstants', {})
+        end
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/lint/lambda_without_literal_block.rb 
new/lib/rubocop/cop/lint/lambda_without_literal_block.rb
--- old/lib/rubocop/cop/lint/lambda_without_literal_block.rb    1970-01-01 
01:00:00.000000000 +0100
+++ new/lib/rubocop/cop/lint/lambda_without_literal_block.rb    2021-01-11 
12:18:17.000000000 +0100
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+module RuboCop
+  module Cop
+    module Lint
+      # This cop checks uses of lambda without a literal block.
+      # It emulates the following warning in Ruby 3.0:
+      #
+      #   % ruby -vwe 'lambda(&proc {})'
+      #   ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin19]
+      #   -e:1: warning: lambda without a literal block is deprecated; use the 
proc without
+      #   lambda instead
+      #
+      # This way, proc object is never converted to lambda.
+      # Auto-correction replaces with compatible proc argument.
+      #
+      # @example
+      #
+      #   # bad
+      #   lambda(&proc { do_something })
+      #   lambda(&Proc.new { do_something })
+      #
+      #   # good
+      #   proc { do_something }
+      #   Proc.new { do_something }
+      #   lambda { do_something } # If you use lambda.
+      #
+      class LambdaWithoutLiteralBlock < Base
+        extend AutoCorrector
+
+        MSG = 'lambda without a literal block is deprecated; use the proc 
without lambda instead.'
+        RESTRICT_ON_SEND = %i[lambda].freeze
+
+        def on_send(node)
+          return if node.parent&.block_type? || !node.first_argument
+
+          add_offense(node) do |corrector|
+            corrector.replace(node, node.first_argument.source.delete('&'))
+          end
+        end
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/rubocop/cop/lint/non_deterministic_require_order.rb 
new/lib/rubocop/cop/lint/non_deterministic_require_order.rb
--- old/lib/rubocop/cop/lint/non_deterministic_require_order.rb 2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/lint/non_deterministic_require_order.rb 2021-01-11 
12:18:17.000000000 +0100
@@ -11,6 +11,11 @@
       # that are hard to debug. To ensure this doesn't happen,
       # always sort the list.
       #
+      # `Dir.glob` and `Dir[]` sort globbed results by default in Ruby 3.0.
+      # So all bad cases are acceptable when Ruby 3.0 or higher are used.
+      #
+      # This cop will be deprecated and removed when supporting only Ruby 3.0 
and higher.
+      #
       # @example
       #
       #   # bad
@@ -23,8 +28,6 @@
       #     require file
       #   end
       #
-      # @example
-      #
       #   # bad
       #   Dir.glob(Rails.root.join(__dir__, 'test', '*.rb')) do |file|
       #     require file
@@ -35,28 +38,28 @@
       #     require file
       #   end
       #
-      # @example
-      #
       #   # bad
       #   Dir['./lib/**/*.rb'].each(&method(:require))
       #
       #   # good
       #   Dir['./lib/**/*.rb'].sort.each(&method(:require))
       #
-      # @example
-      #
       #   # bad
       #   Dir.glob(Rails.root.join('test', '*.rb'), &method(:require))
       #
       #   # good
       #   Dir.glob(Rails.root.join('test', 
'*.rb')).sort.each(&method(:require))
       #
+      #   # good - Respect intent if `sort` keyword option is specified in 
Ruby 3.0 or higher.
+      #   Dir.glob(Rails.root.join(__dir__, 'test', '*.rb'), sort: 
false).each(&method(:require))
+      #
       class NonDeterministicRequireOrder < Base
         extend AutoCorrector
 
         MSG = 'Sort files before requiring them.'
 
         def on_block(node)
+          return if target_ruby_version >= 3.0
           return unless node.body
           return unless unsorted_dir_loop?(node.send_node)
 
@@ -70,6 +73,7 @@
         end
 
         def on_block_pass(node)
+          return if target_ruby_version >= 3.0
           return unless method_require?(node)
           return unless unsorted_dir_pass?(node.parent)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb 
new/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb
--- old/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb 2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb 2021-01-11 
12:18:17.000000000 +0100
@@ -61,7 +61,8 @@
         end
 
         def comment_range_with_surrounding_space(range)
-          if previous_line_blank?(range)
+          if previous_line_blank?(range) &&
+             processed_source.comment_config.comment_only_line?(range.line)
             # When the previous line is blank, it should be retained
             range_with_surrounding_space(range: range, side: :right)
           else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb 
new/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb
--- old/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb 1970-01-01 
01:00:00.000000000 +0100
+++ new/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb 2021-01-11 
12:18:17.000000000 +0100
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+module RuboCop
+  module Cop
+    module Lint
+      # Sort globbed results by default in Ruby 3.0.
+      # This cop checks for redundant `sort` method to `Dir.glob` and `Dir[]`.
+      #
+      # @example
+      #
+      #   # bad
+      #   Dir.glob('./lib/**/*.rb').sort.each do |file|
+      #   end
+      #
+      #   Dir['./lib/**/*.rb'].sort.each do |file|
+      #   end
+      #
+      #   # good
+      #   Dir.glob('./lib/**/*.rb').each do |file|
+      #   end
+      #
+      #   Dir['./lib/**/*.rb'].each do |file|
+      #   end
+      #
+      class RedundantDirGlobSort < Base
+        extend AutoCorrector
+        extend TargetRubyVersion
+
+        minimum_target_ruby_version 3.0
+
+        MSG = 'Remove redundant `sort`.'
+        RESTRICT_ON_SEND = %i[sort].freeze
+        GLOB_METHODS = %i[glob []].freeze
+
+        def on_send(node)
+          return unless (receiver = node.receiver)
+          return unless receiver.receiver&.const_type? && 
receiver.receiver.short_name == :Dir
+          return unless GLOB_METHODS.include?(receiver.method_name)
+
+          selector = node.loc.selector
+
+          add_offense(selector) do |corrector|
+            corrector.remove(selector)
+            corrector.remove(node.loc.dot)
+          end
+        end
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/mixin/allowed_identifiers.rb 
new/lib/rubocop/cop/mixin/allowed_identifiers.rb
--- old/lib/rubocop/cop/mixin/allowed_identifiers.rb    1970-01-01 
01:00:00.000000000 +0100
+++ new/lib/rubocop/cop/mixin/allowed_identifiers.rb    2021-01-11 
12:18:17.000000000 +0100
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+module RuboCop
+  module Cop
+    # This module encapsulates the ability to allow certain identifiers in a 
cop.
+    module AllowedIdentifiers
+      SIGILS = '@$' # if a variable starts with a sigil it will be removed
+
+      def allowed_identifier?(name)
+        allowed_identifiers.include?(name.to_s.delete(SIGILS))
+      end
+
+      def allowed_identifiers
+        cop_config.fetch('AllowedIdentifiers', [])
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/mixin/comments_help.rb 
new/lib/rubocop/cop/mixin/comments_help.rb
--- old/lib/rubocop/cop/mixin/comments_help.rb  2020-12-25 08:21:01.000000000 
+0100
+++ new/lib/rubocop/cop/mixin/comments_help.rb  2021-01-11 12:18:17.000000000 
+0100
@@ -22,16 +22,7 @@
       end
 
       def begin_pos_with_comment(node)
-        annotation_line = node.first_line - 1
-        first_comment = nil
-
-        processed_source.comments_before_line(annotation_line)
-                        .reverse_each do |comment|
-          if comment.location.line == annotation_line
-            first_comment = comment
-            annotation_line -= 1
-          end
-        end
+        first_comment = processed_source.ast_with_comments[node].first
 
         start_line_position(first_comment || node)
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/mixin/first_element_line_break.rb 
new/lib/rubocop/cop/mixin/first_element_line_break.rb
--- old/lib/rubocop/cop/mixin/first_element_line_break.rb       2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/mixin/first_element_line_break.rb       2021-01-11 
12:18:17.000000000 +0100
@@ -21,7 +21,7 @@
       end
 
       def check_children_line_break(node, children, start = node)
-        return if children.size < 2
+        return if children.empty?
 
         line = start.first_line
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/mixin/uncommunicative_name.rb 
new/lib/rubocop/cop/mixin/uncommunicative_name.rb
--- old/lib/rubocop/cop/mixin/uncommunicative_name.rb   2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/mixin/uncommunicative_name.rb   2021-01-11 
12:18:17.000000000 +0100
@@ -24,7 +24,11 @@
           name = full_name.gsub(/\A(_+)/, '')
           next if allowed_names.include?(name)
 
-          range = arg_range(arg, name.size)
+          length = full_name.size
+          length += 1 if arg.restarg_type?
+          length += 2 if arg.kwrestarg_type?
+
+          range = arg_range(arg, length)
           issue_offenses(node, range, name)
         end
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/naming/variable_name.rb 
new/lib/rubocop/cop/naming/variable_name.rb
--- old/lib/rubocop/cop/naming/variable_name.rb 2020-12-25 08:21:01.000000000 
+0100
+++ new/lib/rubocop/cop/naming/variable_name.rb 2021-01-11 12:18:17.000000000 
+0100
@@ -20,6 +20,7 @@
       #   # good
       #   fooBar = 1
       class VariableName < Base
+        include AllowedIdentifiers
         include ConfigurableNaming
 
         MSG = 'Use %<style>s for variable names.'
@@ -27,6 +28,7 @@
         def on_lvasgn(node)
           name, = *node
           return unless name
+          return if allowed_identifier?(name)
 
           check_name(node, name, node.loc.name)
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/naming/variable_number.rb 
new/lib/rubocop/cop/naming/variable_number.rb
--- old/lib/rubocop/cop/naming/variable_number.rb       2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/naming/variable_number.rb       2021-01-11 
12:18:17.000000000 +0100
@@ -97,6 +97,7 @@
       #   expect(Open3).to receive(:capture3)
       #
       class VariableNumber < Base
+        include AllowedIdentifiers
         include ConfigurableNumbering
 
         MSG = 'Use %<style>s for %<identifier_type>s numbers.'
@@ -139,14 +140,6 @@
 
           format(MSG, style: style, identifier_type: identifier_type)
         end
-
-        def allowed_identifier?(name)
-          allowed_identifiers.include?(name.to_s.delete('@'))
-        end
-
-        def allowed_identifiers
-          cop_config.fetch('AllowedIdentifiers', [])
-        end
       end
     end
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/empty_literal.rb 
new/lib/rubocop/cop/style/empty_literal.rb
--- old/lib/rubocop/cop/style/empty_literal.rb  2020-12-25 08:21:01.000000000 
+0100
+++ new/lib/rubocop/cop/style/empty_literal.rb  2021-01-11 12:18:17.000000000 
+0100
@@ -32,8 +32,12 @@
         def_node_matcher :str_node, '(send (const {nil? cbase} :String) :new)'
         def_node_matcher :array_with_block,
                          '(block (send (const {nil? cbase} :Array) :new) args 
_)'
-        def_node_matcher :hash_with_block,
-                         '(block (send (const {nil? cbase} :Hash) :new) args 
_)'
+        def_node_matcher :hash_with_block, <<~PATTERN
+          {
+            (block (send (const {nil? cbase} :Hash) :new) args _)
+            (numblock (send (const {nil? cbase} :Hash) :new) ...)
+          }
+        PATTERN
 
         def on_send(node)
           return unless (message = offense_message(node))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/endless_method.rb 
new/lib/rubocop/cop/style/endless_method.rb
--- old/lib/rubocop/cop/style/endless_method.rb 1970-01-01 01:00:00.000000000 
+0100
+++ new/lib/rubocop/cop/style/endless_method.rb 2021-01-11 12:18:17.000000000 
+0100
@@ -0,0 +1,102 @@
+# frozen_string_literal: true
+
+module RuboCop
+  module Cop
+    module Style
+      # This cop checks for endless methods.
+      #
+      # It can enforce either the use of endless methods definitions
+      # for single-lined method bodies, or disallow endless methods.
+      #
+      # Other method definition types are not considered by this cop.
+      #
+      # The supported styles are:
+      # * allow_single_line (default) - only single line endless method 
definitions are allowed.
+      # * allow_always - all endless method definitions are allowed.
+      # * disallow - all endless method definitions are disallowed.
+      #
+      # NOTE: Incorrect endless method definitions will always be
+      # corrected to a multi-line definition.
+      #
+      # @example EnforcedStyle: allow_single_line (default)
+      #   # good
+      #   def my_method() = x
+      #
+      #   # bad, multi-line endless method
+      #   def my_method() = x.foo
+      #                      .bar
+      #                      .baz
+      #
+      # @example EnforcedStyle: allow_always
+      #   # good
+      #   def my_method() = x
+      #
+      #   # good
+      #   def my_method() = x.foo
+      #                      .bar
+      #                      .baz
+      #
+      # @example EnforcedStyle: disallow
+      #   # bad
+      #   def my_method; x end
+      #
+      #   # bad
+      #   def my_method() = x.foo
+      #                      .bar
+      #                      .baz
+      #
+      class EndlessMethod < Base
+        include ConfigurableEnforcedStyle
+        extend TargetRubyVersion
+        extend AutoCorrector
+
+        minimum_target_ruby_version 3.0
+
+        CORRECTION_STYLES = %w[multiline single_line].freeze
+        MSG = 'Avoid endless method definitions.'
+        MSG_MULTI_LINE = 'Avoid endless method definitions with multiple 
lines.'
+
+        def on_def(node)
+          if style == :disallow
+            handle_disallow_style(node)
+          else
+            handle_allow_style(node)
+          end
+        end
+
+        private
+
+        def handle_allow_style(node)
+          return unless node.endless?
+          return if node.single_line? || style == :allow_always
+
+          add_offense(node, message: MSG_MULTI_LINE) do |corrector|
+            correct_to_multiline(corrector, node)
+          end
+        end
+
+        def handle_disallow_style(node)
+          return unless node.endless?
+
+          add_offense(node) do |corrector|
+            correct_to_multiline(corrector, node)
+          end
+        end
+
+        def correct_to_multiline(corrector, node)
+          replacement = <<~RUBY.strip
+            def #{node.method_name}#{arguments(node)}
+              #{node.body.source}
+            end
+          RUBY
+
+          corrector.replace(node, replacement)
+        end
+
+        def arguments(node, missing = '')
+          node.arguments.any? ? node.arguments.source : missing
+        end
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/explicit_block_argument.rb 
new/lib/rubocop/cop/style/explicit_block_argument.rb
--- old/lib/rubocop/cop/style/explicit_block_argument.rb        2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/style/explicit_block_argument.rb        2021-01-11 
12:18:17.000000000 +0100
@@ -6,6 +6,9 @@
       # This cop enforces the use of explicit block argument to avoid writing
       # block literal that just passes its arguments to another block.
       #
+      # NOTE: This cop only registers an offense if the block args match the
+      # yield args exactly.
+      #
       # @example
       #   # bad
       #   def with_tmp_dir
@@ -75,7 +78,14 @@
         private
 
         def yielding_arguments?(block_args, yield_args)
+          yield_args = yield_args.dup.fill(
+            nil,
+            yield_args.length, block_args.length - yield_args.length
+          )
+
           yield_args.zip(block_args).all? do |yield_arg, block_arg|
+            next false unless yield_arg && block_arg
+
             block_arg && yield_arg.children.first == block_arg.children.first
           end
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/hash_like_case.rb 
new/lib/rubocop/cop/style/hash_like_case.rb
--- old/lib/rubocop/cop/style/hash_like_case.rb 2020-12-25 08:21:01.000000000 
+0100
+++ new/lib/rubocop/cop/style/hash_like_case.rb 2021-01-11 12:18:17.000000000 
+0100
@@ -68,7 +68,8 @@
           length = cop_config['MinBranchesCount'] || 3
           return length if length.is_a?(Integer) && length.positive?
 
-          raise 'MinBranchesCount needs to be a positive integer!'
+          warn Rainbow('`MinBranchesCount` needs to be a positive 
integer!').red
+          exit!
         end
       end
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/if_inside_else.rb 
new/lib/rubocop/cop/style/if_inside_else.rb
--- old/lib/rubocop/cop/style/if_inside_else.rb 2020-12-25 08:21:01.000000000 
+0100
+++ new/lib/rubocop/cop/style/if_inside_else.rb 2021-01-11 12:18:17.000000000 
+0100
@@ -82,12 +82,10 @@
         def autocorrect(corrector, node)
           if node.modifier_form?
             correct_to_elsif_from_modifier_form(corrector, node)
-            end_range = node.parent.loc.end
           else
             correct_to_elsif_from_if_inside_else_form(corrector, node, 
node.condition)
-            end_range = node.loc.end
           end
-          corrector.remove(range_by_whole_lines(end_range, 
include_final_newline: true))
+          corrector.remove(range_by_whole_lines(find_end_range(node), 
include_final_newline: true))
           corrector.remove(
             range_by_whole_lines(node.if_branch.source_range, 
include_final_newline: true)
           )
@@ -110,6 +108,13 @@
           corrector.remove(condition)
         end
 
+        def find_end_range(node)
+          end_range = node.loc.end
+          return end_range if end_range
+
+          find_end_range(node.parent)
+        end
+
         def allow_if_modifier_in_else_branch?(else_branch)
           allow_if_modifier? && else_branch&.modifier_form?
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/rubocop/cop/style/method_call_with_args_parentheses.rb 
new/lib/rubocop/cop/style/method_call_with_args_parentheses.rb
--- old/lib/rubocop/cop/style/method_call_with_args_parentheses.rb      
2020-12-25 08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/style/method_call_with_args_parentheses.rb      
2021-01-11 12:18:17.000000000 +0100
@@ -157,6 +157,10 @@
         include OmitParentheses
         extend AutoCorrector
 
+        def self.autocorrect_incompatible_with
+          [Style::NestedParenthesizedCalls]
+        end
+
         def on_send(node)
           send(style, node) # call require_parentheses or omit_parentheses
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/nested_parenthesized_calls.rb 
new/lib/rubocop/cop/style/nested_parenthesized_calls.rb
--- old/lib/rubocop/cop/style/nested_parenthesized_calls.rb     2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/style/nested_parenthesized_calls.rb     2021-01-11 
12:18:17.000000000 +0100
@@ -19,6 +19,10 @@
 
         MSG = 'Add parentheses to nested method call `%<source>s`.'
 
+        def self.autocorrect_incompatible_with
+          [Style::MethodCallWithArgsParentheses]
+        end
+
         def on_send(node)
           return unless node.parenthesized?
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/raise_args.rb 
new/lib/rubocop/cop/style/raise_args.rb
--- old/lib/rubocop/cop/style/raise_args.rb     2020-12-25 08:21:01.000000000 
+0100
+++ new/lib/rubocop/cop/style/raise_args.rb     2021-01-11 12:18:17.000000000 
+0100
@@ -81,11 +81,12 @@
           return node.source if message_nodes.size > 1
 
           argument = message_nodes.first.source
+          exception_class = exception_node.const_name || 
exception_node.receiver.source
 
           if node.parent && requires_parens?(node.parent)
-            
"#{node.method_name}(#{exception_node.const_name}.new(#{argument}))"
+            "#{node.method_name}(#{exception_class}.new(#{argument}))"
           else
-            "#{node.method_name} #{exception_node.const_name}.new(#{argument})"
+            "#{node.method_name} #{exception_class}.new(#{argument})"
           end
         end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/redundant_return.rb 
new/lib/rubocop/cop/style/redundant_return.rb
--- old/lib/rubocop/cop/style/redundant_return.rb       2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/style/redundant_return.rb       2021-01-11 
12:18:17.000000000 +0100
@@ -66,7 +66,7 @@
         end
 
         def correct_with_arguments(return_node, corrector)
-          if return_node.arguments.size > 1
+          if return_node.children.size > 1
             add_brackets(corrector, return_node)
           elsif hash_without_braces?(return_node.first_argument)
             add_braces(corrector, return_node.first_argument)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/single_line_methods.rb 
new/lib/rubocop/cop/style/single_line_methods.rb
--- old/lib/rubocop/cop/style/single_line_methods.rb    2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/style/single_line_methods.rb    2021-01-11 
12:18:17.000000000 +0100
@@ -8,6 +8,10 @@
       #
       # Endless methods added in Ruby 3.0 are also accepted by this cop.
       #
+      # If `Style/EndlessMethod` is enabled with `EnforcedStyle: allow` or
+      # `allow_always`, single-line methods will be auto-corrected to endless
+      # methods if there is only one statement in the body.
+      #
       # @example
       #   # bad
       #   def some_method; body end
@@ -47,6 +51,28 @@
         private
 
         def autocorrect(corrector, node)
+          if correct_to_endless?(node.body)
+            correct_to_endless(corrector, node)
+          else
+            correct_to_multiline(corrector, node)
+          end
+        end
+
+        def allow_empty?
+          cop_config['AllowIfMethodIsEmpty']
+        end
+
+        def correct_to_endless?(body_node)
+          endless_method_config = config.for_cop('Style/EndlessMethod')
+
+          return false unless endless_method_config['Enabled']
+          return false if endless_method_config['EnforcedStyle'] == 'disallow'
+          return false unless body_node
+
+          !(body_node.begin_type? || body_node.kwbegin_type?)
+        end
+
+        def correct_to_multiline(corrector, node)
           each_part(node.body) do |part|
             LineBreakCorrector.break_line_before(
               range: part, node: node, corrector: corrector,
@@ -62,8 +88,10 @@
           move_comment(node, corrector)
         end
 
-        def allow_empty?
-          cop_config['AllowIfMethodIsEmpty']
+        def correct_to_endless(corrector, node)
+          arguments = node.arguments.any? ? node.arguments.source : '()'
+          replacement = "def #{node.method_name}#{arguments} = 
#{node.body.source}"
+          corrector.replace(node, replacement)
         end
 
         def each_part(body)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/sole_nested_conditional.rb 
new/lib/rubocop/cop/style/sole_nested_conditional.rb
--- old/lib/rubocop/cop/style/sole_nested_conditional.rb        2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/style/sole_nested_conditional.rb        2021-01-11 
12:18:17.000000000 +0100
@@ -63,13 +63,13 @@
         end
 
         def autocorrect(corrector, node, if_branch)
+          corrector.wrap(node.condition, '(', ')') if node.condition.or_type?
+
           if node.unless?
             corrector.replace(node.loc.keyword, 'if')
             corrector.insert_before(node.condition, '!')
           end
 
-          corrector.wrap(node.condition, '(', ')') if node.condition.or_type?
-
           and_operator = if_branch.unless? ? ' && !' : ' && '
           if if_branch.modifier_form?
             correct_for_guard_condition_style(corrector, node, if_branch, 
and_operator)
@@ -100,7 +100,7 @@
         def correct_for_comment(corrector, node, if_branch)
           return if config.for_cop('Style/IfUnlessModifier')['Enabled']
 
-          comments = 
processed_source.comments_before_line(if_branch.source_range.line)
+          comments = processed_source.ast_with_comments[if_branch]
           comment_text = comments.map(&:text).join("\n") << "\n"
 
           corrector.insert_before(node.loc.keyword, comment_text) unless 
comments.empty?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/string_concatenation.rb 
new/lib/rubocop/cop/style/string_concatenation.rb
--- old/lib/rubocop/cop/style/string_concatenation.rb   2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/style/string_concatenation.rb   2021-01-11 
12:18:17.000000000 +0100
@@ -116,7 +116,7 @@
             parts.map do |part|
               if part.str_type?
                 if single_quoted?(part)
-                  part.value.gsub('\\') { '\\\\' }
+                  part.value.gsub(/(\\|")/, '\\\\\&')
                 else
                   part.value.inspect[1..-2]
                 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/cop/style/while_until_modifier.rb 
new/lib/rubocop/cop/style/while_until_modifier.rb
--- old/lib/rubocop/cop/style/while_until_modifier.rb   2020-12-25 
08:21:01.000000000 +0100
+++ new/lib/rubocop/cop/style/while_until_modifier.rb   2021-01-11 
12:18:17.000000000 +0100
@@ -41,12 +41,10 @@
               'having a single-line body.'
 
         def on_while(node)
-          return unless node.multiline? && single_line_as_modifier?(node)
+          return unless single_line_as_modifier?(node)
 
           add_offense(node.loc.keyword, message: format(MSG, keyword: 
node.keyword)) do |corrector|
-            oneline = "#{node.body.source} #{node.keyword} 
#{node.condition.source}"
-
-            corrector.replace(node, oneline)
+            corrector.replace(node, to_modifier_form(node))
           end
         end
         alias on_until on_while
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/target_ruby.rb 
new/lib/rubocop/target_ruby.rb
--- old/lib/rubocop/target_ruby.rb      2020-12-25 08:21:01.000000000 +0100
+++ new/lib/rubocop/target_ruby.rb      2021-01-11 12:18:17.000000000 +0100
@@ -44,33 +44,61 @@
     # The target ruby version may be found in a .ruby-version file.
     # @api private
     class RubyVersionFile < Source
-      FILENAME = '.ruby-version'
+      RUBY_VERSION_FILENAME = '.ruby-version'
+      RUBY_VERSION_PATTERN = /\A(?:ruby-)?(?<version>\d+\.\d+)/.freeze
 
       def name
-        "`#{FILENAME}`"
+        "`#{RUBY_VERSION_FILENAME}`"
       end
 
       private
 
+      def filename
+        RUBY_VERSION_FILENAME
+      end
+
+      def pattern
+        RUBY_VERSION_PATTERN
+      end
+
       def find_version
-        file = ruby_version_file
+        file = version_file
         return unless file && File.file?(file)
 
-        # rubocop:disable Lint/MixedRegexpCaptureTypes
-        # `(ruby-)` is not a capture type.
-        File.read(file).match(/\A(ruby-)?(?<version>\d+\.\d+)/) do |md|
-          # rubocop:enable Lint/MixedRegexpCaptureTypes
+        File.read(file).match(pattern) do |md|
           md[:version].to_f
         end
       end
 
-      def ruby_version_file
-        @ruby_version_file ||=
-          @config.find_file_upwards(FILENAME,
+      def version_file
+        @version_file ||=
+          @config.find_file_upwards(filename,
                                     @config.base_dir_for_path_parameters)
       end
     end
 
+    # The target ruby version may be found in a .tool-versions file, in a line
+    # starting with `ruby`.
+    # @api private
+    class ToolVersionsFile < RubyVersionFile
+      TOOL_VERSIONS_FILENAME = '.tool-versions'
+      TOOL_VERSIONS_PATTERN = /\Aruby (?:ruby-)?(?<version>\d+\.\d+)/.freeze
+
+      def name
+        "`#{TOOL_VERSIONS_FILENAME}`"
+      end
+
+      private
+
+      def filename
+        TOOL_VERSIONS_FILENAME
+      end
+
+      def pattern
+        TOOL_VERSIONS_PATTERN
+      end
+    end
+
     # The lock file of Bundler may identify the target ruby version.
     # @api private
     class BundlerLockFile < Source
@@ -194,7 +222,15 @@
       KNOWN_RUBIES
     end
 
-    SOURCES = [RuboCopConfig, RubyVersionFile, BundlerLockFile, GemspecFile, 
Default].freeze
+    SOURCES = [
+      RuboCopConfig,
+      RubyVersionFile,
+      ToolVersionsFile,
+      BundlerLockFile,
+      GemspecFile,
+      Default
+    ].freeze
+
     private_constant :SOURCES
 
     def initialize(config)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop/version.rb new/lib/rubocop/version.rb
--- old/lib/rubocop/version.rb  2020-12-25 08:21:01.000000000 +0100
+++ new/lib/rubocop/version.rb  2021-01-11 12:18:17.000000000 +0100
@@ -3,7 +3,7 @@
 module RuboCop
   # This module holds the RuboCop version information.
   module Version
-    STRING = '1.7.0'
+    STRING = '1.8.1'
 
     MSG = '%<version>s (using Parser %<parser_version>s, '\
           'rubocop-ast %<rubocop_ast_version>s, ' \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rubocop.rb new/lib/rubocop.rb
--- old/lib/rubocop.rb  2020-12-25 08:21:01.000000000 +0100
+++ new/lib/rubocop.rb  2021-01-11 12:18:17.000000000 +0100
@@ -7,7 +7,7 @@
 require 'set'
 require 'forwardable'
 require 'regexp_parser'
-require 'unicode/display_width/no_string_ext'
+require 'unicode/display_width'
 
 # we have to require RuboCop's version, before rubocop-ast's
 require_relative 'rubocop/version'
@@ -61,6 +61,7 @@
 require_relative 'rubocop/cop/mixin/array_min_size'
 require_relative 'rubocop/cop/mixin/array_syntax'
 require_relative 'rubocop/cop/mixin/alignment'
+require_relative 'rubocop/cop/mixin/allowed_identifiers'
 require_relative 'rubocop/cop/mixin/allowed_methods'
 require_relative 'rubocop/cop/mixin/auto_corrector'
 require_relative 'rubocop/cop/mixin/check_assignment'
@@ -262,6 +263,7 @@
 require_relative 'rubocop/cop/lint/constant_resolution'
 require_relative 'rubocop/cop/lint/debugger'
 require_relative 'rubocop/cop/lint/deprecated_class_methods'
+require_relative 'rubocop/cop/lint/deprecated_constants'
 require_relative 'rubocop/cop/lint/deprecated_open_ssl_constant'
 require_relative 'rubocop/cop/lint/disjunctive_assignment_in_constructor'
 require_relative 'rubocop/cop/lint/duplicate_branch'
@@ -295,6 +297,7 @@
 require_relative 'rubocop/cop/lint/inherit_exception'
 require_relative 'rubocop/cop/lint/ineffective_access_modifier'
 require_relative 'rubocop/cop/lint/interpolation_check'
+require_relative 'rubocop/cop/lint/lambda_without_literal_block'
 require_relative 'rubocop/cop/lint/literal_as_condition'
 require_relative 'rubocop/cop/lint/literal_in_interpolation'
 require_relative 'rubocop/cop/lint/loop'
@@ -318,6 +321,7 @@
 require_relative 'rubocop/cop/lint/rand_one'
 require_relative 'rubocop/cop/lint/redundant_cop_disable_directive'
 require_relative 'rubocop/cop/lint/redundant_cop_enable_directive'
+require_relative 'rubocop/cop/lint/redundant_dir_glob_sort'
 require_relative 'rubocop/cop/lint/redundant_require_statement'
 require_relative 'rubocop/cop/lint/redundant_safe_navigation'
 require_relative 'rubocop/cop/lint/redundant_splat_expansion'
@@ -446,6 +450,7 @@
 require_relative 'rubocop/cop/style/empty_lambda_parameter'
 require_relative 'rubocop/cop/style/empty_literal'
 require_relative 'rubocop/cop/style/empty_method'
+require_relative 'rubocop/cop/style/endless_method'
 require_relative 'rubocop/cop/style/encoding'
 require_relative 'rubocop/cop/style/end_block'
 require_relative 'rubocop/cop/style/eval_with_location'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2020-12-25 08:21:01.000000000 +0100
+++ new/metadata        2021-01-11 12:18:17.000000000 +0100
@@ -1,7 +1,7 @@
 --- !ruby/object:Gem::Specification
 name: rubocop
 version: !ruby/object:Gem::Version
-  version: 1.7.0
+  version: 1.8.1
 platform: ruby
 authors:
 - Bozhidar Batsov
@@ -10,7 +10,7 @@
 autorequire: 
 bindir: exe
 cert_chain: []
-date: 2020-12-25 00:00:00.000000000 Z
+date: 2021-01-11 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: parallel
@@ -32,14 +32,14 @@
     requirements:
     - - ">="
       - !ruby/object:Gem::Version
-        version: 2.7.1.5
+        version: 3.0.0.0
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - ">="
       - !ruby/object:Gem::Version
-        version: 2.7.1.5
+        version: 3.0.0.0
 - !ruby/object:Gem::Dependency
   name: rainbow
   requirement: !ruby/object:Gem::Requirement
@@ -137,7 +137,7 @@
         version: 1.4.0
     - - "<"
       - !ruby/object:Gem::Version
-        version: '2.0'
+        version: '3.0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
@@ -147,7 +147,7 @@
         version: 1.4.0
     - - "<"
       - !ruby/object:Gem::Version
-        version: '2.0'
+        version: '3.0'
 - !ruby/object:Gem::Dependency
   name: bundler
   requirement: !ruby/object:Gem::Requirement
@@ -368,6 +368,7 @@
 - lib/rubocop/cop/lint/constant_resolution.rb
 - lib/rubocop/cop/lint/debugger.rb
 - lib/rubocop/cop/lint/deprecated_class_methods.rb
+- lib/rubocop/cop/lint/deprecated_constants.rb
 - lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb
 - lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb
 - lib/rubocop/cop/lint/duplicate_branch.rb
@@ -401,6 +402,7 @@
 - lib/rubocop/cop/lint/ineffective_access_modifier.rb
 - lib/rubocop/cop/lint/inherit_exception.rb
 - lib/rubocop/cop/lint/interpolation_check.rb
+- lib/rubocop/cop/lint/lambda_without_literal_block.rb
 - lib/rubocop/cop/lint/literal_as_condition.rb
 - lib/rubocop/cop/lint/literal_in_interpolation.rb
 - lib/rubocop/cop/lint/loop.rb
@@ -424,6 +426,7 @@
 - lib/rubocop/cop/lint/rand_one.rb
 - lib/rubocop/cop/lint/redundant_cop_disable_directive.rb
 - lib/rubocop/cop/lint/redundant_cop_enable_directive.rb
+- lib/rubocop/cop/lint/redundant_dir_glob_sort.rb
 - lib/rubocop/cop/lint/redundant_require_statement.rb
 - lib/rubocop/cop/lint/redundant_safe_navigation.rb
 - lib/rubocop/cop/lint/redundant_splat_expansion.rb
@@ -485,6 +488,7 @@
 - lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb
 - lib/rubocop/cop/migration/department_name.rb
 - lib/rubocop/cop/mixin/alignment.rb
+- lib/rubocop/cop/mixin/allowed_identifiers.rb
 - lib/rubocop/cop/mixin/allowed_methods.rb
 - lib/rubocop/cop/mixin/annotation_comment.rb
 - lib/rubocop/cop/mixin/array_min_size.rb
@@ -627,6 +631,7 @@
 - lib/rubocop/cop/style/empty_method.rb
 - lib/rubocop/cop/style/encoding.rb
 - lib/rubocop/cop/style/end_block.rb
+- lib/rubocop/cop/style/endless_method.rb
 - lib/rubocop/cop/style/eval_with_location.rb
 - lib/rubocop/cop/style/even_odd.rb
 - lib/rubocop/cop/style/expand_path_arguments.rb
@@ -851,7 +856,7 @@
   homepage_uri: https://rubocop.org/
   changelog_uri: https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md
   source_code_uri: https://github.com/rubocop-hq/rubocop/
-  documentation_uri: https://docs.rubocop.org/rubocop/1.7/
+  documentation_uri: https://docs.rubocop.org/rubocop/1.8/
   bug_tracker_uri: https://github.com/rubocop-hq/rubocop/issues
 post_install_message: 
 rdoc_options: []

Reply via email to