Class: RuboCop::Cop::Lint::ShadowingOuterLocalVariable
- Defined in:
- lib/rubocop/cop/lint/shadowing_outer_local_variable.rb
Overview
Checks for the use of local variable names from an outer scope in block arguments or block-local variables. This mirrors the warning given by ‘ruby -cw` prior to Ruby 2.6: “shadowing outer local variable - foo”.
The cop is now disabled by default to match the upstream Ruby behavior. It’s useful, however, if you’d like to avoid shadowing variables from outer scopes, which some people consider an anti-pattern that makes it harder to keep track of what’s going on in a program.
NOTE: Shadowing of variables in block passed to ‘Ractor.new` is allowed because `Ractor` should not access outer variables. eg. following style is encouraged:
- source,ruby
worker_id, pipe = env Ractor.new(worker_id, pipe) do |worker_id, pipe| end
Constant Summary collapse
- MSG =
'Shadowing outer local variable - `%<variable>s`.'
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Class Method Summary collapse
Instance Method Summary collapse
Methods inherited from Base
#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, autocorrect_incompatible_with, badge, #begin_investigation, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_gem_version, #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
Class Method Details
.joining_forces ⇒ Object
54 55 56 |
# File 'lib/rubocop/cop/lint/shadowing_outer_local_variable.rb', line 54 def self.joining_forces VariableForce end |
Instance Method Details
#before_declaring_variable(variable, variable_table) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/rubocop/cop/lint/shadowing_outer_local_variable.rb', line 58 def before_declaring_variable(variable, variable_table) return if variable.should_be_unused? return if ractor_block?(variable.scope.node) outer_local_variable = variable_table.find_variable(variable.name) return unless outer_local_variable return if variable_used_in_declaration_of_outer?(variable, outer_local_variable) return if same_conditions_node_different_branch?(variable, outer_local_variable) = format(MSG, variable: variable.name) add_offense(variable.declaration_node, message: ) end |
#ractor_block?(node) ⇒ Object
50 51 52 |
# File 'lib/rubocop/cop/lint/shadowing_outer_local_variable.rb', line 50 def_node_matcher :ractor_block?, <<~PATTERN (block (send (const nil? :Ractor) :new ...) ...) PATTERN |