ruby_mod_kit 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby_mod_kit.yml +1 -0
  3. data/.yardopts +3 -0
  4. data/examples/user.rb +4 -16
  5. data/lib/ruby_mod_kit/cli.rb +5 -0
  6. data/lib/ruby_mod_kit/config.rb +6 -1
  7. data/lib/ruby_mod_kit/core_ext/eval.rb +7 -0
  8. data/lib/ruby_mod_kit/core_ext/load.rb +10 -0
  9. data/lib/ruby_mod_kit/corrector.rb +5 -0
  10. data/lib/ruby_mod_kit/corrector_manager.rb +6 -0
  11. data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb +4 -0
  12. data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb +2 -0
  13. data/lib/ruby_mod_kit/feature/instance_variable_parameter.rb +2 -0
  14. data/lib/ruby_mod_kit/feature/overload/overload_mission.rb +42 -10
  15. data/lib/ruby_mod_kit/feature/overload.rb +1 -0
  16. data/lib/ruby_mod_kit/feature/type/check/arguments/add_arguments_checker_mission.rb +2 -0
  17. data/lib/ruby_mod_kit/feature/type/check/arguments.rb +2 -0
  18. data/lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb +4 -0
  19. data/lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb +14 -0
  20. data/lib/ruby_mod_kit/feature/type/rbs_inline/add_magic_comment_mission.rb +3 -0
  21. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rb +2 -0
  22. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rb +2 -0
  23. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rb +2 -0
  24. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rb +2 -0
  25. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rb +2 -0
  26. data/lib/ruby_mod_kit/feature/type/rbs_inline.rb +1 -0
  27. data/lib/ruby_mod_kit/feature/type/return_value_colon_corrector.rb +4 -0
  28. data/lib/ruby_mod_kit/feature/type/type_attr_mission.rb +3 -0
  29. data/lib/ruby_mod_kit/feature/type/yard/type_parameter_mission.rb +2 -0
  30. data/lib/ruby_mod_kit/feature/type/yard/type_return_mission.rb +2 -0
  31. data/lib/ruby_mod_kit/feature/type/yard.rb +3 -0
  32. data/lib/ruby_mod_kit/feature/type.rb +2 -0
  33. data/lib/ruby_mod_kit/feature.rb +2 -0
  34. data/lib/ruby_mod_kit/generation.rb +54 -71
  35. data/lib/ruby_mod_kit/memo/def_parent_memo.rb +6 -0
  36. data/lib/ruby_mod_kit/memo/ivar_memo.rb +16 -8
  37. data/lib/ruby_mod_kit/memo/method_memo.rb +8 -1
  38. data/lib/ruby_mod_kit/memo/offset_memo.rb +4 -0
  39. data/lib/ruby_mod_kit/memo/overload_memo.rb +9 -1
  40. data/lib/ruby_mod_kit/memo/parameter_memo.rb +6 -1
  41. data/lib/ruby_mod_kit/memo_pad.rb +28 -0
  42. data/lib/ruby_mod_kit/mission.rb +2 -0
  43. data/lib/ruby_mod_kit/node/base_node.rb +32 -1
  44. data/lib/ruby_mod_kit/node/begin_node.rb +4 -0
  45. data/lib/ruby_mod_kit/node/call_node.rb +4 -0
  46. data/lib/ruby_mod_kit/node/def_node.rb +36 -0
  47. data/lib/ruby_mod_kit/node/def_parent_node.rb +10 -2
  48. data/lib/ruby_mod_kit/node/parameter_node.rb +5 -0
  49. data/lib/ruby_mod_kit/node/program_node.rb +3 -0
  50. data/lib/ruby_mod_kit/node/statements_node.rb +4 -0
  51. data/lib/ruby_mod_kit/node/symbol_node.rb +7 -2
  52. data/lib/ruby_mod_kit/node/untyped_node.rb +4 -0
  53. data/lib/ruby_mod_kit/node/wrap.rb +4 -0
  54. data/lib/ruby_mod_kit/offset_diff.rb +6 -0
  55. data/lib/ruby_mod_kit/version.rb +1 -1
  56. data/lib/ruby_mod_kit.rb +29 -3
  57. data/sig/generated/ruby_mod_kit/cli.rbs +5 -0
  58. data/sig/generated/ruby_mod_kit/config.rbs +7 -2
  59. data/sig/generated/ruby_mod_kit/core_ext/eval.rbs +7 -0
  60. data/sig/generated/ruby_mod_kit/core_ext/load.rbs +10 -0
  61. data/sig/generated/ruby_mod_kit/corrector.rbs +5 -0
  62. data/sig/generated/ruby_mod_kit/corrector_manager.rbs +6 -0
  63. data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rbs +4 -0
  64. data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rbs +2 -0
  65. data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter.rbs +2 -0
  66. data/sig/generated/ruby_mod_kit/feature/overload/overload_mission.rbs +3 -0
  67. data/sig/generated/ruby_mod_kit/feature/overload.rbs +1 -0
  68. data/sig/generated/ruby_mod_kit/feature/type/check/arguments/add_arguments_checker_mission.rbs +2 -0
  69. data/sig/generated/ruby_mod_kit/feature/type/check/arguments.rbs +2 -0
  70. data/sig/generated/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rbs +4 -0
  71. data/sig/generated/ruby_mod_kit/feature/type/parameter_arrow_corrector.rbs +14 -0
  72. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/add_magic_comment_mission.rbs +3 -0
  73. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rbs +2 -0
  74. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rbs +2 -0
  75. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rbs +2 -0
  76. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rbs +2 -0
  77. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rbs +2 -0
  78. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline.rbs +1 -0
  79. data/sig/generated/ruby_mod_kit/feature/type/return_value_colon_corrector.rbs +4 -0
  80. data/sig/generated/ruby_mod_kit/feature/type/type_attr_mission.rbs +3 -0
  81. data/sig/generated/ruby_mod_kit/feature/type/yard/type_parameter_mission.rbs +2 -0
  82. data/sig/generated/ruby_mod_kit/feature/type/yard/type_return_mission.rbs +2 -0
  83. data/sig/generated/ruby_mod_kit/feature/type/yard.rbs +3 -0
  84. data/sig/generated/ruby_mod_kit/feature/type.rbs +2 -0
  85. data/sig/generated/ruby_mod_kit/feature.rbs +2 -0
  86. data/sig/generated/ruby_mod_kit/generation.rbs +31 -34
  87. data/sig/generated/ruby_mod_kit/memo/def_parent_memo.rbs +6 -0
  88. data/sig/generated/ruby_mod_kit/memo/ivar_memo.rbs +16 -8
  89. data/sig/generated/ruby_mod_kit/memo/method_memo.rbs +8 -1
  90. data/sig/generated/ruby_mod_kit/memo/offset_memo.rbs +4 -0
  91. data/sig/generated/ruby_mod_kit/memo/overload_memo.rbs +8 -0
  92. data/sig/generated/ruby_mod_kit/memo/parameter_memo.rbs +6 -1
  93. data/sig/generated/ruby_mod_kit/memo_pad.rbs +19 -0
  94. data/sig/generated/ruby_mod_kit/mission.rbs +2 -0
  95. data/sig/generated/ruby_mod_kit/node/base_node.rbs +31 -2
  96. data/sig/generated/ruby_mod_kit/node/begin_node.rbs +4 -0
  97. data/sig/generated/ruby_mod_kit/node/call_node.rbs +4 -0
  98. data/sig/generated/ruby_mod_kit/node/def_node.rbs +24 -0
  99. data/sig/generated/ruby_mod_kit/node/def_parent_node.rbs +11 -3
  100. data/sig/generated/ruby_mod_kit/node/parameter_node.rbs +5 -0
  101. data/sig/generated/ruby_mod_kit/node/program_node.rbs +3 -0
  102. data/sig/generated/ruby_mod_kit/node/statements_node.rbs +4 -0
  103. data/sig/generated/ruby_mod_kit/node/symbol_node.rbs +8 -3
  104. data/sig/generated/ruby_mod_kit/node/untyped_node.rbs +4 -0
  105. data/sig/generated/ruby_mod_kit/node/wrap.rbs +4 -0
  106. data/sig/generated/ruby_mod_kit/offset_diff.rbs +6 -0
  107. data/sig/generated/ruby_mod_kit.rbs +31 -6
  108. metadata +3 -2
