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.
- 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
|