Class: RuboCop::Cop::Elegant::NoRedundantVariable
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Elegant::NoRedundantVariable
- Extended by:
- AutoCorrector
- Includes:
- RangeHelp
- Defined in:
- lib/rubocop/cop/elegant/no_redundant_variable.rb
Overview
Forbids local variables that are assigned exactly once and then referenced exactly once, since such variables can be inlined at the place of their single use without loss of clarity. The cop inspects each method body in isolation, ignores compound assignments (+=, ||=, &&=), multiple assignments, for loops, rescue variables, and assignments embedded into expressions such as if or while conditions; only top-level statements of a sequence are considered. A variable whose single read sits inside a context that does not also enclose the assignment is left alone: loops or blocks (block, numblock, while, until, for) so that inlining does not move the right-hand side into a hot path, and conditional branches (if, case, case_match, and, or, rescue, resbody, ensure) so that inlining does not change whether or when the right-hand side is evaluated. A variable that is reassigned, read more than once, or never read is left alone too.
Auto-correct inlines the redundant assignment: it replaces the single lvar read with the source of the assignment’s right-hand side, then removes the whole assignment line including its leading indent and trailing newline. The right-hand side is wrapped in parentheses unless it is already a primary expression (literal, variable, parenthesized expression, or method call with parentheses or no arguments), so that operator precedence at the read site is preserved.
Constant Summary collapse
- MSG =
'Variable "%<name>s" is redundant and must be inlined: it is read only once'- STATEMENT_PARENTS =
%i[begin kwbegin def defs block numblock].freeze
- LOOP_TYPES =
%i[block numblock while until while_post until_post for].freeze
- ALWAYS_FIRST_TYPES =
%i[if case case_match and or].freeze
- ALWAYS_HOIST_TYPES =
%i[rescue resbody ensure].freeze
- PRIMARY_TYPES =
%i[ int float str sym dstr dsym xstr true false nil array hash regexp lvar ivar cvar gvar const self nth_ref back_ref ].freeze
Instance Method Summary collapse
Instance Method Details
#on_def(node) ⇒ Object
56 57 58 |
# File 'lib/rubocop/cop/elegant/no_redundant_variable.rb', line 56 def on_def(node) check(node.body) end |
#on_defs(node) ⇒ Object
60 61 62 |
# File 'lib/rubocop/cop/elegant/no_redundant_variable.rb', line 60 def on_defs(node) check(node.body) end |