@@ -36,6 +36,15 @@ module RubyModKit
36
36
  # @rbs corrector_manager: CorrectorManager | nil
37
37
  # @rbs features: Array[Feature] | nil
38
38
  # @rbs return: void
39
+ # @param script [String]
40
+ # @param missions [Array<Mission>]
41
+ # @param memo_pad [MemoPad, nil]
42
+ # @param generation_num [Integer]
43
+ # @param config [Config, nil]
44
+ # @param filename [String, nil]
45
+ # @param corrector_manager [CorrectorManager, nil]
46
+ # @param features [Array<Feature>, nil]
47
+ # @return [void]
39
48
  def initialize(script, missions: [], memo_pad: nil, generation_num: 0, config: nil,
40
49
  filename: nil, corrector_manager: nil, features: nil)
41
50
  @script = script
@@ -58,6 +67,7 @@ module RubyModKit
58
67
  end
59
68
 
60
69
  # @rbs return: void
70
+ # @return [void]
61
71
  def init_missions
62
72
  return unless first_generation?
63
73
 
@@ -69,11 +79,13 @@ module RubyModKit
69
79
  end
70
80
 
71
81
  # @rbs return: bool
82
+ # @return [Boolean]
72
83
  def first_generation?
73
84
  @generation_num == 0
