Class: RubyModKit::MemoPad

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_mod_kit/memo_pad.rb

Overview

The class for bundling memos.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializevoid

rbs:

  • return: void



22
23
24
25
26
27
28
# File 'lib/ruby_mod_kit/memo_pad.rb', line 22

def initialize
  @def_parents_memo = {}
  @methods_memo = {}
  @parameters_memo = {}
  @overloads_memo = {}
  @flags = Hash.new(false)
end

Instance Attribute Details

#def_parents_memoObject (readonly)

rbs:

  • @def_parents_memo: Hash[Integer, Memo::DefParentMemo]

  • @methods_memo: Hash[Integer, Memo::MethodMemo]

  • @parameters_memo: Hash[Integer, Memo::ParameterMemo]

  • @overloads_memo: Hash[Integer, Memo::OverloadMemo]

  • @flags: Hash[Symbol, bool]



14
15
16
# File 'lib/ruby_mod_kit/memo_pad.rb', line 14

def def_parents_memo
  @def_parents_memo
end

#flagsObject

: Hash[Symbol, bool]



18
19
20
# File 'lib/ruby_mod_kit/memo_pad.rb', line 18

def flags
  @flags
end

#methods_memoObject (readonly)

: Hash[Integer, Memo::MethodMemo]



15
16
17
# File 'lib/ruby_mod_kit/memo_pad.rb', line 15

def methods_memo
  @methods_memo
end

#overloads_memoObject (readonly)

: Hash[Integer, Memo::OverloadMemo]



17
18
19
# File 'lib/ruby_mod_kit/memo_pad.rb', line 17

def overloads_memo
  @overloads_memo
end

#parameters_memoObject (readonly)

: Hash[Integer, Memo::ParameterMemo]



16
17
18
# File 'lib/ruby_mod_kit/memo_pad.rb', line 16

def parameters_memo
  @parameters_memo
end

Instance Method Details

#def_parent_memo(def_parent_node) ⇒ Memo::DefParentMemo

Parameters:

Returns:

rbs:

  • def_parent_node: Node::DefParentNode

  • return: Memo::DefParentMemo



50
51
52
# File 'lib/ruby_mod_kit/memo_pad.rb', line 50

def def_parent_memo(def_parent_node)
  @def_parents_memo[def_parent_node.offset] ||= Memo::DefParentMemo.new(def_parent_node)
end

#delete(*args) ⇒ Object

rbs:

  • (Memo::ParameterMemo) -> void | (Memo::MethodMemo) -> void



86
87
88
89
90
91
92
93
94
95
96
# File 'lib/ruby_mod_kit/memo_pad.rb', line 86

def delete(*args)
  case args
  in [Memo::ParameterMemo => parameter_memo]
    @parameters_memo.delete(parameter_memo.offset)
  in [Memo::MethodMemo => method_memo]
    method_memo.parameters.each do |parameter_memo| # rubocop:disable Lint/ShadowingOuterLocalVariable
      delete(parameter_memo)
    end
    @methods_memo.delete(method_memo.offset)
  end
end

#each_parameter_memo(&block) ⇒ void

This method returns an undefined value.

Parameters:

rbs:

  • &block: (Memo::ParameterMemo) -> void

  • return: void



102
103
104
# File 'lib/ruby_mod_kit/memo_pad.rb', line 102

def each_parameter_memo(&block)
  parameters_memo.each_value(&block)
end

#method_memo(def_node) ⇒ Memo::MethodMemo

Parameters:

Returns:

rbs:

  • def_node: Node::DefNode

  • return: Memo::MethodMemo



58
59
60
# File 'lib/ruby_mod_kit/memo_pad.rb', line 58

def method_memo(def_node)
  @methods_memo[def_node.offset] ||= Memo::MethodMemo.new(def_node)
end

#overload_memo(offset, name) ⇒ Memo::OverloadMemo

Parameters:

  • offset (Integer)
  • name (Symbol)

Returns:

rbs:

  • offset: Integer

  • name: Symbol

  • return: Memo::OverloadMemo



68
69
70
# File 'lib/ruby_mod_kit/memo_pad.rb', line 68

def overload_memo(offset, name)
  @overloads_memo[offset] ||= Memo::OverloadMemo.new(offset, name)
end

#parameter_memo(node) ⇒ Memo::ParameterMemo

Parameters:

Returns:

Raises:

rbs:

  • node: Node::BaseNode

  • return: Memo::ParameterMemo



76
77
78
79
80
81
82
# File 'lib/ruby_mod_kit/memo_pad.rb', line 76

def parameter_memo(node)
  memo = @parameters_memo[node.offset] ||= Memo::ParameterMemo.new(node.offset)
  def_node = node.def_node_at(node.offset)
  raise RubyModKit::Error unless def_node.is_a?(Node::DefNode)

  method_memo(def_node).add_parameter(memo)
end

#succ(offset_diff) ⇒ void

This method returns an undefined value.

Parameters:

rbs:

  • offset_diff: OffsetDiff

  • return: void



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/ruby_mod_kit/memo_pad.rb', line 34

def succ(offset_diff)
  [@methods_memo, @parameters_memo, @def_parents_memo, @overloads_memo].each do |offset_node_memo|
    new_offset_node_memo = {}
    offset_node_memo.each_value do |node_memo|
      node_memo.succ(offset_diff)
      new_offset_node_memo[node_memo.offset] = node_memo
    end
    offset_node_memo.replace(new_offset_node_memo)
  end
  self
end