Merge pull request #12741 from Homebrew/dependabot/bundler/Library/Homebrew/rubocop-rails-2.13.2
build(deps): bump rubocop-rails from 2.13.1 to 2.13.2 in /Library/Homebrew
This commit is contained in:
commit
d5b9206905
@ -138,7 +138,7 @@ GEM
|
||||
rubocop-performance (1.13.2)
|
||||
rubocop (>= 1.7.0, < 2.0)
|
||||
rubocop-ast (>= 0.4.0)
|
||||
rubocop-rails (2.13.1)
|
||||
rubocop-rails (2.13.2)
|
||||
activesupport (>= 4.2.0)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 1.7.0, < 2.0)
|
||||
|
||||
@ -109,6 +109,14 @@ class RuboCop::Cop::IndexMethod::Captures < ::Struct
|
||||
end
|
||||
|
||||
RuboCop::Cop::IndexMethod::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
|
||||
|
||||
module RuboCop::Cop::MigrationsHelper
|
||||
extend ::RuboCop::AST::NodePattern::Macros
|
||||
|
||||
def in_migration?(node); end
|
||||
def migration_class?(param0 = T.unsafe(nil)); end
|
||||
end
|
||||
|
||||
module RuboCop::Cop::Rails; end
|
||||
|
||||
class RuboCop::Cop::Rails::ActionFilter < ::RuboCop::Cop::Base
|
||||
@ -398,6 +406,7 @@ class RuboCop::Cop::Rails::CompactBlank < ::RuboCop::Cop::Base
|
||||
def offense_range(node); end
|
||||
def preferred_method(node); end
|
||||
def use_hash_value_block_argument?(arguments, receiver_in_block); end
|
||||
def use_single_value_block_argument?(arguments, receiver_in_block); end
|
||||
end
|
||||
|
||||
RuboCop::Cop::Rails::CompactBlank::MSG = T.let(T.unsafe(nil), String)
|
||||
@ -947,6 +956,7 @@ class RuboCop::Cop::Rails::InverseOf < ::RuboCop::Cop::Base
|
||||
|
||||
private
|
||||
|
||||
def ignore_scopes?; end
|
||||
def message(options); end
|
||||
end
|
||||
|
||||
@ -1254,8 +1264,11 @@ class RuboCop::Cop::Rails::ReadWriteAttribute < ::RuboCop::Cop::Base
|
||||
|
||||
private
|
||||
|
||||
def message(node); end
|
||||
def build_message(node); end
|
||||
def multi_line_message(node); end
|
||||
def node_replacement(node); end
|
||||
def read_attribute_replacement(node); end
|
||||
def single_line_message(node); end
|
||||
def within_shadowing_method?(node); end
|
||||
def write_attribute_replacement(node); end
|
||||
end
|
||||
@ -1464,6 +1477,8 @@ RuboCop::Cop::Rails::RequireDependency::MSG = T.let(T.unsafe(nil), String)
|
||||
RuboCop::Cop::Rails::RequireDependency::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
|
||||
|
||||
class RuboCop::Cop::Rails::ReversibleMigration < ::RuboCop::Cop::Base
|
||||
include ::RuboCop::Cop::MigrationsHelper
|
||||
|
||||
def change_table_call(param0 = T.unsafe(nil)); end
|
||||
def drop_table_call(param0 = T.unsafe(nil)); end
|
||||
def irreversible_schema_statement_call(param0 = T.unsafe(nil)); end
|
||||
@ -1494,8 +1509,9 @@ end
|
||||
RuboCop::Cop::Rails::ReversibleMigration::MSG = T.let(T.unsafe(nil), String)
|
||||
|
||||
class RuboCop::Cop::Rails::ReversibleMigrationMethodDefinition < ::RuboCop::Cop::Base
|
||||
include ::RuboCop::Cop::MigrationsHelper
|
||||
|
||||
def change_method?(param0 = T.unsafe(nil)); end
|
||||
def migration_class?(param0 = T.unsafe(nil)); end
|
||||
def on_class(node); end
|
||||
def up_and_down_methods?(param0 = T.unsafe(nil)); end
|
||||
end
|
||||
@ -5099,7 +5099,6 @@ class RuboCop::AST::NodePattern::Parser
|
||||
end
|
||||
|
||||
module RuboCop::AST::NodePattern::Sets
|
||||
SET_BLANK_EMPTY = ::T.let(nil, ::T.untyped)
|
||||
SET_BUILD_RECOMMENDED_TEST_OPTIONAL = ::T.let(nil, ::T.untyped)
|
||||
SET_CHANGE_COLUMN_EXECUTE = ::T.let(nil, ::T.untyped)
|
||||
SET_DEPENDS_ON_USES_FROM_MACOS = ::T.let(nil, ::T.untyped)
|
||||
|
||||
@ -88,7 +88,7 @@ $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ruby-progressbar-1.11
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/unicode-display_width-2.1.0/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-1.24.1/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-performance-1.13.2/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-rails-2.13.1/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-rails-2.13.2/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-rspec-2.7.0/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-sorbet-0.6.5/lib"
|
||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ruby-macho-3.0.0/lib"
|
||||
|
||||
@ -453,6 +453,7 @@ Rails/InverseOf:
|
||||
Description: 'Checks for associations where the inverse cannot be determined automatically.'
|
||||
Enabled: true
|
||||
VersionAdded: '0.52'
|
||||
IgnoreScopes: false
|
||||
Include:
|
||||
- app/models/**/*.rb
|
||||
|
||||
@ -627,6 +628,7 @@ Rails/RedundantForeignKey:
|
||||
Rails/RedundantPresenceValidationOnBelongsTo:
|
||||
Description: 'Checks for redundant presence validation on belongs_to association.'
|
||||
Enabled: pending
|
||||
SafeAutoCorrect: false
|
||||
VersionAdded: '2.13'
|
||||
|
||||
Rails/RedundantReceiverInWithOptions:
|
||||
@ -702,15 +704,17 @@ Rails/ReversibleMigration:
|
||||
Reference: 'https://api.rubyonrails.org/classes/ActiveRecord/Migration/CommandRecorder.html'
|
||||
Enabled: true
|
||||
VersionAdded: '0.47'
|
||||
VersionChanged: '2.13'
|
||||
Include:
|
||||
- db/migrate/*.rb
|
||||
- db/**/*.rb
|
||||
|
||||
Rails/ReversibleMigrationMethodDefinition:
|
||||
Description: 'Checks whether the migration implements either a `change` method or both an `up` and a `down` method.'
|
||||
Enabled: false
|
||||
VersionAdded: '2.10'
|
||||
VersionChanged: '2.13'
|
||||
Include:
|
||||
- db/migrate/*.rb
|
||||
- db/**/*.rb
|
||||
|
||||
Rails/RootJoinChain:
|
||||
Description: 'Use a single `#join` instead of chaining on `Rails.root` or `Rails.public_path`.'
|
||||
@ -0,0 +1,26 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RuboCop
|
||||
module Cop
|
||||
# Common functionality for cops working with migrations
|
||||
module MigrationsHelper
|
||||
extend NodePattern::Macros
|
||||
|
||||
def_node_matcher :migration_class?, <<~PATTERN
|
||||
(class
|
||||
(const nil? _)
|
||||
(send
|
||||
(const (const {nil? cbase} :ActiveRecord) :Migration)
|
||||
:[]
|
||||
(float _))
|
||||
_)
|
||||
PATTERN
|
||||
|
||||
def in_migration?(node)
|
||||
node.each_ancestor(:class).any? do |class_node|
|
||||
migration_class?(class_node)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -10,25 +10,21 @@ module RuboCop
|
||||
# blank check of block arguments to the receiver object.
|
||||
#
|
||||
# For example, `[[1, 2], [3, nil]].reject { |first, second| second.blank? }` and
|
||||
# `[[1, 2], [3, nil]].compact_blank` are not compatible. The same is true for `empty?`.
|
||||
# `[[1, 2], [3, nil]].compact_blank` are not compatible. The same is true for `blank?`.
|
||||
# This will work fine when the receiver is a hash object.
|
||||
#
|
||||
# @example
|
||||
#
|
||||
# # bad
|
||||
# collection.reject(&:blank?)
|
||||
# collection.reject(&:empty?)
|
||||
# collection.reject { |_k, v| v.blank? }
|
||||
# collection.reject { |_k, v| v.empty? }
|
||||
#
|
||||
# # good
|
||||
# collection.compact_blank
|
||||
#
|
||||
# # bad
|
||||
# collection.reject!(&:blank?)
|
||||
# collection.reject!(&:empty?)
|
||||
# collection.reject! { |_k, v| v.blank? }
|
||||
# collection.reject! { |_k, v| v.empty? }
|
||||
#
|
||||
# # good
|
||||
# collection.compact_blank!
|
||||
@ -48,13 +44,13 @@ module RuboCop
|
||||
(send _ {:reject :reject!})
|
||||
$(args ...)
|
||||
(send
|
||||
$(lvar _) {:blank? :empty?}))
|
||||
$(lvar _) :blank?))
|
||||
PATTERN
|
||||
|
||||
def_node_matcher :reject_with_block_pass?, <<~PATTERN
|
||||
(send _ {:reject :reject!}
|
||||
(block_pass
|
||||
(sym {:blank? :empty?})))
|
||||
(sym :blank?)))
|
||||
PATTERN
|
||||
|
||||
def on_send(node)
|
||||
@ -73,12 +69,17 @@ module RuboCop
|
||||
return true if reject_with_block_pass?(node)
|
||||
|
||||
if (arguments, receiver_in_block = reject_with_block?(node.parent))
|
||||
return arguments.length == 1 || use_hash_value_block_argument?(arguments, receiver_in_block)
|
||||
return use_single_value_block_argument?(arguments, receiver_in_block) ||
|
||||
use_hash_value_block_argument?(arguments, receiver_in_block)
|
||||
end
|
||||
|
||||
false
|
||||
end
|
||||
|
||||
def use_single_value_block_argument?(arguments, receiver_in_block)
|
||||
arguments.length == 1 && arguments[0].source == receiver_in_block.source
|
||||
end
|
||||
|
||||
def use_hash_value_block_argument?(arguments, receiver_in_block)
|
||||
arguments.length == 2 && arguments[1].source == receiver_in_block.source
|
||||
end
|
||||
@ -26,7 +26,8 @@ module RuboCop
|
||||
RESTRICT_ON_SEND = %i[+ -].freeze
|
||||
|
||||
DURATIONS = Set[:second, :seconds, :minute, :minutes, :hour, :hours,
|
||||
:day, :days, :week, :weeks, :fortnight, :fortnights]
|
||||
:day, :days, :week, :weeks, :fortnight, :fortnights,
|
||||
:month, :months, :year, :years]
|
||||
|
||||
# @!method duration_arithmetic_argument?(node)
|
||||
# Match duration subtraction or addition with current time.
|
||||
@ -126,6 +126,18 @@ module RuboCop
|
||||
# has_many :physicians, through: :appointments
|
||||
# end
|
||||
#
|
||||
# @example IgnoreScopes: false (default)
|
||||
# # bad
|
||||
# class Blog < ApplicationRecord
|
||||
# has_many :posts, -> { order(published_at: :desc) }
|
||||
# end
|
||||
#
|
||||
# @example IgnoreScopes: true
|
||||
# # good
|
||||
# class Blog < ApplicationRecord
|
||||
# has_many :posts, -> { order(published_at: :desc) }
|
||||
# end
|
||||
#
|
||||
# @see https://guides.rubyonrails.org/association_basics.html#bi-directional-associations
|
||||
# @see https://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Setting+Inverses
|
||||
class InverseOf < Base
|
||||
@ -189,7 +201,7 @@ module RuboCop
|
||||
end
|
||||
|
||||
def scope?(arguments)
|
||||
arguments.any?(&:block_type?)
|
||||
!ignore_scopes? && arguments.any?(&:block_type?)
|
||||
end
|
||||
|
||||
def options_requiring_inverse_of?(options)
|
||||
@ -236,6 +248,10 @@ module RuboCop
|
||||
SPECIFY_MSG
|
||||
end
|
||||
end
|
||||
|
||||
def ignore_scopes?
|
||||
cop_config['IgnoreScopes'] == true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -37,7 +37,7 @@ module RuboCop
|
||||
class ReadWriteAttribute < Base
|
||||
extend AutoCorrector
|
||||
|
||||
MSG = 'Prefer `%<prefer>s` over `%<current>s`.'
|
||||
MSG = 'Prefer `%<prefer>s`.'
|
||||
RESTRICT_ON_SEND = %i[read_attribute write_attribute].freeze
|
||||
|
||||
def_node_matcher :read_write_attribute?, <<~PATTERN
|
||||
@ -51,35 +51,51 @@ module RuboCop
|
||||
return unless read_write_attribute?(node)
|
||||
return if within_shadowing_method?(node)
|
||||
|
||||
add_offense(node.loc.selector, message: message(node)) do |corrector|
|
||||
case node.method_name
|
||||
when :read_attribute
|
||||
replacement = read_attribute_replacement(node)
|
||||
when :write_attribute
|
||||
replacement = write_attribute_replacement(node)
|
||||
end
|
||||
|
||||
corrector.replace(node.source_range, replacement)
|
||||
add_offense(node, message: build_message(node)) do |corrector|
|
||||
corrector.replace(node.source_range, node_replacement(node))
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def within_shadowing_method?(node)
|
||||
node.each_ancestor(:def).any? do |enclosing_method|
|
||||
shadowing_method_name = node.first_argument.value.to_s
|
||||
shadowing_method_name << '=' if node.method?(:write_attribute)
|
||||
first_arg = node.first_argument
|
||||
return false unless first_arg.respond_to?(:value)
|
||||
|
||||
enclosing_method.method_name.to_s == shadowing_method_name
|
||||
enclosing_method = node.each_ancestor(:def).first
|
||||
return false unless enclosing_method
|
||||
|
||||
shadowing_method_name = first_arg.value.to_s
|
||||
shadowing_method_name << '=' if node.method?(:write_attribute)
|
||||
enclosing_method.method?(shadowing_method_name)
|
||||
end
|
||||
|
||||
def build_message(node)
|
||||
if node.single_line?
|
||||
single_line_message(node)
|
||||
else
|
||||
multi_line_message(node)
|
||||
end
|
||||
end
|
||||
|
||||
def message(node)
|
||||
def single_line_message(node)
|
||||
format(MSG, prefer: node_replacement(node))
|
||||
end
|
||||
|
||||
def multi_line_message(node)
|
||||
if node.method?(:read_attribute)
|
||||
format(MSG, prefer: 'self[:attr]', current: 'read_attribute(:attr)')
|
||||
format(MSG, prefer: 'self[:attr]')
|
||||
else
|
||||
format(MSG, prefer: 'self[:attr] = val',
|
||||
current: 'write_attribute(:attr, val)')
|
||||
format(MSG, prefer: 'self[:attr] = val')
|
||||
end
|
||||
end
|
||||
|
||||
def node_replacement(node)
|
||||
case node.method_name
|
||||
when :read_attribute
|
||||
read_attribute_replacement(node)
|
||||
when :write_attribute
|
||||
write_attribute_replacement(node)
|
||||
end
|
||||
end
|
||||
|
||||
@ -8,6 +8,10 @@ module RuboCop
|
||||
# explicitly set to `false`. The presence validator is added
|
||||
# automatically, and explicit presence validation is redundant.
|
||||
#
|
||||
# @safety
|
||||
# This cop's autocorrection is unsafe because it changes the default error message
|
||||
# from "can't be blank" to "must exist".
|
||||
#
|
||||
# @example
|
||||
# # bad
|
||||
# belongs_to :user
|
||||
@ -46,9 +50,6 @@ module RuboCop
|
||||
# @example source that matches - by association
|
||||
# validates :name, :user, presence: true
|
||||
#
|
||||
# @example source that matches - with presence options
|
||||
# validates :user, presence: { message: 'duplicate' }
|
||||
#
|
||||
# @example source that matches - by a foreign key
|
||||
# validates :user_id, presence: true
|
||||
#
|
||||
@ -62,7 +63,7 @@ module RuboCop
|
||||
send nil? :validates
|
||||
(sym $_)+
|
||||
$[
|
||||
(hash <$(pair (sym :presence) {true hash}) ...>) # presence: true
|
||||
(hash <$(pair (sym :presence) true) ...>) # presence: true
|
||||
!(hash <$(pair (sym :strict) {true const}) ...>) # strict: true
|
||||
]
|
||||
)
|
||||
@ -176,6 +176,8 @@ module RuboCop
|
||||
#
|
||||
# @see https://api.rubyonrails.org/classes/ActiveRecord/Migration/CommandRecorder.html
|
||||
class ReversibleMigration < Base
|
||||
include MigrationsHelper
|
||||
|
||||
MSG = '%<action>s is not reversible.'
|
||||
|
||||
def_node_matcher :irreversible_schema_statement_call, <<~PATTERN
|
||||
@ -207,7 +209,7 @@ module RuboCop
|
||||
PATTERN
|
||||
|
||||
def on_send(node)
|
||||
return unless within_change_method?(node)
|
||||
return unless in_migration?(node) && within_change_method?(node)
|
||||
return if within_reversible_or_up_only_block?(node)
|
||||
|
||||
check_irreversible_schema_statement_node(node)
|
||||
@ -220,7 +222,7 @@ module RuboCop
|
||||
end
|
||||
|
||||
def on_block(node)
|
||||
return unless within_change_method?(node)
|
||||
return unless in_migration?(node) && within_change_method?(node)
|
||||
return if within_reversible_or_up_only_block?(node)
|
||||
return if node.body.nil?
|
||||
|
||||
@ -43,19 +43,11 @@ module RuboCop
|
||||
# end
|
||||
# end
|
||||
class ReversibleMigrationMethodDefinition < Base
|
||||
include MigrationsHelper
|
||||
|
||||
MSG = 'Migrations must contain either a `change` method, or ' \
|
||||
'both an `up` and a `down` method.'
|
||||
|
||||
def_node_matcher :migration_class?, <<~PATTERN
|
||||
(class
|
||||
(const nil? _)
|
||||
(send
|
||||
(const (const {nil? cbase} :ActiveRecord) :Migration)
|
||||
:[]
|
||||
(float _))
|
||||
_)
|
||||
PATTERN
|
||||
|
||||
def_node_matcher :change_method?, <<~PATTERN
|
||||
[ #migration_class? `(def :change (args) _) ]
|
||||
PATTERN
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user