74
85
  end
75
86
 
76
87
  # @rbs return: Generation
88
+ # @return [Generation]
77
89
  def succ
78
90
  if @errors.empty?
79
91
  perform_missions
@@ -95,11 +107,13 @@ module RubyModKit
95
107
  end
96
108
 
97
109
  # @rbs return: String
110
+ # @return [String]
98
111
  def name
99
112
  "#{@filename || "(eval)"}[gen #{@generation_num}]"
100
113
  end
101
114
 
102
115
  # @rbs return: bool
116
+ # @return [Boolean]
103
117
  def completed?
104
118
  @errors.empty? && @missions.empty?
105
119
  end
@@ -108,6 +122,10 @@ module RubyModKit
108
122
  # @rbs length: Integer
109
123
  # @rbs str: String
110
124
  # @rbs return: String
125
+ # @param src_offset [Integer]
126
+ # @param length [Integer]
127
+ # @param str [String]
128
+ # @return [String]
111
129
  def []=(src_offset, length, str)
112
130
  diff = str.length - length
113
131
  @script[@offset_diff[src_offset], length] = str
@@ -116,6 +134,8 @@ module RubyModKit
116
134
 
117
135
  # @rbs src_range: Range[Integer | nil]
118
136
  # @rbs return: String
137
+ # @param src_range [Range<Integer, nil>]
138
+ # @return [String]
119
139
  def [](src_range)
120
140
  @source[src_range] || raise(RubyModKit::Error, "Invalid range")
121
141
  end
@@ -125,106 +145,63 @@ module RubyModKit
125
145
  # | (Prism::ParseError) -> String
126
146
  def line(*args)
127
147
  case args
128
- in [Integer]
129
- line__overload0(*args)
130
- in [Node::BaseNode]
131
- line__overload1(*args)
132
- in [Prism::ParseError]
133
- line__overload2(*args)
148
+ in [Integer => line_num]
149
+ @lines[line_num] || raise(RubyModKit::Error)
150
+ in [Node::BaseNode => node]
151
+ line(node.location.start_line - 1)
152
+ in [Prism::ParseError => parse_error]
153
+ begin
154
+ line(parse_error.location.start_line - 1)
155
+ rescue RubyModKit::Error
156
+ ""
157
+ end
134
158
  end
135
159
  end
136
160
 
137
- # @rbs line_num: Integer
138
- # @rbs return: String
139
- def line__overload0(line_num)
140
- @lines[line_num] || raise(RubyModKit::Error)
141
- end
142
-
143
- # @rbs node: Node::BaseNode
144
- # @rbs return: String
145
- def line__overload1(node)
146
- line(node.location.start_line - 1)
147
- end
148
-
149
- # @rbs parse_error: Prism::ParseError
150
- # @rbs return: String
151
- def line__overload2(parse_error)
152
- line(parse_error.location.start_line - 1)
153
- rescue RubyModKit::Error
154
- ""
155
- end
156
-
157
161
  # @rbs (Integer) -> (Integer | nil)
158
162
  # | (Node::BaseNode) -> (Integer | nil)
159
163
  # | (Node::BaseNode, Integer) -> (Integer | nil)
160
164
  # | (Prism::ParseError) -> (Integer | nil)
161
165
  def line_offset(*args)
162
166
  case args
163
- in [Integer]
164
- line_offset__overload0(*args)
165
- in [Node::BaseNode]
166
- line_offset__overload1(*args)
167
- in [Node::BaseNode, Integer]
168
- line_offset__overload2(*args)
169
- in [Prism::ParseError]
170
- line_offset__overload3(*args)
167
+ in [Integer => line_num]
168
+ @offsets[line_num]
169
+ in [Node::BaseNode => node]
170
+ line_offset(node, 0)
171
+ in [Node::BaseNode => node, Integer => line_offset]
172
+ line_offset(node.location.start_line - 1 + line_offset)
173
+ in [Prism::ParseError => parse_error]
174
+ line_offset(parse_error.location.start_line - 1)
171
175
  end
