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 2022-03-10 22:46:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-rubocop (Old)
and /work/SRC/openSUSE:Factory/.rubygem-rubocop.new.2349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-rubocop"
Thu Mar 10 22:46:05 2022 rev:35 rq:960905 version:1.26.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-rubocop/rubygem-rubocop.changes
2022-02-24 18:23:38.702655480 +0100
+++
/work/SRC/openSUSE:Factory/.rubygem-rubocop.new.2349/rubygem-rubocop.changes
2022-03-11 11:35:30.558214000 +0100
@@ -1,0 +2,29 @@
+Thu Mar 10 16:37:22 UTC 2022 - Manuel Schnitzer <[email protected]>
+
+- updated to version 1.26.0
+
+ ### New features
+
+ * [#10419](https://github.com/rubocop/rubocop/pull/10419): Add new
`Style/NestedFileDirname` cop. ([@koic][])
+ * [#10433](https://github.com/rubocop/rubocop/pull/10433): Support
`TargetRubyVersion 3.2` (experimental). ([@koic][])
+
+ ### Bug fixes
+
+ * [#10406](https://github.com/rubocop/rubocop/pull/10406): Fix a false
positive for `Lint/InheritException` when inheriting a standard lib exception
class that is not a subclass of `StandardError`. ([@koic][])
+ * [#10421](https://github.com/rubocop/rubocop/issues/10421): Make
`Style/DefWithParentheses` aware of endless method definition. ([@koic][])
+ * [#10401](https://github.com/rubocop/rubocop/issues/10401): Fix a false
positive for `Style/HashSyntax` when local variable hash key and hash value are
the same. ([@koic][])
+ * [#10424](https://github.com/rubocop/rubocop/pull/10424): Fix a false
positive for `Security/YamlLoad` when using Ruby 3.1+ (Psych 4). ([@koic][])
+ * [#10446](https://github.com/rubocop/rubocop/pull/10446):
Lint/RedundantDirGlobSort unset SafeAutoCorrect. ([@friendlyantz][])
+ * [#10403](https://github.com/rubocop/rubocop/issues/10403): Fix an error
for `Style/StringConcatenation` when string concatenation with multiline
heredoc text. ([@koic][])
+ * [#10432](https://github.com/rubocop/rubocop/pull/10432): Fix an error when
using regexp with non-encoding option. ([@koic][])
+ * [#10415](https://github.com/rubocop/rubocop/issues/10415): Fix an error
for `Lint/UselessTimes` when using `1.times` with method chain. ([@koic][])
+
+ ### Changes
+
+ * [#10408](https://github.com/rubocop/rubocop/pull/10408): Mark
`Lint/InheritException` as unsafe auto-correction. ([@koic][])
+ * [#10407](https://github.com/rubocop/rubocop/pull/10407): Change
`EnforcedStyle` from `runtime_error` to `standard_error` for
`Lint/InheritException`. ([@koic][])
+ * [#10414](https://github.com/rubocop/rubocop/pull/10414): Update
auto-gen-config's auto-correction comments to be more clear. ([@maxjacobson][])
+ * [#10427](https://github.com/rubocop/rubocop/issues/10427): Mark
`Style/For` as unsafe auto-correction. ([@issyl0][])
+ * [#10410](https://github.com/rubocop/rubocop/issues/10410): Improve help
string for `--fail-level` CLI option. ([@tejasbubane][])
+
+-------------------------------------------------------------------
Old:
----
rubocop-1.25.1.gem
New:
----
rubocop-1.26.0.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-rubocop.spec ++++++
--- /var/tmp/diff_new_pack.BqLIFx/_old 2022-03-11 11:35:31.034214558 +0100
+++ /var/tmp/diff_new_pack.BqLIFx/_new 2022-03-11 11:35:31.038214563 +0100
@@ -24,7 +24,7 @@
#
Name: rubygem-rubocop
-Version: 1.25.1
+Version: 1.26.0
Release: 0
%define mod_name rubocop
%define mod_full_name %{mod_name}-%{version}
++++++ rubocop-1.25.1.gem -> rubocop-1.26.0.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 2022-02-03 07:44:29.000000000 +0100
+++ new/README.md 2022-03-09 17:40:19.000000000 +0100
@@ -53,7 +53,7 @@
in your `Gemfile`:
```rb
-gem 'rubocop', '~> 1.25', require: false
+gem 'rubocop', '~> 1.26', require: false
```
See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html)
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 2022-02-03 07:44:29.000000000 +0100
+++ new/config/default.yml 2022-03-09 17:40:19.000000000 +0100
@@ -262,7 +262,7 @@
- '**/*.gemspec'
Gemspec/RequireMFA:
- Description: 'Checks that the gemspec has metadata to require MFA from
RubyGems.'
+ Description: 'Checks that the gemspec has metadata to require Multi-Factor
Authentication from RubyGems.'
Enabled: pending
VersionAdded: '1.23'
Reference:
@@ -1816,12 +1816,14 @@
Lint/InheritException:
Description: 'Avoid inheriting from the `Exception` class.'
Enabled: true
+ SafeAutoCorrect: false
VersionAdded: '0.41'
+ VersionChanged: '1.26'
# The default base class in favour of `Exception`.
- EnforcedStyle: runtime_error
+ EnforcedStyle: standard_error
SupportedStyles:
- - runtime_error
- standard_error
+ - runtime_error
Lint/InterpolationCheck:
Description: 'Raise warning for interpolation in single q strs.'
@@ -2011,6 +2013,8 @@
Description: 'Checks for redundant `sort` method to `Dir.glob` and `Dir[]`.'
Enabled: pending
VersionAdded: '1.8'
+ VersionChanged: '1.26'
+ SafeAutoCorrect: false
Lint/RedundantRequireStatement:
Description: 'Checks for unnecessary `require` statement.'
@@ -3542,8 +3546,9 @@
Description: 'Checks use of for or each in multiline loops.'
StyleGuide: '#no-for-loops'
Enabled: true
+ SafeAutoCorrect: false
VersionAdded: '0.13'
- VersionChanged: '0.59'
+ VersionChanged: '1.26'
EnforcedStyle: each
SupportedStyles:
- each
@@ -4122,6 +4127,11 @@
Enabled: true
VersionAdded: '0.20'
+Style/NestedFileDirname:
+ Description: 'Checks for nested `File.dirname`.'
+ Enabled: pending
+ VersionAdded: '1.26'
+
Style/NestedModifier:
Description: 'Avoid using nested modifiers.'
StyleGuide: '#no-nested-modifiers'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cli.rb new/lib/rubocop/cli.rb
--- old/lib/rubocop/cli.rb 2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/cli.rb 2022-03-09 17:40:19.000000000 +0100
@@ -14,7 +14,7 @@
ignore_disable_comments lint only only_guide_cops require safe
].freeze
- class Finished < RuntimeError; end
+ class Finished < StandardError; end
attr_reader :options, :config_store
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/badge.rb new/lib/rubocop/cop/badge.rb
--- old/lib/rubocop/cop/badge.rb 2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/badge.rb 2022-03-09 17:40:19.000000000 +0100
@@ -19,7 +19,13 @@
end
def self.parse(identifier)
- new(identifier.split('/'))
+ new(identifier.split('/').map { |i| camel_case(i) })
+ end
+
+ def self.camel_case(name_part)
+ return 'RSpec' if name_part == 'rspec'
+
+ name_part.gsub(/^\w|_\w/) { |match| match[-1, 1].upcase }
end
def initialize(class_name_parts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/gemspec/require_mfa.rb
new/lib/rubocop/cop/gemspec/require_mfa.rb
--- old/lib/rubocop/cop/gemspec/require_mfa.rb 2022-02-03 07:44:29.000000000
+0100
+++ new/lib/rubocop/cop/gemspec/require_mfa.rb 2022-03-09 17:40:19.000000000
+0100
@@ -5,9 +5,10 @@
module Gemspec
# Requires a gemspec to have `rubygems_mfa_required` metadata set.
#
- # This setting tells RubyGems that MFA is required for accounts to
- # be able perform privileged operations, such as (see
- # RubyGems' documentation for the full list of privileged operations):
+ # This setting tells RubyGems that MFA (Multi-Factor Authentication) is
+ # required for accounts to be able perform privileged operations, such as
+ # (see RubyGems' documentation for the full list of privileged
+ # operations):
#
# * `gem push`
# * `gem yank`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/generator.rb
new/lib/rubocop/cop/generator.rb
--- old/lib/rubocop/cop/generator.rb 2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/generator.rb 2022-03-09 17:40:19.000000000 +0100
@@ -8,13 +8,7 @@
# and spec file when given a valid qualified cop name.
# @api private
class Generator
- # NOTE: RDoc 5.1.0 or lower has the following issue.
- # https://github.com/rubocop/rubocop/issues/7043
- #
- # The following `String#gsub` can be replaced with
- # squiggly heredoc when RuboCop supports Ruby 2.5 or higher
- # (RDoc 6.0 or higher).
- SOURCE_TEMPLATE = <<-RUBY.gsub(/^ {8}/, '')
+ SOURCE_TEMPLATE = <<~RUBY
# frozen_string_literal: true
module RuboCop
@@ -68,6 +62,7 @@
# For example
MSG = 'Use `#good_method` instead of `#bad_method`.'
+ # @!method bad_method?(node)
def_node_matcher :bad_method?, <<~PATTERN
(send nil? :bad_method ...)
PATTERN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb
new/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb
--- old/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb
2022-03-09 17:40:19.000000000 +0100
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+module RuboCop
+ module Cop
+ module InternalAffairs
+ # Checks for redundant `:config` parameter in the `context` arguments.
+ #
+ # @example
+ #
+ # # bad
+ # context 'foo', :config do
+ # end
+ #
+ # # good
+ # context 'foo' do
+ # end
+ #
+ class RedundantContextConfigParameter < Base
+ include RangeHelp
+ extend AutoCorrector
+
+ MSG = 'Remove the redundant `:config` parameter.'
+ RESTRICT_ON_SEND = %i[context].freeze
+
+ def on_send(node)
+ arguments = node.arguments
+ config_node = arguments.detect { |argument| argument.source ==
':config' }
+ return unless config_node
+
+ add_offense(config_node) do |corrector|
+ dup_arguments = arguments.dup
+ dup_arguments.delete(config_node)
+
+ corrector.replace(offense_range(arguments),
dup_arguments.map(&:source).join(', '))
+ end
+ end
+
+ private
+
+ def offense_range(arguments)
+ range_between(arguments.first.source_range.begin_pos,
arguments.last.source_range.end_pos)
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/internal_affairs.rb
new/lib/rubocop/cop/internal_affairs.rb
--- old/lib/rubocop/cop/internal_affairs.rb 2022-02-03 07:44:29.000000000
+0100
+++ new/lib/rubocop/cop/internal_affairs.rb 2022-03-09 17:40:19.000000000
+0100
@@ -9,6 +9,7 @@
require_relative 'internal_affairs/node_matcher_directive'
require_relative 'internal_affairs/node_type_predicate'
require_relative 'internal_affairs/offense_location_keyword'
+require_relative 'internal_affairs/redundant_context_config_parameter'
require_relative 'internal_affairs/redundant_described_class_as_subject'
require_relative 'internal_affairs/redundant_let_rubocop_config_new'
require_relative 'internal_affairs/redundant_location_argument'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/layout/case_indentation.rb
new/lib/rubocop/cop/layout/case_indentation.rb
--- old/lib/rubocop/cop/layout/case_indentation.rb 2022-02-03
07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/layout/case_indentation.rb 2022-03-09
17:40:19.000000000 +0100
@@ -3,7 +3,7 @@
module RuboCop
module Cop
module Layout
- # This cop checks how the `when` and `in`s of a `case` expression
+ # This cop checks how the `when` and ``in``s of a `case` expression
# are indented in relation to its `case` or `end` keyword.
#
# It will register a separate offense for each misaligned `when` and
`in`.
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
2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/layout/multiline_operation_indentation.rb
2022-03-09 17:40:19.000000000 +0100
@@ -3,27 +3,26 @@
module RuboCop
module Cop
module Layout
- # This cop checks the indentation of the right hand side operand in
- # binary operations that span more than one line.
+ # This cop checks the indentation of the right hand side operand in
binary operations that
+ # span more than one line.
#
- # The `aligned` style checks that operators are aligned if they are part
- # of an `if` or `while` condition, a `return` statement, etc. In other
- # contexts, the second operand should be indented regardless of enforced
- # style.
+ # The `aligned` style checks that operators are aligned if they are part
of an `if` or `while`
+ # condition, an explicit `return` statement, etc. In other contexts, the
second operand should
+ # be indented regardless of enforced style.
#
# @example EnforcedStyle: aligned (default)
# # bad
# 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/lint/inherit_exception.rb
new/lib/rubocop/cop/lint/inherit_exception.rb
--- old/lib/rubocop/cop/lint/inherit_exception.rb 2022-02-03
07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/lint/inherit_exception.rb 2022-03-09
17:40:19.000000000 +0100
@@ -3,12 +3,16 @@
module RuboCop
module Cop
module Lint
- # This cop looks for error classes inheriting from `Exception`
- # and its standard library subclasses, excluding subclasses of
- # `StandardError`. It is configurable to suggest using either
- # `RuntimeError` (default) or `StandardError` instead.
+ # This cop looks for error classes inheriting from `Exception`.
+ # It is configurable to suggest using either `StandardError` (default) or
+ # `RuntimeError` instead.
+ #
+ # @safety
+ # This cop's autocorrection is unsafe because `rescue` that omit
+ # exception class handle `StandardError` and its subclasses,
+ # but not `Exception` and its subclasses.
#
- # @example EnforcedStyle: runtime_error (default)
+ # @example EnforcedStyle: standard_error (default)
# # bad
#
# class C < Exception; end
@@ -17,11 +21,11 @@
#
# # good
#
- # class C < RuntimeError; end
+ # class C < StandardError; end
#
- # C = Class.new(RuntimeError)
+ # C = Class.new(StandardError)
#
- # @example EnforcedStyle: standard_error
+ # @example EnforcedStyle: runtime_error
# # bad
#
# class C < Exception; end
@@ -30,31 +34,18 @@
#
# # good
#
- # class C < StandardError; end
+ # class C < RuntimeError; end
#
- # C = Class.new(StandardError)
+ # C = Class.new(RuntimeError)
class InheritException < Base
include ConfigurableEnforcedStyle
extend AutoCorrector
- MSG = 'Inherit from `%<prefer>s` instead of `%<current>s`.'
+ MSG = 'Inherit from `%<prefer>s` instead of `Exception`.'
PREFERRED_BASE_CLASS = {
runtime_error: 'RuntimeError',
standard_error: 'StandardError'
}.freeze
- ILLEGAL_CLASSES = %w[
- Exception
- SystemStackError
- NoMemoryError
- SecurityError
- NotImplementedError
- LoadError
- SyntaxError
- ScriptError
- Interrupt
- SignalException
- SystemExit
- ].freeze
RESTRICT_ON_SEND = %i[new].freeze
@@ -66,7 +57,7 @@
PATTERN
def on_class(node)
- return unless node.parent_class &&
illegal_class_name?(node.parent_class)
+ return unless node.parent_class &&
exception_class?(node.parent_class)
message = message(node.parent_class)
@@ -77,7 +68,7 @@
def on_send(node)
constant = class_new_call?(node)
- return unless constant && illegal_class_name?(constant)
+ return unless constant && exception_class?(constant)
message = message(constant)
@@ -92,8 +83,8 @@
format(MSG, prefer: preferred_base_class, current: node.const_name)
end
- def illegal_class_name?(class_node)
- ILLEGAL_CLASSES.include?(class_node.const_name)
+ def exception_class?(class_node)
+ class_node.const_name == 'Exception'
end
def preferred_base_class
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb
new/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb
--- old/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb
2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb
2022-03-09 17:40:19.000000000 +0100
@@ -19,7 +19,7 @@
include RangeHelp
extend AutoCorrector
- MSG = '`(...)` interpreted as grouped expression.'
+ MSG = '`%<argument>s` interpreted as grouped expression.'
def on_send(node)
return if valid_context?(node)
@@ -28,8 +28,9 @@
return unless space_length.positive?
range = space_range(node.first_argument.source_range, space_length)
+ message = format(MSG, argument: node.first_argument.source)
- add_offense(range) { |corrector| corrector.remove(range) }
+ add_offense(range, message: message) { |corrector|
corrector.remove(range) }
end
alias on_csend on_send
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 2022-02-03
07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb 2022-03-09
17:40:19.000000000 +0100
@@ -6,6 +6,11 @@
# Sort globbed results by default in Ruby 3.0.
# This cop checks for redundant `sort` method to `Dir.glob` and `Dir[]`.
#
+ # @safety
+ # This cop is unsafe, in case of having a file and a directory with
+ # identical names, since directory will be loaded before the file, which
+ # will break `exe/files.rb` that rely on `exe.rb` file.
+ #
# @example
#
# # bad
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/lint/useless_times.rb
new/lib/rubocop/cop/lint/useless_times.rb
--- old/lib/rubocop/cop/lint/useless_times.rb 2022-02-03 07:44:29.000000000
+0100
+++ new/lib/rubocop/cop/lint/useless_times.rb 2022-03-09 17:40:19.000000000
+0100
@@ -51,20 +51,24 @@
node = node.block_node if node.block_literal?
add_offense(node, message: format(MSG, count: count)) do |corrector|
- next unless own_line?(node)
+ next if !own_line?(node) || node.parent&.send_type?
- if never_process?(count, node)
- remove_node(corrector, node)
- elsif !proc_name.empty?
- autocorrect_block_pass(corrector, node, proc_name)
- else
- autocorrect_block(corrector, node)
- end
+ autocorrect(corrector, count, node, proc_name)
end
end
private
+ def autocorrect(corrector, count, node, proc_name)
+ if never_process?(count, node)
+ remove_node(corrector, node)
+ elsif !proc_name.empty?
+ autocorrect_block_pass(corrector, node, proc_name)
+ else
+ autocorrect_block(corrector, node)
+ end
+ end
+
def never_process?(count, node)
count < 1 || (node.block_type? && node.body.nil?)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb
new/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb
--- old/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb 2022-02-03
07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb 2022-03-09
17:40:19.000000000 +0100
@@ -41,7 +41,7 @@
end
def require_hash_value?(hash_key_source, node)
- return true if require_hash_value_for_around_hash_literal?(node)
+ return true if !node.key.sym_type? ||
require_hash_value_for_around_hash_literal?(node)
hash_value = node.value
return true unless hash_value.send_type? || hash_value.lvar_type?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/security/yaml_load.rb
new/lib/rubocop/cop/security/yaml_load.rb
--- old/lib/rubocop/cop/security/yaml_load.rb 2022-02-03 07:44:29.000000000
+0100
+++ new/lib/rubocop/cop/security/yaml_load.rb 2022-03-09 17:40:19.000000000
+0100
@@ -7,17 +7,21 @@
# potential security issues leading to remote code execution when
# loading from an untrusted source.
#
+ # NOTE: Ruby 3.1+ (Psych 4) uses `Psych.load` as `Psych.safe_load` by
default.
+ #
# @safety
# The behaviour of the code might change depending on what was
# in the YAML payload, since `YAML.safe_load` is more restrictive.
#
# @example
# # bad
- # YAML.load("--- foo")
+ # YAML.load("--- !ruby/object:Foo {}") # Psych 3 is unsafe by default
#
# # good
- # YAML.safe_load("--- foo")
- # YAML.dump("foo")
+ # YAML.safe_load("--- !ruby/object:Foo {}", [Foo])
# Ruby 2.5 (Psych 3)
+ # YAML.safe_load("--- !ruby/object:Foo {}", permitted_classes: [Foo])
# Ruby 3.0- (Psych 3)
+ # YAML.load("--- !ruby/object:Foo {}", permitted_classes: [Foo])
# Ruby 3.1+ (Psych 4)
+ # YAML.dump(foo)
#
class YAMLLoad < Base
extend AutoCorrector
@@ -31,6 +35,8 @@
PATTERN
def on_send(node)
+ return if target_ruby_version >= 3.1
+
yaml_load(node) do
add_offense(node.loc.selector) do |corrector|
corrector.replace(node.loc.selector, 'safe_load')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/style/def_with_parentheses.rb
new/lib/rubocop/cop/style/def_with_parentheses.rb
--- old/lib/rubocop/cop/style/def_with_parentheses.rb 2022-02-03
07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/style/def_with_parentheses.rb 2022-03-09
17:40:19.000000000 +0100
@@ -11,27 +11,33 @@
#
# # bad
# def foo()
- # # does a thing
+ # do_something
# end
#
# # good
# def foo
- # # does a thing
+ # do_something
# end
#
- # # also good
- # def foo() does_a_thing end
+ # # bad
+ # def foo() = do_something
+ #
+ # # good
+ # def foo = do_something
+ #
+ # # good (without parentheses it's a syntax error)
+ # def foo() do_something end
#
# @example
#
# # bad
# def Baz.foo()
- # # does a thing
+ # do_something
# end
#
# # good
# def Baz.foo
- # # does a thing
+ # do_something
# end
class DefWithParentheses < Base
extend AutoCorrector
@@ -39,12 +45,11 @@
MSG = "Omit the parentheses in defs when the method doesn't accept any
arguments."
def on_def(node)
- return if node.single_line?
- return unless !node.arguments? && (node_arguments_loc_begin =
node.arguments.loc.begin)
+ return if node.single_line? && !node.endless?
+ return unless !node.arguments? && (node_arguments =
node.arguments.source_range)
- add_offense(node_arguments_loc_begin) do |corrector|
- corrector.remove(node_arguments_loc_begin)
- corrector.remove(node.arguments.loc.end)
+ add_offense(node_arguments) do |corrector|
+ corrector.remove(node_arguments)
end
end
alias on_defs on_def
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/style/for.rb
new/lib/rubocop/cop/style/for.rb
--- old/lib/rubocop/cop/style/for.rb 2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/style/for.rb 2022-03-09 17:40:19.000000000 +0100
@@ -38,6 +38,10 @@
# end
# end
#
+ # @safety
+ # This cop's autocorrection is unsafe because the scope of
+ # variables is different between `each` and `for`.
+ #
class For < Base
include ConfigurableEnforcedStyle
include RangeHelp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/style/lambda_call.rb
new/lib/rubocop/cop/style/lambda_call.rb
--- old/lib/rubocop/cop/style/lambda_call.rb 2022-02-03 07:44:29.000000000
+0100
+++ new/lib/rubocop/cop/style/lambda_call.rb 2022-03-09 17:40:19.000000000
+0100
@@ -22,45 +22,37 @@
include ConfigurableEnforcedStyle
extend AutoCorrector
+ MSG = 'Prefer the use of `%<prefer>s` over `%<current>s`.'
RESTRICT_ON_SEND = %i[call].freeze
def on_send(node)
return unless node.receiver
if offense?(node)
- add_offense(node) do |corrector|
+ prefer = prefer(node)
+ current = node.source
+
+ add_offense(node, message: format(MSG, prefer: prefer, current:
current)) do |corrector|
opposite_style_detected
- autocorrect(corrector, node)
+ corrector.replace(node, prefer)
end
else
correct_style_detected
end
end
- def autocorrect(corrector, node)
- if explicit_style?
- receiver = node.receiver.source
- replacement = node.source.sub("#{receiver}.", "#{receiver}.call")
-
- corrector.replace(node, replacement)
- else
- add_parentheses(node, corrector) unless node.parenthesized?
- corrector.remove(node.loc.selector)
- end
- end
-
private
def offense?(node)
(explicit_style? && node.implicit_call?) || (implicit_style? &&
!node.implicit_call?)
end
- def message(_node)
- if explicit_style?
- 'Prefer the use of `lambda.call(...)` over `lambda.(...)`.'
- else
- 'Prefer the use of `lambda.(...)` over `lambda.call(...)`.'
- end
+ def prefer(node)
+ receiver = node.receiver.source
+ arguments = node.arguments.map(&:source).join(', ')
+ method = explicit_style? ? "call(#{arguments})" : "(#{arguments})"
+
+ "#{receiver}.#{method}"
end
def implicit_style?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/style/nested_file_dirname.rb
new/lib/rubocop/cop/style/nested_file_dirname.rb
--- old/lib/rubocop/cop/style/nested_file_dirname.rb 1970-01-01
01:00:00.000000000 +0100
+++ new/lib/rubocop/cop/style/nested_file_dirname.rb 2022-03-09
17:40:19.000000000 +0100
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+module RuboCop
+ module Cop
+ module Style
+ # This cop checks for nested `File.dirname`.
+ # It replaces nested `File.dirname` with the level argument introduced
in Ruby 3.1.
+ #
+ # @example
+ #
+ # # bad
+ # File.dirname(File.dirname(path))
+ #
+ # # good
+ # File.dirname(path, 2)
+ #
+ class NestedFileDirname < Base
+ include RangeHelp
+ extend AutoCorrector
+ extend TargetRubyVersion
+
+ MSG = 'Use `dirname(%<path>s, %<level>s)` instead.'
+ RESTRICT_ON_SEND = %i[dirname].freeze
+
+ minimum_target_ruby_version 3.1
+
+ # @!method file_dirname?(node)
+ def_node_matcher :file_dirname?, <<~PATTERN
+ (send
+ (const {cbase nil?} :File) :dirname ...)
+ PATTERN
+
+ def on_send(node)
+ return if file_dirname?(node.parent) ||
!file_dirname?(node.first_argument)
+
+ path, level = path_with_dir_level(node, 1)
+ return if level < 2
+
+ message = format(MSG, path: path, level: level)
+ range = offense_range(node)
+
+ add_offense(range, message: message) do |corrector|
+ corrector.replace(range, "dirname(#{path}, #{level})")
+ end
+ end
+
+ private
+
+ def path_with_dir_level(node, level)
+ first_argument = node.first_argument
+
+ if file_dirname?(first_argument)
+ level += 1
+ path_with_dir_level(first_argument, level)
+ else
+ [first_argument.source, level]
+ end
+ end
+
+ def offense_range(node)
+ range_between(node.loc.selector.begin_pos, node.source_range.end_pos)
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/style/optional_boolean_parameter.rb
new/lib/rubocop/cop/style/optional_boolean_parameter.rb
--- old/lib/rubocop/cop/style/optional_boolean_parameter.rb 2022-02-03
07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/style/optional_boolean_parameter.rb 2022-03-09
17:40:19.000000000 +0100
@@ -54,8 +54,9 @@
private
def format_message(argument)
- source = argument.source
- format(MSG, original: source, replacement: source.sub(/\s+=/, ':'))
+ replacement = "#{argument.name}: #{argument.default_value.source}"
+
+ format(MSG, original: argument.source, replacement: replacement)
end
end
end
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 2022-02-03
07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/style/string_concatenation.rb 2022-03-09
17:40:19.000000000 +0100
@@ -134,7 +134,13 @@
end
def uncorrectable?(part)
- part.multiline? || (part.str_type? && part.heredoc?) ||
part.each_descendant(:block).any?
+ part.multiline? || heredoc?(part) ||
part.each_descendant(:block).any?
+ end
+
+ def heredoc?(node)
+ return false unless node.str_type? || node.dstr_type?
+
+ node.heredoc?
end
def corrected_ancestor?(node)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb
new/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb
--- old/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb
2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb
2022-03-09 17:40:19.000000000 +0100
@@ -10,7 +10,7 @@
# last item of all non-empty, multiline array literals.
# * `comma`: Requires a comma after last item in an array,
# but only when each item is on its own line.
- # * `no_comma`: Does not requires a comma after the
+ # * `no_comma`: Does not require a comma after the
# last item in an array
#
# @example EnforcedStyleForMultiline: consistent_comma
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb
new/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb
--- old/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb 2022-02-03
07:44:29.000000000 +0100
+++ new/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb 2022-03-09
17:40:19.000000000 +0100
@@ -10,7 +10,7 @@
# last item of all non-empty, multiline hash literals.
# * `comma`: Requires a comma after the last item in a hash,
# but only when each item is on its own line.
- # * `no_comma`: Does not requires a comma after the
+ # * `no_comma`: Does not require a comma after the
# last item in a hash
#
# @example EnforcedStyleForMultiline: consistent_comma
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cop/variable_force.rb
new/lib/rubocop/cop/variable_force.rb
--- old/lib/rubocop/cop/variable_force.rb 2022-02-03 07:44:29.000000000
+0100
+++ new/lib/rubocop/cop/variable_force.rb 2022-03-09 17:40:19.000000000
+0100
@@ -186,11 +186,7 @@
end
def regexp_captured_names(node)
- regexp_string = node.children.select(&:str_type?).map do |child|
- child.children.first
- end.join || ''
-
- regexp = Regexp.new(regexp_string)
+ regexp = node.to_regexp
regexp.named_captures.keys
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/cops_documentation_generator.rb
new/lib/rubocop/cops_documentation_generator.rb
--- old/lib/rubocop/cops_documentation_generator.rb 2022-02-03
07:44:29.000000000 +0100
+++ new/lib/rubocop/cops_documentation_generator.rb 2022-03-09
17:40:19.000000000 +0100
@@ -191,8 +191,8 @@
def wrap_backtick(value)
if value.is_a?(String)
- # Use `+` to prevent text like `**/*.gemspec` from being bold.
- value.start_with?('*') ? "`+#{value}+`" : "`#{value}`"
+ # Use `+` to prevent text like `**/*.gemspec`, `spec/**/*` from being
bold.
+ value.include?('*') ? "`+#{value}+`" : "`#{value}`"
else
"`#{value}`"
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/formatter/disabled_config_formatter.rb
new/lib/rubocop/formatter/disabled_config_formatter.rb
--- old/lib/rubocop/formatter/disabled_config_formatter.rb 2022-02-03
07:44:29.000000000 +0100
+++ new/lib/rubocop/formatter/disabled_config_formatter.rb 2022-03-09
17:40:19.000000000 +0100
@@ -124,9 +124,9 @@
default_cfg = default_config(cop_name)
if supports_safe_auto_correct?(cop_class, default_cfg)
- output_buffer.puts '# Cop supports --auto-correct.'
+ output_buffer.puts '# This cop supports safe auto-correction
(--auto-correct).'
elsif supports_unsafe_autocorrect?(cop_class, default_cfg)
- output_buffer.puts '# Cop supports --auto-correct-all.'
+ output_buffer.puts '# This cop supports unsafe auto-correction
(--auto-correct-all).'
end
return unless default_cfg
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/options.rb new/lib/rubocop/options.rb
--- old/lib/rubocop/options.rb 2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/options.rb 2022-03-09 17:40:19.000000000 +0100
@@ -467,8 +467,14 @@
'This option applies to the
previously',
'specified --format, or the default
format',
'if no format is specified.'],
- fail_level: ['Minimum severity (A/I/R/C/W/E/F) for
exit',
- 'with error code.'],
+ fail_level: ['Minimum severity for exit with error
code.',
+ ' [A] autocorrect',
+ ' [I] info',
+ ' [R] refactor',
+ ' [C] convention',
+ ' [W] warning',
+ ' [E] error',
+ ' [F] fatal'],
display_time: 'Display elapsed time in seconds.',
display_only_failed: ['Only output offense messages. Omit
passing',
'cops. Only valid for --format
junit.'],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/rspec/shared_contexts.rb
new/lib/rubocop/rspec/shared_contexts.rb
--- old/lib/rubocop/rspec/shared_contexts.rb 2022-02-03 07:44:29.000000000
+0100
+++ new/lib/rubocop/rspec/shared_contexts.rb 2022-03-09 17:40:19.000000000
+0100
@@ -135,3 +135,7 @@
RSpec.shared_context 'ruby 3.1', :ruby31 do
let(:ruby_version) { 3.1 }
end
+
+RSpec.shared_context 'ruby 3.2', :ruby32 do
+ let(:ruby_version) { 3.2 }
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rubocop/runner.rb new/lib/rubocop/runner.rb
--- old/lib/rubocop/runner.rb 2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/runner.rb 2022-03-09 17:40:19.000000000 +0100
@@ -8,7 +8,7 @@
class Runner # rubocop:disable Metrics/ClassLength
# An exception indicating that the inspection loop got stuck correcting
# offenses back and forth.
- class InfiniteCorrectionLoop < RuntimeError
+ class InfiniteCorrectionLoop < StandardError
attr_reader :offenses
def initialize(path, offenses_by_iteration, loop_start: -1)
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 2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/target_ruby.rb 2022-03-09 17:40:19.000000000 +0100
@@ -4,7 +4,7 @@
# The kind of Ruby that code inspected by RuboCop is written in.
# @api private
class TargetRuby
- KNOWN_RUBIES = [2.5, 2.6, 2.7, 3.0, 3.1].freeze
+ KNOWN_RUBIES = [2.5, 2.6, 2.7, 3.0, 3.1, 3.2].freeze
DEFAULT_VERSION = KNOWN_RUBIES.first
OBSOLETE_RUBIES = {
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 2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop/version.rb 2022-03-09 17:40:19.000000000 +0100
@@ -3,7 +3,7 @@
module RuboCop
# This module holds the RuboCop version information.
module Version
- STRING = '1.25.1'
+ STRING = '1.26.0'
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 2022-02-03 07:44:29.000000000 +0100
+++ new/lib/rubocop.rb 2022-03-09 17:40:19.000000000 +0100
@@ -552,6 +552,7 @@
require_relative 'rubocop/cop/style/negated_if_else_condition'
require_relative 'rubocop/cop/style/negated_unless'
require_relative 'rubocop/cop/style/negated_while'
+require_relative 'rubocop/cop/style/nested_file_dirname'
require_relative 'rubocop/cop/style/nested_modifier'
require_relative 'rubocop/cop/style/nested_parenthesized_calls'
require_relative 'rubocop/cop/style/nested_ternary_operator'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2022-02-03 07:44:29.000000000 +0100
+++ new/metadata 2022-03-09 17:40:19.000000000 +0100
@@ -1,7 +1,7 @@
--- !ruby/object:Gem::Specification
name: rubocop
version: !ruby/object:Gem::Version
- version: 1.25.1
+ version: 1.26.0
platform: ruby
authors:
- Bozhidar Batsov
@@ -10,7 +10,7 @@
autorequire:
bindir: exe
cert_chain: []
-date: 2022-02-03 00:00:00.000000000 Z
+date: 2022-03-09 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: parallel
@@ -100,7 +100,7 @@
requirements:
- - ">="
- !ruby/object:Gem::Version
- version: 1.15.1
+ version: 1.16.0
- - "<"
- !ruby/object:Gem::Version
version: '2.0'
@@ -110,7 +110,7 @@
requirements:
- - ">="
- !ruby/object:Gem::Version
- version: 1.15.1
+ version: 1.16.0
- - "<"
- !ruby/object:Gem::Version
version: '2.0'
@@ -269,6 +269,7 @@
- lib/rubocop/cop/internal_affairs/node_matcher_directive.rb
- lib/rubocop/cop/internal_affairs/node_type_predicate.rb
- lib/rubocop/cop/internal_affairs/offense_location_keyword.rb
+- lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb
- lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb
- lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb
- lib/rubocop/cop/internal_affairs/redundant_location_argument.rb
@@ -737,6 +738,7 @@
- lib/rubocop/cop/style/negated_if_else_condition.rb
- lib/rubocop/cop/style/negated_unless.rb
- lib/rubocop/cop/style/negated_while.rb
+- lib/rubocop/cop/style/nested_file_dirname.rb
- lib/rubocop/cop/style/nested_modifier.rb
- lib/rubocop/cop/style/nested_parenthesized_calls.rb
- lib/rubocop/cop/style/nested_ternary_operator.rb
@@ -911,7 +913,7 @@
homepage_uri: https://rubocop.org/
changelog_uri: https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md
source_code_uri: https://github.com/rubocop/rubocop/
- documentation_uri: https://docs.rubocop.org/rubocop/1.25/
+ documentation_uri: https://docs.rubocop.org/rubocop/1.26/
bug_tracker_uri: https://github.com/rubocop/rubocop/issues
rubygems_mfa_required: 'true'
post_install_message: