ruby_mod_kit 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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