172
176
  end
173
177
 
174
- # @rbs line_num: Integer
175
- # @rbs return: Integer | nil
176
- def line_offset__overload0(line_num)
177
- @offsets[line_num]
178
- end
179
-
180
178
  # @rbs node: Node::BaseNode
181
179
  # @rbs return: Integer | nil
182
- def line_offset__overload1(node)
183
- line_offset(node, 0)
184
- end
185
-
186
- # @rbs node: Node::BaseNode
187
- # @rbs line_offset: Integer
188
- # @rbs return: Integer | nil
189
- def line_offset__overload2(node, line_offset)
190
- line_offset(node.location.start_line - 1 + line_offset)
191
- end
192
-
193
- # @rbs parse_error: Prism::ParseError
194
- # @rbs return: Integer | nil
195
- def line_offset__overload3(parse_error)
196
- line_offset(parse_error.location.start_line - 1)
180
+ # @param node [Node::BaseNode]
181
+ # @return [Integer, nil]
182
+ def end_line_offset(node)
183
+ line_offset(node.location.end_line - 1)
197
184
  end
198
185
 
199
186
  # @rbs (Integer) -> String
200
187
  # | (Node::BaseNode) -> String
201
188
  def line_indent(*args)
202
189
  case args
203
- in [Integer]
204
- line_indent__overload0(*args)
205
- in [Node::BaseNode]
206
- line_indent__overload1(*args)
190
+ in [Integer => line_num]
191
+ line(line_num)[/\A[ \t]*/] || ""
192
+ in [Node::BaseNode => node]
193
+ line_indent(node.location.start_line - 1)
207
194
  end
208
195
  end
209
196
 
210
- # @rbs line_num: Integer
211
- # @rbs return: String
212
- def line_indent__overload0(line_num)
213
- line(line_num)[/\A[ \t]*/] || ""
214
- end
215
-
216
- # @rbs node: Node::BaseNode
217
- # @rbs return: String
218
- def line_indent__overload1(node)
219
- line_indent(node.location.start_line - 1)
220
- end
221
-
222
197
  # @rbs return: void
198
+ # @return [void]
223
199
  def perform_corrector
224
200
  @corrector_manager.perform(self)
225
201
  end
226
202
 
227
203
  # @rbs return: void
204
+ # @return [void]
228
205
  def perform_missions
229
206
  @missions.delete_if do |mission|
230
207
  mission.perform(self) || break
@@ -233,6 +210,8 @@ module RubyModKit
233
210
 
234
211
  # @rbs mission: Mission
235
212
  # @rbs return: void
213
+ # @param mission [Mission]
214
+ # @return [void]
236
215
  def add_mission(mission)
237
216
  @missions << mission
238
217
  end
@@ -242,6 +221,10 @@ module RubyModKit
242
221
  # @rbs filename: String | nil
243
222
  # @rbs config: Config | nil
244
223
  # @rbs return: Generation
224
+ # @param src [String]
225
+ # @param filename [String, nil]
226
+ # @param config [Config, nil]
227
+ # @return [Generation]
245
228
  def resolve(src, filename: nil, config: nil)
246
229
  generation = Generation.new(src.dup, filename: filename, config: config)
247
230
  generation = generation.succ until generation.completed?
@@ -12,6 +12,8 @@ module RubyModKit
12
12
 
13
13
  # @rbs def_parent_node: Node::DefParentNode
14
14
  # @rbs return: void
15
+ # @param def_parent_node [Node::DefParentNode]
16
+ # @return [void]
15
17
  def initialize(def_parent_node)
16
18
  @ivars_memo = {}
17
19
  super(def_parent_node.offset)
@@ -19,12 +21,16 @@ module RubyModKit
19
21
 
20
22
  # @rbs name: Symbol
21
23
  # @rbs return: Memo::IvarMemo
24
+ # @param name [Symbol]
25
+ # @return [Memo::IvarMemo]
22
26
  def ivar_memo(name)
23
27
  @ivars_memo[name] ||= Memo::IvarMemo.new(name)
24
28
  end
25
29
 
26
30
  # @rbs offset_diff: OffsetDiff
27
31
  # @rbs return: void
