class RuboCop::Cop::Lint::UnusedBlockArgument
Checks for unused block arguments.
@example
# bad do_something do |used, unused| puts used end do_something do |bar| puts :foo end define_method(:foo) do |bar| puts :baz end # good do_something do |used, _unused| puts used end do_something do puts :foo end define_method(:foo) do |_bar| puts :baz end
@example IgnoreEmptyBlocks: true (default)
# good do_something { |unused| }
@example IgnoreEmptyBlocks: false
# bad do_something { |unused| }
@example AllowUnusedKeywordArguments: false (default)
# bad do_something do |unused: 42| foo end
@example AllowUnusedKeywordArguments: true
# good do_something do |unused: 42| foo end
Public Class Methods
joining_forces()
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 59 def self.joining_forces VariableForce end
Private Instance Methods
allow_unused_keyword_arguments?()
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 162 def allow_unused_keyword_arguments? cop_config['AllowUnusedKeywordArguments'] end
allowed_block?(variable)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 81 def allowed_block?(variable) !variable.block_argument? || (ignore_empty_blocks? && empty_block?(variable)) end
allowed_keyword_argument?(variable)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 85 def allowed_keyword_argument?(variable) variable.keyword_argument? && allow_unused_keyword_arguments? end
augment_message(message, variable)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 99 def augment_message(message, variable) scope = variable.scope all_arguments = scope.variables.each_value.select(&:block_argument?) augmentation = if scope.node.lambda? message_for_lambda(variable, all_arguments) else message_for_normal_block(variable, all_arguments) end [message, augmentation].join(' ') end
autocorrect(corrector, node)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 65 def autocorrect(corrector, node) UnusedArgCorrector.correct(corrector, processed_source, node) end
check_argument(variable)
click to toggle source
Calls superclass method
RuboCop::Cop::Lint::UnusedArgument#check_argument
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 69 def check_argument(variable) return if allowed_block?(variable) || allowed_keyword_argument?(variable) || used_block_local?(variable) super end
define_method_call?(variable)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 149 def define_method_call?(variable) call, = *variable.scope.node _, method, = *call method == :define_method end
empty_block?(variable)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 156 def empty_block?(variable) _send, _args, body = *variable.scope.node body.nil? end
ignore_empty_blocks?()
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 166 def ignore_empty_blocks? cop_config['IgnoreEmptyBlocks'] end
message(variable)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 89 def message(variable) message = "Unused #{variable_type(variable)} - `#{variable.name}`." if variable.explicit_block_local_variable? message else augment_message(message, variable) end end
message_for_lambda(variable, all_arguments)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 132 def message_for_lambda(variable, all_arguments) message = message_for_underscore_prefix(variable) if all_arguments.none?(&:referenced?) proc_message = 'Also consider using a proc without arguments ' \ 'instead of a lambda if you want it ' \ "to accept any arguments but don't care about them." end [message, proc_message].compact.join(' ') end
message_for_normal_block(variable, all_arguments)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 120 def message_for_normal_block(variable, all_arguments) if all_arguments.none?(&:referenced?) && !define_method_call?(variable) if all_arguments.count > 1 "You can omit all the arguments if you don't care about them." else "You can omit the argument if you don't care about it." end else message_for_underscore_prefix(variable) end end
message_for_underscore_prefix(variable)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 144 def message_for_underscore_prefix(variable) "If it's necessary, use `_` or `_#{variable.name}` " \ "as an argument name to indicate that it won't be used." end
used_block_local?(variable)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 77 def used_block_local?(variable) variable.explicit_block_local_variable? && !variable.assignments.empty? end
variable_type(variable)
click to toggle source
# File lib/rubocop/cop/lint/unused_block_argument.rb, line 112 def variable_type(variable) if variable.explicit_block_local_variable? 'block local variable' else 'block argument' end end