Class: Prism::Merge::BlockVarRenamer
- Inherits:
-
Object
- Object
- Prism::Merge::BlockVarRenamer
- Defined in:
- lib/prism/merge/block_var_renamer.rb
Overview
AST-directed renaming of a block parameter and its receiver references.
Defined Under Namespace
Classes: ReceiverCollector
Class Method Summary collapse
- .normalize(source, binding:, canonical_name:) ⇒ Object
- .rename(source, old_var:, new_var:, parameter_offset: nil, scope_range: nil) ⇒ Object
Class Method Details
.normalize(source, binding:, canonical_name:) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/prism/merge/block_var_renamer.rb', line 8 def normalize(source, binding:, canonical_name:) return source unless binding rename( source, old_var: binding.name, new_var: canonical_name, parameter_offset: binding.parameter.location.start_offset, scope_range: binding.scope_range ) end |
.rename(source, old_var:, new_var:, parameter_offset: nil, scope_range: nil) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/prism/merge/block_var_renamer.rb', line 20 def rename(source, old_var:, new_var:, parameter_offset: nil, scope_range: nil) return source if old_var == new_var || source.empty? parse_result = TreeHaver.with_backend(Prism::Merge::BACKEND_REFERENCE.id) do TreeHaver.parser_for(:ruby, backend_type: :prism).parse(source).parse_result end return source unless parse_result.success? offsets = ReceiverCollector.collect(parse_result.value, old_var, scope_range: scope_range) offsets << parameter_offset if parameter_offset apply_replacements(source, offsets.uniq.sort, old_var, new_var) end |