32
+ # @param offset_diff [OffsetDiff]
33
+ # @return [void]
28
34
  def succ(offset_diff)
29
35
  @ivars_memo.each_value do |ivar_memo|
30
36
  ivar_memo.succ(offset_diff)
@@ -6,23 +6,25 @@ module RubyModKit
6
6
  module Memo
7
7
  # The memo for parameter type
8
8
  class IvarMemo
9
- # @rbs @type: nil | String
10
- # @rbs @attr_kind: nil | Symbol
11
- # @rbs @offset: nil | Integer
9
+ # @rbs @type: String | nil
10
+ # @rbs @attr_kind: Symbol | nil
11
+ # @rbs @offset: Integer | nil
12
12
  # @rbs @indent: String
13
13
  # @rbs @name: Symbol
14
- # @rbs @visibility: nil | Symbol
14
+ # @rbs @visibility: Symbol | nil
15
15
  # @rbs @separator: String
16
16
 
17
- attr_reader :type #: nil | String
18
- attr_reader :attr_kind #: nil | Symbol
19
- attr_accessor :offset #: nil | Integer
17
+ attr_reader :type #: String | nil
18
+ attr_reader :attr_kind #: Symbol | nil
19
+ attr_accessor :offset #: Integer | nil
20
20
  attr_accessor :indent #: String
21
- attr_accessor :visibility #: nil | Symbol
21
+ attr_accessor :visibility #: Symbol | nil
22
22
  attr_accessor :separator #: String
23
23
 
24
24
  # @rbs name: Symbol
25
25
  # @rbs return: void
26
+ # @param name [Symbol]
27
+ # @return [void]
26
28
  def initialize(name)
27
29
  @name = name
28
30
  @indent = ""
@@ -30,12 +32,16 @@ module RubyModKit
30
32
 
31
33
  # @rbs type: String
32
34
  # @rbs return: void
35
+ # @param type [String]
36
+ # @return [void]
33
37
  def type=(type)
34
38
  @type = RubyModKit.unify_type(type)
35
39
  end
36
40
 
37
41
  # @rbs kind: Symbol | String
38
42
  # @rbs return: void
43
+ # @param kind [Symbol, String]
44
+ # @return [void]
39
45
  def attr_kind=(kind)
40
46
  case kind.to_sym
41
47
  when :attr_reader, :reader, :getter
@@ -49,6 +55,8 @@ module RubyModKit
49
55
 
50
56
  # @rbs offset_diff: OffsetDiff
51
57
  # @rbs return: void
58
+ # @param offset_diff [OffsetDiff]
59
+ # @return [void]
52
60
  def succ(offset_diff)
53
61
  offset = @offset
54
62
  return unless offset
@@ -14,10 +14,12 @@ module RubyModKit
14
14
  attr_reader :parameters #: Set[Memo::ParameterMemo]
15
15
  attr_reader :type #: String
16
16
 
17
- UNTYPED = "untyped"
17
+ UNTYPED = "untyped" #: String
18
18
 
19
19
  # @rbs node: Node::DefNode
20
20
  # @rbs return: void
21
+ # @param node [Node::DefNode]
22
+ # @return [void]
21
23
  def initialize(node)
22
24
  @type = UNTYPED
23
25
  @parameters = Set.new
@@ -29,18 +31,23 @@ module RubyModKit
29
31
 
30
32
  # @rbs parameter_memo: Memo::ParameterMemo
31
33
  # @rbs return: Memo::ParameterMemo
34
+ # @param parameter_memo [Memo::ParameterMemo]
35
+ # @return [Memo::ParameterMemo]
32
36
  def add_parameter(parameter_memo)
33
37
  @parameters << parameter_memo
34
38
  parameter_memo
35
39
  end
36
40
 
37
41
  # @rbs return: bool
42
+ # @return [Boolean]
38
43
  def untyped?
39
44
  @type == UNTYPED
40
45
  end
41
46
 
42
47
  # @rbs type: String
43
48
  # @rbs return: void
49
+ # @param type [String]
50
+ # @return [void]
44
51
  def type=(type)
45
52
  @type = RubyModKit.unify_type(type)
46
53
  end
@@ -12,12 +12,16 @@ module RubyModKit
12
12
 
13
13
  # @rbs offset: Integer
14
14
  # @rbs return: void
15
+ # @param offset [Integer]
16
+ # @return [void]
15
17
  def initialize(offset)
16
18
  @offset = offset
17
19
  end
18
20
 
19
21
  # @rbs offset_diff: OffsetDiff
