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.
- checksums.yaml +4 -4
- data/.ruby_mod_kit.yml +1 -0
- data/.yardopts +3 -0
- data/examples/user.rb +4 -16
- data/lib/ruby_mod_kit/cli.rb +5 -0
- data/lib/ruby_mod_kit/config.rb +6 -1
- data/lib/ruby_mod_kit/core_ext/eval.rb +7 -0
- data/lib/ruby_mod_kit/core_ext/load.rb +10 -0
- data/lib/ruby_mod_kit/corrector.rb +5 -0
- data/lib/ruby_mod_kit/corrector_manager.rb +6 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb +4 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter.rb +2 -0
- data/lib/ruby_mod_kit/feature/overload/overload_mission.rb +42 -10
- data/lib/ruby_mod_kit/feature/overload.rb +1 -0
- data/lib/ruby_mod_kit/feature/type/check/arguments/add_arguments_checker_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/check/arguments.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb +4 -0
- data/lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb +14 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/add_magic_comment_mission.rb +3 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline.rb +1 -0
- data/lib/ruby_mod_kit/feature/type/return_value_colon_corrector.rb +4 -0
- data/lib/ruby_mod_kit/feature/type/type_attr_mission.rb +3 -0
- data/lib/ruby_mod_kit/feature/type/yard/type_parameter_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/yard/type_return_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/yard.rb +3 -0
- data/lib/ruby_mod_kit/feature/type.rb +2 -0
- data/lib/ruby_mod_kit/feature.rb +2 -0
- data/lib/ruby_mod_kit/generation.rb +54 -71
- data/lib/ruby_mod_kit/memo/def_parent_memo.rb +6 -0
- data/lib/ruby_mod_kit/memo/ivar_memo.rb +16 -8
- data/lib/ruby_mod_kit/memo/method_memo.rb +8 -1
- data/lib/ruby_mod_kit/memo/offset_memo.rb +4 -0
- data/lib/ruby_mod_kit/memo/overload_memo.rb +9 -1
- data/lib/ruby_mod_kit/memo/parameter_memo.rb +6 -1
- data/lib/ruby_mod_kit/memo_pad.rb +28 -0
- data/lib/ruby_mod_kit/mission.rb +2 -0
- data/lib/ruby_mod_kit/node/base_node.rb +32 -1
- data/lib/ruby_mod_kit/node/begin_node.rb +4 -0
- data/lib/ruby_mod_kit/node/call_node.rb +4 -0
- data/lib/ruby_mod_kit/node/def_node.rb +36 -0
- data/lib/ruby_mod_kit/node/def_parent_node.rb +10 -2
- data/lib/ruby_mod_kit/node/parameter_node.rb +5 -0
- data/lib/ruby_mod_kit/node/program_node.rb +3 -0
- data/lib/ruby_mod_kit/node/statements_node.rb +4 -0
- data/lib/ruby_mod_kit/node/symbol_node.rb +7 -2
- data/lib/ruby_mod_kit/node/untyped_node.rb +4 -0
- data/lib/ruby_mod_kit/node/wrap.rb +4 -0
- data/lib/ruby_mod_kit/offset_diff.rb +6 -0
- data/lib/ruby_mod_kit/version.rb +1 -1
- data/lib/ruby_mod_kit.rb +29 -3
- data/sig/generated/ruby_mod_kit/cli.rbs +5 -0
- data/sig/generated/ruby_mod_kit/config.rbs +7 -2
- data/sig/generated/ruby_mod_kit/core_ext/eval.rbs +7 -0
- data/sig/generated/ruby_mod_kit/core_ext/load.rbs +10 -0
- data/sig/generated/ruby_mod_kit/corrector.rbs +5 -0
- data/sig/generated/ruby_mod_kit/corrector_manager.rbs +6 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rbs +4 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/overload/overload_mission.rbs +3 -0
- data/sig/generated/ruby_mod_kit/feature/overload.rbs +1 -0
- data/sig/generated/ruby_mod_kit/feature/type/check/arguments/add_arguments_checker_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/check/arguments.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rbs +4 -0
- data/sig/generated/ruby_mod_kit/feature/type/parameter_arrow_corrector.rbs +14 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/add_magic_comment_mission.rbs +3 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline.rbs +1 -0
- data/sig/generated/ruby_mod_kit/feature/type/return_value_colon_corrector.rbs +4 -0
- data/sig/generated/ruby_mod_kit/feature/type/type_attr_mission.rbs +3 -0
- data/sig/generated/ruby_mod_kit/feature/type/yard/type_parameter_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/yard/type_return_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/yard.rbs +3 -0
- data/sig/generated/ruby_mod_kit/feature/type.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature.rbs +2 -0
- data/sig/generated/ruby_mod_kit/generation.rbs +31 -34
- data/sig/generated/ruby_mod_kit/memo/def_parent_memo.rbs +6 -0
- data/sig/generated/ruby_mod_kit/memo/ivar_memo.rbs +16 -8
- data/sig/generated/ruby_mod_kit/memo/method_memo.rbs +8 -1
- data/sig/generated/ruby_mod_kit/memo/offset_memo.rbs +4 -0
- data/sig/generated/ruby_mod_kit/memo/overload_memo.rbs +8 -0
- data/sig/generated/ruby_mod_kit/memo/parameter_memo.rbs +6 -1
- data/sig/generated/ruby_mod_kit/memo_pad.rbs +19 -0
- data/sig/generated/ruby_mod_kit/mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/node/base_node.rbs +31 -2
- data/sig/generated/ruby_mod_kit/node/begin_node.rbs +4 -0
- data/sig/generated/ruby_mod_kit/node/call_node.rbs +4 -0
- data/sig/generated/ruby_mod_kit/node/def_node.rbs +24 -0
- data/sig/generated/ruby_mod_kit/node/def_parent_node.rbs +11 -3
- data/sig/generated/ruby_mod_kit/node/parameter_node.rbs +5 -0
- data/sig/generated/ruby_mod_kit/node/program_node.rbs +3 -0
- data/sig/generated/ruby_mod_kit/node/statements_node.rbs +4 -0
- data/sig/generated/ruby_mod_kit/node/symbol_node.rbs +8 -3
- data/sig/generated/ruby_mod_kit/node/untyped_node.rbs +4 -0
- data/sig/generated/ruby_mod_kit/node/wrap.rbs +4 -0
- data/sig/generated/ruby_mod_kit/offset_diff.rbs +6 -0
- data/sig/generated/ruby_mod_kit.rbs +31 -6
- 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
|
-
|
|
130
|
-
in [Node::BaseNode]
|
|
131
|
-
|
|
132
|
-
in [Prism::ParseError]
|
|
133
|
-
|
|
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
|
-
|
|
165
|
-
in [Node::BaseNode]
|
|
166
|
-
|
|
167
|
-
in [Node::BaseNode, Integer]
|
|
168
|
-
|
|
169
|
-
in [Prism::ParseError]
|
|
170
|
-
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
|
|
205
|
-
in [Node::BaseNode]
|
|
206
|
-
|
|
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:
|
|
10
|
-
# @rbs @attr_kind:
|
|
11
|
-
# @rbs @offset:
|
|
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:
|
|
14
|
+
# @rbs @visibility: Symbol | nil
|
|
15
15
|
# @rbs @separator: String
|
|
16
16
|
|
|
17
|
-
attr_reader :type #:
|
|
18
|
-
attr_reader :attr_kind #:
|
|
19
|
-
attr_accessor :offset #:
|
|
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 #:
|
|
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)
|
|
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
|
data/lib/ruby_mod_kit/mission.rb
CHANGED
|
@@ -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:
|
|
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
|