Class: RubyModKit::Feature::InstanceVariableParameter::InstanceVariableParameterMission

Inherits:
Mission
  • Object
show all
Defined in:
lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb

Overview

The mission for instance variable arguments

Instance Method Summary collapse

Instance Method Details

#perform(generation) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)

rbs:

  • generation: Generation

  • return: bool



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb', line 14

def perform(generation)
  generation.memo_pad.each_parameter_memo do |parameter_memo|
    next unless parameter_memo.ivar_parameter

    offset = parameter_memo.offset
    parameter_node = generation.root_node.parameter_node_at(offset)
    raise RubyModKit::Error unless parameter_node

    def_node = generation.root_node.def_node_at(offset)
    raise RubyModKit::Error, "DefNode not found" unless def_node

    def_body_location = def_node.body_location
    end_loc = def_node.end_keyword_loc
    if def_body_location
      indent = def_body_location.start_column
      src_offset = def_body_location.start_offset - indent
    elsif end_loc
      indent = end_loc.start_column + 2
      src_offset = end_loc.start_offset - indent + 2
    end
    raise RubyModKit::Error if !src_offset || !indent

    name = parameter_node.name
    generation[src_offset, 0] = "#{" " * indent}@#{name} = #{name}\n"
  end
  true
end