20
22
  # @rbs return: void
23
+ # @param offset_diff [OffsetDiff]
24
+ # @return [void]
21
25
  def succ(offset_diff)
22
26
  @offset = offset_diff[@offset]
23
27
  end
@@ -17,6 +17,9 @@ module RubyModKit
17
17
  # @rbs offset: Integer
18
18
  # @rbs name: Symbol
19
19
  # @rbs return: void
20
+ # @param offset [Integer]
21
+ # @param name [Symbol]
22
+ # @return [void]
20
23
  def initialize(offset, name)
21
24
  @name = name
22
25
  @overload_types = []
@@ -26,10 +29,12 @@ module RubyModKit
26
29
 
27
30
  # @rbs root_node: Node::ProgramNode
28
31
  # @rbs return: Integer
32
+ # @param root_node [Node::ProgramNode]
33
+ # @return [Integer]
29
34
  def correct_offset(root_node)
30
35
  return @offset if @offset_corrected
31
36
 
32
- node = root_node.def_node_at(@offset)&.prev
37
+ node = root_node.def_node_at(@offset)
33
38
  raise RubyModKit::Error unless node.is_a?(Node::DefNode)
34
39
 
35
40
  @offset_corrected = true
@@ -39,6 +44,9 @@ module RubyModKit
39
44
  # @rbs parameter_types: Array[String]
40
45
  # @rbs return_value_type: String
41
46
  # @rbs return: void
47
+ # @param parameter_types [Array<String>]
48
+ # @param return_value_type [String]
49
+ # @return [void]
42
50
  def add_overload_type(parameter_types, return_value_type)
43
51
  @overload_types << [parameter_types, return_value_type]
44
52
  end
@@ -16,10 +16,12 @@ module RubyModKit
16
16
  attr_accessor :qualifier #: String | nil
17
17
  attr_accessor :name #: Symbol
18
18
 
19
- UNTYPED = "untyped"
19
+ UNTYPED = "untyped" #: String
20
20
 
21
21
  # @rbs offset: Integer
22
22
  # @rbs return: void
23
+ # @param offset [Integer]
24
+ # @return [void]
23
25
  def initialize(offset)
24
26
  @type = UNTYPED
25
27
  @ivar_parameter = false
@@ -27,12 +29,15 @@ module RubyModKit
27
29
  end
28
30
 
29
31
  # @rbs return: bool
32
+ # @return [Boolean]
30
33
  def untyped?
31
34
  @type == UNTYPED
32
35
  end
33
36
 
34
37
  # @rbs type: String
35
38
  # @rbs return: void
39
+ # @param type [String]
40
+ # @return [void]
36
41
  def type=(type)
37
42
  @type = RubyModKit.unify_type(type)
38
43
  end
@@ -18,6 +18,7 @@ module RubyModKit
18
18
  attr_accessor :flags #: Hash[Symbol, bool]
19
19
 
20
20
  # @rbs return: void
21
+ # @return [void]
21
22
  def initialize
22
23
  @def_parents_memo = {}
23
24
  @methods_memo = {}
@@ -28,6 +29,8 @@ module RubyModKit
28
29
 
29
30
  # @rbs offset_diff: OffsetDiff
30
31
  # @rbs return: void
32
+ # @param offset_diff [OffsetDiff]
33
+ # @return [void]
31
34
  def succ(offset_diff)
32
35
  [@methods_memo, @parameters_memo, @def_parents_memo, @overloads_memo].each do |offset_node_memo|
33
36
  new_offset_node_memo = {}
@@ -42,12 +45,16 @@ module RubyModKit
42
45
 
43
46
  # @rbs def_parent_node: Node::DefParentNode
44
47
  # @rbs return: Memo::DefParentMemo
48
+ # @param def_parent_node [Node::DefParentNode]
49
+ # @return [Memo::DefParentMemo]
45
50
  def def_parent_memo(def_parent_node)
46
51
  @def_parents_memo[def_parent_node.offset] ||= Memo::DefParentMemo.new(def_parent_node)
47
52
  end
48
53
 
49
54
  # @rbs def_node: Node::DefNode
50
55
  # @rbs return: Memo::MethodMemo
56
+ # @param def_node [Node::DefNode]
57
+ # @return [Memo::MethodMemo]
51
58
  def method_memo(def_node)
52
59
  @methods_memo[def_node.offset] ||= Memo::MethodMemo.new(def_node)
53
60
  end
