Class: RuboCop::Cop::Lint::Void
Overview
Checks for operators, variables, literals, lambda, proc and nonmutating methods used in void context.
each
blocks are allowed to prevent false positives.
For example, the expression inside the each
block below.
It’s not void, especially when the receiver is an Enumerator
:
enumerator = [1, 2, 3].filter
enumerator.each { |item| item >= 2 } #=> [2, 3]
Constant Summary collapse
- OP_MSG =
'Operator `%<op>s` used in void context.'
- VAR_MSG =
'Variable `%<var>s` used in void context.'
- CONST_MSG =
'Constant `%<var>s` used in void context.'
- LIT_MSG =
'Literal `%<lit>s` used in void context.'
- SELF_MSG =
'`self` used in void context.'
- EXPRESSION_MSG =
'`%<expression>s` used in void context.'
- NONMUTATING_MSG =
'Method `#%<method>s` used in void context. Did you mean `#%<suggest>s`?'
- BINARY_OPERATORS =
%i[* / % + - == === != < > <= >= <=>].freeze
- UNARY_OPERATORS =
%i[+@ -@ ~ !].freeze
- OPERATORS =
(BINARY_OPERATORS + UNARY_OPERATORS).freeze
- VOID_CONTEXT_TYPES =
%i[def for block].freeze
- NONMUTATING_METHODS_WITH_BANG_VERSION =
%i[capitalize chomp chop compact delete_prefix delete_suffix downcase encode flatten gsub lstrip merge next reject reverse rotate rstrip scrub select shuffle slice sort sort_by squeeze strip sub succ swapcase tr tr_s transform_values unicode_normalize uniq upcase].freeze
- METHODS_REPLACEABLE_BY_EACH =
%i[collect map].freeze
- NONMUTATING_METHODS =
(NONMUTATING_METHODS_WITH_BANG_VERSION + METHODS_REPLACEABLE_BY_EACH).freeze
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #on_begin(node) ⇒ Object (also: #on_kwbegin)
- #on_block(node) ⇒ Object (also: #on_numblock)
Methods included from AutoCorrector
Methods inherited from Base
#active_support_extensions_enabled?, #add_global_offense, #add_offense, autocorrect_incompatible_with, badge, #begin_investigation, callbacks_needed, #callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version
Methods included from ExcludeLimit
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
Constructor Details
This class inherits a constructor from RuboCop::Cop::Base
Instance Method Details
#on_begin(node) ⇒ Object Also known as: on_kwbegin
92 93 94 |
# File 'lib/rubocop/cop/lint/void.rb', line 92 def on_begin(node) check_begin(node) end |
#on_block(node) ⇒ Object Also known as: on_numblock
82 83 84 85 86 87 88 |
# File 'lib/rubocop/cop/lint/void.rb', line 82 def on_block(node) return unless node.body && !node.body.begin_type? return unless in_void_context?(node.body) check_void_op(node.body) { node.method?(:each) } check_expression(node.body) end |