@@ -55,12 +62,17 @@ module RubyModKit
55
62
  # @rbs offset: Integer
56
63
  # @rbs name: Symbol
57
64
  # @rbs return: Memo::OverloadMemo
65
+ # @param offset [Integer]
66
+ # @param name [Symbol]
67
+ # @return [Memo::OverloadMemo]
58
68
  def overload_memo(offset, name)
59
69
  @overloads_memo[offset] ||= Memo::OverloadMemo.new(offset, name)
60
70
  end
61
71
 
62
72
  # @rbs node: Node::BaseNode
63
73
  # @rbs return: Memo::ParameterMemo
74
+ # @param node [Node::BaseNode]
75
+ # @return [Memo::ParameterMemo]
64
76
  def parameter_memo(node)
65
77
  memo = @parameters_memo[node.offset] ||= Memo::ParameterMemo.new(node.offset)
66
78
  def_node = node.def_node_at(node.offset)
@@ -69,8 +81,24 @@ module RubyModKit
69
81
  method_memo(def_node).add_parameter(memo)
70
82
  end
71
83
 
84
+ # @rbs (Memo::ParameterMemo) -> void
85
+ # | (Memo::MethodMemo) -> void
86
+ def delete(*args)
87
+ case args
88
+ in [Memo::ParameterMemo => parameter_memo]
89
+ @parameters_memo.delete(parameter_memo.offset)
90
+ in [Memo::MethodMemo => method_memo]
91
+ method_memo.parameters.each do |parameter_memo| # rubocop:disable Lint/ShadowingOuterLocalVariable
92
+ delete(parameter_memo)
93
+ end
94
+ @methods_memo.delete(method_memo.offset)
95
+ end
96
+ end
97
+
72
98
  # @rbs &block: (Memo::ParameterMemo) -> void
73
99
  # @rbs return: void
100
+ # @param block [(Memo::ParameterMemo) -> void]
101
+ # @return [void]
74
102
  def each_parameter_memo(&block)
75
103
  parameters_memo.each_value(&block)
76
104
  end
@@ -7,6 +7,8 @@ module RubyModKit
7
7
  class Mission
8
8
  # @rbs _generation: Generation
9
9
  # @rbs return: void
10
+ # @param _generation [Generation]
11
+ # @return [void]
10
12
  def perform(_generation)
11
13
  raise RubyModKit::Error, "Unexpected type #{self.class}"
12
14
  end
@@ -14,6 +14,7 @@ module RubyModKit
14
14
  attr_reader :prev #: Node::BaseNode | nil
15
15
 
16
16
  # @rbs return: Prism::Location
17
+ # @return [Prism::Location]
17
18
  def location
18
19
  return @location if defined?(@location)
19
20
 
@@ -21,6 +22,7 @@ module RubyModKit
21
22
  end
22
23
 
23
24
  # @rbs return: Array[Node::BaseNode]
25
+ # @return [Array<Node::BaseNode>]
24
26
  def children
25
27
  return @children if @children
26
28
 
@@ -33,11 +35,15 @@ module RubyModKit
33
35
  # @rbs prism_node: Prism::Node
34
36
  # @rbs prev: Node::BaseNode | nil
35
37
  # @rbs return: Node::BaseNode
38
+ # @param prism_node [Prism::Node]
39
+ # @param prev [Node::BaseNode, nil]
40
+ # @return [Node::BaseNode]
36
41
  def wrap(prism_node, prev: nil)
37
42
  Node.wrap(prism_node, parent: self, prev: prev)
38
43
  end
39
44
 
40
45
  # @rbs return: Array[Node::BaseNode]
46
+ # @return [Array<Node::BaseNode>]
41
47
  def ancestors
42
48
  return @ancestors if @ancestors
43
49
 
@@ -49,18 +55,22 @@ module RubyModKit
49
55
  end
50
56
  end
51
57
 
52
- # @rbs return: nil | BaseNode
58
+ # @rbs return: BaseNode | nil
59
+ # @return [BaseNode, nil]
53
60
  def parent
54
61
  raise(RubyModKit::Error)
55
62
  end
56
63
 
57
64
  # @rbs return: Symbol
65
+ # @return [Symbol]
58
66
  def name
59
67
  raise(RubyModKit::Error, "Expected ParameterNode but #{self.class}:#{prism_node.inspect}")
60
68
  end
61
69
 
62
70
  # @rbs offset: Integer
63
71
  # @rbs return: Node::BaseNode | nil
72
+ # @param offset [Integer]
73
+ # @return [Node::BaseNode, nil]
64
74
  def node_at(offset)
65
75
  return nil unless include?(offset)
66
76
 
@@ -70,6 +80,8 @@ module RubyModKit
70
80
 
71
81
  # @rbs offset: Integer
72
82
  # @rbs return: Node::StatementsNode | nil
83
+ # @param offset [Integer]
84
+ # @return [Node::StatementsNode, nil]
73
85
  def statements_node_at(offset)
74
86
  node = node_at(offset) || return
75
87
  [node, *node.ancestors].each { return _1 if _1.is_a?(Node::StatementsNode) }
@@ -78,6 +90,8 @@ module RubyModKit
78
90
 
79
91
  # @rbs offset: Integer
80
92
  # @rbs return: Node::DefNode | nil
93
+ # @param offset [Integer]
94
+ # @return [Node::DefNode, nil]
81
95
  def def_node_at(offset)
82
96
  node = node_at(offset) || return
83
97
  [node, *node.ancestors].each { return _1 if _1.is_a?(Node::DefNode) }
@@ -86,6 +100,8 @@ module RubyModKit
86
100
 
87
101
  # @rbs offset: Integer
88
102
  # @rbs return: Node::ParameterNode | nil
103
+ # @param offset [Integer]
104
+ # @return [Node::ParameterNode, nil]
89
105
  def parameter_node_at(offset)
90
106
  node = node_at(offset) || return
91
107
  [node, *node.ancestors].each { return _1 if _1.is_a?(Node::ParameterNode) }
@@ -95,6 +111,9 @@ module RubyModKit
95
111
  # @rbs offset: Integer
96
112
  # @rbs allowed: Array[Class] | nil
97
113
  # @rbs return: Node::DefParentNode | nil
114
+ # @param offset [Integer]
115
+ # @param allowed [Array<Class>, nil]
116
+ # @return [Node::DefParentNode, nil]
98
117
  def def_parent_node_at(offset, allowed: nil)
99
118
  node = node_at(offset) || return
100
119
  [node, *node.ancestors].each do |ancestor_node|
@@ -106,21 +125,32 @@ module RubyModKit
106
125
 
107
126
  # @rbs offset: Integer
108
127
  # @rbs return: bool
128
+ # @param offset [Integer]
129
+ # @return [Boolean]
109
130
  def include?(offset)
110
131
  self.offset <= offset && offset <= prism_node.location.end_offset
111
132
  end
112
133
 
113
134
  # @rbs return: Integer
135
+ # @return [Integer]
114
136
  def offset
115
137
  location.start_offset
116
138
  end
117
139
 
140
+ # @rbs return: Integer
141
+ # @return [Integer]
142
+ def end_offset
143
+ location.end_offset
144
+ end
145
+
118
146
  # @rbs return: String
147
+ # @return [String]
119
148
  def slice
120
149
  location.slice
121
150
  end
122
151
 
123
152
  # @rbs return: String
153
+ # @return [String]
124
154
  def inspect
125
155
  str = +"#<#{self.class} "
126
156
  first = true
@@ -155,6 +185,7 @@ module RubyModKit
155
185
  # :nocov:
156
186
  # This is just for interface definition, must not be called
157
187
  # @rbs return: Prism::Node & Prism::_Node
188
+ # @return [Prism::Node & Prism::_Node]
158
189
  def prism_node
159
190
  raise RubyModKit::Error
160
191
  end
@@ -18,6 +18,10 @@ module RubyModKit
18
18
  # @rbs parent: Node::BaseNode
19
19
  # @rbs prev: Node::BaseNode | nil
20
20
  # @rbs return: void
21
+ # @param prism_node [Prism::BeginNode]
22
+ # @param parent [Node::BaseNode]
23
+ # @param prev [Node::BaseNode, nil]
24
+ # @return [void]
21
25
  def initialize(prism_node, parent:, prev: nil)
22
26
  @prism_node = prism_node
23
27
  @parent = parent
@@ -20,6 +20,10 @@ module RubyModKit
20
20
  # @rbs parent: Node::BaseNode
21
21
  # @rbs prev: Node::BaseNode | nil
22
22
  # @rbs return: void
23
+ # @param prism_node [Prism::CallNode]
24
+ # @param parent [Node::BaseNode]
25
+ # @param prev [Node::BaseNode, nil]
26
+ # @return [void]
23
27
  def initialize(prism_node, parent:, prev: nil)
24
28
  @prism_node = prism_node
25
29
  @parent = parent