ruby_mod_kit 0.0.3 → 0.0.5
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 +5 -0
- data/README.md +89 -0
- data/lib/ruby_mod_kit/cli.rb +17 -2
- data/lib/ruby_mod_kit/config.rb +53 -0
- data/lib/ruby_mod_kit/core_ext/eval.rb +6 -10
- data/lib/ruby_mod_kit/corrector.rb +4 -3
- data/lib/ruby_mod_kit/corrector_manager.rb +18 -18
- data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb +5 -7
- data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb +4 -11
- data/lib/ruby_mod_kit/feature/overload/overload_mission.rb +8 -12
- data/lib/ruby_mod_kit/feature/type/check/arguments/add_arguments_checker_mission.rb +56 -0
- data/lib/ruby_mod_kit/feature/type/check/arguments.rb +23 -0
- data/lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb +20 -12
- data/lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb +35 -19
- data/lib/ruby_mod_kit/feature/type/rbs_inline/add_magic_comment_mission.rb +49 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rb +12 -7
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rb +7 -8
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rb +6 -9
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rb +9 -10
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rb +5 -7
- data/lib/ruby_mod_kit/feature/type/rbs_inline.rb +3 -0
- data/lib/ruby_mod_kit/feature/type/return_value_colon_corrector.rb +5 -6
- data/lib/ruby_mod_kit/feature/type/type_attr_mission.rb +13 -17
- data/lib/ruby_mod_kit/feature/type/yard/type_parameter_mission.rb +35 -0
- data/lib/ruby_mod_kit/feature/type/yard/type_return_mission.rb +30 -0
- data/lib/ruby_mod_kit/feature/type/yard.rb +31 -0
- data/lib/ruby_mod_kit/feature.rb +0 -6
- data/lib/ruby_mod_kit/generation.rb +83 -39
- data/lib/ruby_mod_kit/memo/ivar_memo.rb +4 -0
- data/lib/ruby_mod_kit/memo/overload_memo.rb +1 -0
- data/lib/ruby_mod_kit/memo/parameter_memo.rb +4 -2
- data/lib/ruby_mod_kit/memo.rb +0 -2
- data/lib/ruby_mod_kit/memo_pad.rb +9 -0
- data/lib/ruby_mod_kit/mission.rb +1 -8
- data/lib/ruby_mod_kit/node/base_node.rb +39 -12
- data/lib/ruby_mod_kit/node/begin_node.rb +31 -0
- data/lib/ruby_mod_kit/node/call_node.rb +1 -1
- data/lib/ruby_mod_kit/node/def_node.rb +1 -1
- data/lib/ruby_mod_kit/node/def_parent_node.rb +13 -6
- data/lib/ruby_mod_kit/node/parameter_node.rb +3 -3
- data/lib/ruby_mod_kit/node/program_node.rb +6 -1
- data/lib/ruby_mod_kit/node/statements_node.rb +1 -1
- data/lib/ruby_mod_kit/node/symbol_node.rb +2 -1
- data/lib/ruby_mod_kit/node/untyped_node.rb +1 -1
- data/lib/ruby_mod_kit/node/wrap.rb +3 -1
- data/lib/ruby_mod_kit/node.rb +1 -2
- data/lib/ruby_mod_kit/version.rb +1 -1
- data/lib/ruby_mod_kit.rb +11 -11
- data/ruby_mod_kit.gemspec +7 -1
- data/sig/generated/ruby_mod_kit/cli.rbs +5 -0
- data/sig/generated/ruby_mod_kit/config.rbs +21 -0
- data/sig/generated/ruby_mod_kit/core_ext/eval.rbs +4 -2
- data/sig/generated/ruby_mod_kit/corrector.rbs +4 -3
- data/sig/generated/ruby_mod_kit/corrector_manager.rbs +3 -7
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rbs +1 -3
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rbs +1 -8
- data/sig/generated/ruby_mod_kit/feature/overload/overload_mission.rbs +1 -4
- data/sig/generated/ruby_mod_kit/feature/type/check/arguments/add_arguments_checker_mission.rbs +16 -0
- data/sig/generated/ruby_mod_kit/feature/type/check/arguments.rbs +15 -0
- data/sig/generated/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rbs +7 -3
- data/sig/generated/ruby_mod_kit/feature/type/parameter_arrow_corrector.rbs +8 -9
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/add_magic_comment_mission.rbs +21 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rbs +1 -4
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rbs +1 -4
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rbs +1 -4
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rbs +1 -4
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rbs +1 -4
- data/sig/generated/ruby_mod_kit/feature/type/return_value_colon_corrector.rbs +1 -3
- data/sig/generated/ruby_mod_kit/feature/type/type_attr_mission.rbs +3 -4
- data/sig/generated/ruby_mod_kit/feature/type/yard/type_parameter_mission.rbs +16 -0
- data/sig/generated/ruby_mod_kit/feature/type/yard/type_return_mission.rbs +16 -0
- data/sig/generated/ruby_mod_kit/feature/type/yard.rbs +17 -0
- data/sig/generated/ruby_mod_kit/feature.rbs +0 -4
- data/sig/generated/ruby_mod_kit/generation.rbs +55 -15
- data/sig/generated/ruby_mod_kit/memo/ivar_memo.rbs +8 -0
- data/sig/generated/ruby_mod_kit/memo/overload_memo.rbs +2 -0
- data/sig/generated/ruby_mod_kit/memo/parameter_memo.rbs +6 -2
- data/sig/generated/ruby_mod_kit/memo_pad.rbs +8 -0
- data/sig/generated/ruby_mod_kit/mission.rbs +1 -8
- data/sig/generated/ruby_mod_kit/node/base_node.rbs +22 -8
- data/sig/generated/ruby_mod_kit/node/begin_node.rbs +26 -0
- data/sig/generated/ruby_mod_kit/node/def_parent_node.rbs +5 -0
- data/sig/generated/ruby_mod_kit/node/parameter_node.rbs +1 -1
- data/sig/generated/ruby_mod_kit/node/program_node.rbs +3 -0
- data/sig/generated/ruby_mod_kit/node/symbol_node.rbs +2 -0
- data/sig/generated/ruby_mod_kit.rbs +6 -3
- data/sig/yaml.rbs +3 -0
- metadata +21 -5
- data/sig/generated/ruby_mod_kit/memo.rbs +0 -7
- data/sig/generated/ruby_mod_kit/node.rbs +0 -7
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
module RubyModKit
|
|
6
6
|
# The class of transpiler generation.
|
|
7
7
|
class Generation
|
|
8
|
-
# @rbs @parse_result: Prism::ParseResult
|
|
9
8
|
# @rbs @script: String
|
|
10
9
|
# @rbs @missions: Array[Mission]
|
|
11
10
|
# @rbs @memo_pad: MemoPad
|
|
@@ -15,36 +14,46 @@ module RubyModKit
|
|
|
15
14
|
# @rbs @filename: String | nil
|
|
16
15
|
# @rbs @corrector_manager: CorrectorManager
|
|
17
16
|
# @rbs @features: Array[Feature]
|
|
17
|
+
# @rbs @config: Config
|
|
18
|
+
# @rbs @errors: Array[Prism::ParseError]
|
|
19
|
+
# @rbs @lines: Array[String]
|
|
20
|
+
# @rbs @offsets: Array[Integer]
|
|
21
|
+
# @rbs @source: String
|
|
18
22
|
|
|
19
|
-
attr_reader :parse_result #: Prism::ParseResult
|
|
20
23
|
attr_reader :script #: String
|
|
24
|
+
attr_reader :memo_pad #: MemoPad
|
|
25
|
+
attr_reader :root_node #: Node::ProgramNode
|
|
26
|
+
attr_reader :errors #: Array[Prism::ParseError]
|
|
27
|
+
attr_reader :lines #: Array[String]
|
|
28
|
+
attr_reader :offsets #: Array[Integer]
|
|
21
29
|
|
|
22
30
|
# @rbs script: String
|
|
23
31
|
# @rbs missions: Array[Mission]
|
|
24
32
|
# @rbs memo_pad: MemoPad | nil
|
|
25
33
|
# @rbs generation_num: Integer
|
|
34
|
+
# @rbs config: Config | nil
|
|
26
35
|
# @rbs filename: String | nil
|
|
27
36
|
# @rbs corrector_manager: CorrectorManager | nil
|
|
28
37
|
# @rbs features: Array[Feature] | nil
|
|
29
38
|
# @rbs return: void
|
|
30
|
-
def initialize(script, missions: [], memo_pad: nil, generation_num: 0,
|
|
39
|
+
def initialize(script, missions: [], memo_pad: nil, generation_num: 0, config: nil,
|
|
31
40
|
filename: nil, corrector_manager: nil, features: nil)
|
|
32
41
|
@script = script
|
|
33
42
|
@missions = missions
|
|
34
43
|
@generation_num = generation_num
|
|
35
44
|
@filename = filename
|
|
36
|
-
@
|
|
37
|
-
|
|
38
|
-
Feature::Overload.new,
|
|
39
|
-
Feature::Type.new,
|
|
40
|
-
Feature::Type::RbsInline.new,
|
|
41
|
-
].sort
|
|
45
|
+
@config = config || Config.new
|
|
46
|
+
@features = features || @config.features
|
|
42
47
|
|
|
43
48
|
@memo_pad = memo_pad || MemoPad.new
|
|
44
49
|
@corrector_manager = corrector_manager || CorrectorManager.new(@features)
|
|
45
50
|
@offset_diff = OffsetDiff.new
|
|
46
|
-
|
|
47
|
-
@
|
|
51
|
+
parse_result = Prism.parse(@script)
|
|
52
|
+
@errors = parse_result.errors
|
|
53
|
+
@lines = parse_result.source.lines
|
|
54
|
+
@offsets = parse_result.source.offsets
|
|
55
|
+
@source = @script.dup
|
|
56
|
+
@root_node = Node::ProgramNode.new(parse_result.value)
|
|
48
57
|
init_missions
|
|
49
58
|
end
|
|
50
59
|
|
|
@@ -66,14 +75,11 @@ module RubyModKit
|
|
|
66
75
|
|
|
67
76
|
# @rbs return: Generation
|
|
68
77
|
def succ
|
|
69
|
-
if @
|
|
78
|
+
if @errors.empty?
|
|
70
79
|
perform_missions
|
|
71
80
|
else
|
|
72
81
|
perform_corrector
|
|
73
82
|
end
|
|
74
|
-
@missions.each do |mission|
|
|
75
|
-
mission.succ(@offset_diff)
|
|
76
|
-
end
|
|
77
83
|
@memo_pad.succ(@offset_diff)
|
|
78
84
|
|
|
79
85
|
Generation.new(
|
|
@@ -84,6 +90,7 @@ module RubyModKit
|
|
|
84
90
|
filename: @filename,
|
|
85
91
|
corrector_manager: @corrector_manager,
|
|
86
92
|
features: @features,
|
|
93
|
+
config: @config,
|
|
87
94
|
)
|
|
88
95
|
end
|
|
89
96
|
|
|
@@ -94,7 +101,7 @@ module RubyModKit
|
|
|
94
101
|
|
|
95
102
|
# @rbs return: bool
|
|
96
103
|
def completed?
|
|
97
|
-
@
|
|
104
|
+
@errors.empty? && @missions.empty?
|
|
98
105
|
end
|
|
99
106
|
|
|
100
107
|
# @rbs src_offset: Integer
|
|
@@ -107,18 +114,10 @@ module RubyModKit
|
|
|
107
114
|
@offset_diff.insert(src_offset, diff)
|
|
108
115
|
end
|
|
109
116
|
|
|
110
|
-
# @rbs src_range: Range[Integer]
|
|
117
|
+
# @rbs src_range: Range[Integer | nil]
|
|
111
118
|
# @rbs return: String
|
|
112
119
|
def [](src_range)
|
|
113
|
-
|
|
114
|
-
@script[dst_range] || raise(RubyModKit::Error, "Invalid range")
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# @rbs offset: Integer
|
|
118
|
-
# @rbs return: String
|
|
119
|
-
def line_by_offset(offset)
|
|
120
|
-
offset = @offset_diff[offset]
|
|
121
|
-
(@script.match(/.*\n?/, offset) && Regexp.last_match(0)) || raise(RubyModKit::Error)
|
|
120
|
+
@source[src_range] || raise(RubyModKit::Error, "Invalid range")
|
|
122
121
|
end
|
|
123
122
|
|
|
124
123
|
# @rbs (Integer) -> String
|
|
@@ -138,53 +137,97 @@ module RubyModKit
|
|
|
138
137
|
# @rbs line_num: Integer
|
|
139
138
|
# @rbs return: String
|
|
140
139
|
def line__overload0(line_num)
|
|
141
|
-
|
|
140
|
+
@lines[line_num] || raise(RubyModKit::Error)
|
|
142
141
|
end
|
|
143
142
|
|
|
144
143
|
# @rbs node: Node::BaseNode
|
|
145
144
|
# @rbs return: String
|
|
146
145
|
def line__overload1(node)
|
|
147
|
-
line(node.
|
|
146
|
+
line(node.location.start_line - 1)
|
|
148
147
|
end
|
|
149
148
|
|
|
150
149
|
# @rbs parse_error: Prism::ParseError
|
|
151
150
|
# @rbs return: String
|
|
152
151
|
def line__overload2(parse_error)
|
|
153
152
|
line(parse_error.location.start_line - 1)
|
|
153
|
+
rescue RubyModKit::Error
|
|
154
|
+
""
|
|
154
155
|
end
|
|
155
156
|
|
|
156
157
|
# @rbs (Integer) -> (Integer | nil)
|
|
158
|
+
# | (Node::BaseNode) -> (Integer | nil)
|
|
159
|
+
# | (Node::BaseNode, Integer) -> (Integer | nil)
|
|
157
160
|
# | (Prism::ParseError) -> (Integer | nil)
|
|
158
|
-
def
|
|
161
|
+
def line_offset(*args)
|
|
159
162
|
case args
|
|
160
163
|
in [Integer]
|
|
161
|
-
|
|
164
|
+
line_offset__overload0(*args)
|
|
165
|
+
in [Node::BaseNode]
|
|
166
|
+
line_offset__overload1(*args)
|
|
167
|
+
in [Node::BaseNode, Integer]
|
|
168
|
+
line_offset__overload2(*args)
|
|
162
169
|
in [Prism::ParseError]
|
|
163
|
-
|
|
170
|
+
line_offset__overload3(*args)
|
|
164
171
|
end
|
|
165
172
|
end
|
|
166
173
|
|
|
167
174
|
# @rbs line_num: Integer
|
|
168
175
|
# @rbs return: Integer | nil
|
|
169
|
-
def
|
|
170
|
-
|
|
176
|
+
def line_offset__overload0(line_num)
|
|
177
|
+
@offsets[line_num]
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# @rbs node: Node::BaseNode
|
|
181
|
+
# @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)
|
|
171
191
|
end
|
|
172
192
|
|
|
173
193
|
# @rbs parse_error: Prism::ParseError
|
|
174
194
|
# @rbs return: Integer | nil
|
|
175
|
-
def
|
|
176
|
-
|
|
195
|
+
def line_offset__overload3(parse_error)
|
|
196
|
+
line_offset(parse_error.location.start_line - 1)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# @rbs (Integer) -> String
|
|
200
|
+
# | (Node::BaseNode) -> String
|
|
201
|
+
def line_indent(*args)
|
|
202
|
+
case args
|
|
203
|
+
in [Integer]
|
|
204
|
+
line_indent__overload0(*args)
|
|
205
|
+
in [Node::BaseNode]
|
|
206
|
+
line_indent__overload1(*args)
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
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)
|
|
177
220
|
end
|
|
178
221
|
|
|
179
222
|
# @rbs return: void
|
|
180
223
|
def perform_corrector
|
|
181
|
-
@corrector_manager.perform(self
|
|
224
|
+
@corrector_manager.perform(self)
|
|
182
225
|
end
|
|
183
226
|
|
|
184
227
|
# @rbs return: void
|
|
185
228
|
def perform_missions
|
|
186
229
|
@missions.delete_if do |mission|
|
|
187
|
-
mission.perform(self
|
|
230
|
+
mission.perform(self) || break
|
|
188
231
|
end
|
|
189
232
|
end
|
|
190
233
|
|
|
@@ -197,9 +240,10 @@ module RubyModKit
|
|
|
197
240
|
class << self
|
|
198
241
|
# @rbs src: String
|
|
199
242
|
# @rbs filename: String | nil
|
|
243
|
+
# @rbs config: Config | nil
|
|
200
244
|
# @rbs return: Generation
|
|
201
|
-
def resolve(src, filename: nil)
|
|
202
|
-
generation = Generation.new(src.dup, filename: filename)
|
|
245
|
+
def resolve(src, filename: nil, config: nil)
|
|
246
|
+
generation = Generation.new(src.dup, filename: filename, config: config)
|
|
203
247
|
generation = generation.succ until generation.completed?
|
|
204
248
|
generation
|
|
205
249
|
end
|
|
@@ -11,11 +11,15 @@ module RubyModKit
|
|
|
11
11
|
# @rbs @offset: nil | Integer
|
|
12
12
|
# @rbs @indent: String
|
|
13
13
|
# @rbs @name: Symbol
|
|
14
|
+
# @rbs @visibility: nil | Symbol
|
|
15
|
+
# @rbs @separator: String
|
|
14
16
|
|
|
15
17
|
attr_reader :type #: nil | String
|
|
16
18
|
attr_reader :attr_kind #: nil | Symbol
|
|
17
19
|
attr_accessor :offset #: nil | Integer
|
|
18
20
|
attr_accessor :indent #: String
|
|
21
|
+
attr_accessor :visibility #: nil | Symbol
|
|
22
|
+
attr_accessor :separator #: String
|
|
19
23
|
|
|
20
24
|
# @rbs name: Symbol
|
|
21
25
|
# @rbs return: void
|
|
@@ -8,11 +8,13 @@ module RubyModKit
|
|
|
8
8
|
class ParameterMemo < OffsetMemo
|
|
9
9
|
# @rbs @type: String
|
|
10
10
|
# @rbs @ivar_parameter: bool
|
|
11
|
-
# @rbs @qualifier: String
|
|
11
|
+
# @rbs @qualifier: String | nil
|
|
12
|
+
# @rbs @name: Symbol
|
|
12
13
|
|
|
13
14
|
attr_reader :type #: String
|
|
14
15
|
attr_accessor :ivar_parameter #: bool
|
|
15
|
-
attr_accessor :qualifier #: String
|
|
16
|
+
attr_accessor :qualifier #: String | nil
|
|
17
|
+
attr_accessor :name #: Symbol
|
|
16
18
|
|
|
17
19
|
UNTYPED = "untyped"
|
|
18
20
|
|
data/lib/ruby_mod_kit/memo.rb
CHANGED
|
@@ -9,11 +9,13 @@ module RubyModKit
|
|
|
9
9
|
# @rbs @methods_memo: Hash[Integer, Memo::MethodMemo]
|
|
10
10
|
# @rbs @parameters_memo: Hash[Integer, Memo::ParameterMemo]
|
|
11
11
|
# @rbs @overloads_memo: Hash[Integer, Memo::OverloadMemo]
|
|
12
|
+
# @rbs @flags: Hash[Symbol, bool]
|
|
12
13
|
|
|
13
14
|
attr_reader :def_parents_memo #: Hash[Integer, Memo::DefParentMemo]
|
|
14
15
|
attr_reader :methods_memo #: Hash[Integer, Memo::MethodMemo]
|
|
15
16
|
attr_reader :parameters_memo #: Hash[Integer, Memo::ParameterMemo]
|
|
16
17
|
attr_reader :overloads_memo #: Hash[Integer, Memo::OverloadMemo]
|
|
18
|
+
attr_accessor :flags #: Hash[Symbol, bool]
|
|
17
19
|
|
|
18
20
|
# @rbs return: void
|
|
19
21
|
def initialize
|
|
@@ -21,6 +23,7 @@ module RubyModKit
|
|
|
21
23
|
@methods_memo = {}
|
|
22
24
|
@parameters_memo = {}
|
|
23
25
|
@overloads_memo = {}
|
|
26
|
+
@flags = Hash.new(false)
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
# @rbs offset_diff: OffsetDiff
|
|
@@ -65,5 +68,11 @@ module RubyModKit
|
|
|
65
68
|
|
|
66
69
|
method_memo(def_node).add_parameter(memo)
|
|
67
70
|
end
|
|
71
|
+
|
|
72
|
+
# @rbs &block: (Memo::ParameterMemo) -> void
|
|
73
|
+
# @rbs return: void
|
|
74
|
+
def each_parameter_memo(&block)
|
|
75
|
+
parameters_memo.each_value(&block)
|
|
76
|
+
end
|
|
68
77
|
end
|
|
69
78
|
end
|
data/lib/ruby_mod_kit/mission.rb
CHANGED
|
@@ -6,16 +6,9 @@ module RubyModKit
|
|
|
6
6
|
# The base class of transpiler mission.
|
|
7
7
|
class Mission
|
|
8
8
|
# @rbs _generation: Generation
|
|
9
|
-
# @rbs _root_node: Node::ProgramNode
|
|
10
|
-
# @rbs _parse_result: Prism::ParseResult
|
|
11
|
-
# @rbs _memo_pad: MemoPad
|
|
12
9
|
# @rbs return: void
|
|
13
|
-
def perform(_generation
|
|
10
|
+
def perform(_generation)
|
|
14
11
|
raise RubyModKit::Error, "Unexpected type #{self.class}"
|
|
15
12
|
end
|
|
16
|
-
|
|
17
|
-
# @rbs offset_diff: OffsetDiff
|
|
18
|
-
# @rbs return: void
|
|
19
|
-
def succ(offset_diff); end
|
|
20
13
|
end
|
|
21
14
|
end
|
|
@@ -11,11 +11,12 @@ module RubyModKit
|
|
|
11
11
|
# @rbs @ancestors: Array[Node::BaseNode]
|
|
12
12
|
# @rbs @prev: Node::BaseNode | nil
|
|
13
13
|
|
|
14
|
-
attr_reader :location #: Prism::Location
|
|
15
14
|
attr_reader :prev #: Node::BaseNode | nil
|
|
16
15
|
|
|
17
|
-
# @rbs return:
|
|
18
|
-
def
|
|
16
|
+
# @rbs return: Prism::Location
|
|
17
|
+
def location
|
|
18
|
+
return @location if defined?(@location)
|
|
19
|
+
|
|
19
20
|
@location = prism_node.location
|
|
20
21
|
end
|
|
21
22
|
|
|
@@ -25,15 +26,22 @@ module RubyModKit
|
|
|
25
26
|
|
|
26
27
|
prev = nil
|
|
27
28
|
@children = prism_node.child_nodes.compact.map do |prism_child_node|
|
|
28
|
-
prev =
|
|
29
|
+
prev = wrap(prism_child_node, prev: prev)
|
|
29
30
|
end
|
|
30
31
|
end
|
|
31
32
|
|
|
33
|
+
# @rbs prism_node: Prism::Node
|
|
34
|
+
# @rbs prev: Node::BaseNode | nil
|
|
35
|
+
# @rbs return: Node::BaseNode
|
|
36
|
+
def wrap(prism_node, prev: nil)
|
|
37
|
+
Node.wrap(prism_node, parent: self, prev: prev)
|
|
38
|
+
end
|
|
39
|
+
|
|
32
40
|
# @rbs return: Array[Node::BaseNode]
|
|
33
41
|
def ancestors
|
|
34
42
|
return @ancestors if @ancestors
|
|
35
43
|
|
|
36
|
-
parent =
|
|
44
|
+
parent = self.parent
|
|
37
45
|
@ancestors = if parent
|
|
38
46
|
[parent] + parent.ancestors
|
|
39
47
|
else
|
|
@@ -41,6 +49,11 @@ module RubyModKit
|
|
|
41
49
|
end
|
|
42
50
|
end
|
|
43
51
|
|
|
52
|
+
# @rbs return: nil | BaseNode
|
|
53
|
+
def parent
|
|
54
|
+
raise(RubyModKit::Error)
|
|
55
|
+
end
|
|
56
|
+
|
|
44
57
|
# @rbs return: Symbol
|
|
45
58
|
def name
|
|
46
59
|
raise(RubyModKit::Error, "Expected ParameterNode but #{self.class}:#{prism_node.inspect}")
|
|
@@ -80,10 +93,14 @@ module RubyModKit
|
|
|
80
93
|
end
|
|
81
94
|
|
|
82
95
|
# @rbs offset: Integer
|
|
96
|
+
# @rbs allowed: Array[Class] | nil
|
|
83
97
|
# @rbs return: Node::DefParentNode | nil
|
|
84
|
-
def def_parent_node_at(offset)
|
|
98
|
+
def def_parent_node_at(offset, allowed: nil)
|
|
85
99
|
node = node_at(offset) || return
|
|
86
|
-
[node, *node.ancestors].each
|
|
100
|
+
[node, *node.ancestors].each do |ancestor_node|
|
|
101
|
+
return ancestor_node if ancestor_node.is_a?(Node::DefParentNode)
|
|
102
|
+
return nil if allowed && !allowed.include?(ancestor_node.class)
|
|
103
|
+
end
|
|
87
104
|
nil
|
|
88
105
|
end
|
|
89
106
|
|
|
@@ -93,16 +110,16 @@ module RubyModKit
|
|
|
93
110
|
self.offset <= offset && offset <= prism_node.location.end_offset
|
|
94
111
|
end
|
|
95
112
|
|
|
96
|
-
# @rbs return: Prism::Node & Prism::_Node
|
|
97
|
-
def prism_node
|
|
98
|
-
raise RubyModKit::Error
|
|
99
|
-
end
|
|
100
|
-
|
|
101
113
|
# @rbs return: Integer
|
|
102
114
|
def offset
|
|
103
115
|
location.start_offset
|
|
104
116
|
end
|
|
105
117
|
|
|
118
|
+
# @rbs return: String
|
|
119
|
+
def slice
|
|
120
|
+
location.slice
|
|
121
|
+
end
|
|
122
|
+
|
|
106
123
|
# @rbs return: String
|
|
107
124
|
def inspect
|
|
108
125
|
str = +"#<#{self.class} "
|
|
@@ -132,6 +149,16 @@ module RubyModKit
|
|
|
132
149
|
str << ">"
|
|
133
150
|
str
|
|
134
151
|
end
|
|
152
|
+
|
|
153
|
+
private
|
|
154
|
+
|
|
155
|
+
# :nocov:
|
|
156
|
+
# This is just for interface definition, must not be called
|
|
157
|
+
# @rbs return: Prism::Node & Prism::_Node
|
|
158
|
+
def prism_node
|
|
159
|
+
raise RubyModKit::Error
|
|
160
|
+
end
|
|
161
|
+
# :nocov:
|
|
135
162
|
end
|
|
136
163
|
end
|
|
137
164
|
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# rbs_inline: enabled
|
|
4
|
+
|
|
5
|
+
module RubyModKit
|
|
6
|
+
module Node
|
|
7
|
+
# Transpiler program node
|
|
8
|
+
class BeginNode < Node::BaseNode
|
|
9
|
+
# @rbs @prism_node: Prism::BeginNode
|
|
10
|
+
# @rbs @parent: Node::BaseNode
|
|
11
|
+
# @rbs @prev: Node::BaseNode | nil
|
|
12
|
+
|
|
13
|
+
private attr_reader :prism_node #: Prism::BeginNode
|
|
14
|
+
attr_reader :parent #: Node::BaseNode
|
|
15
|
+
attr_reader :prev #: Node::BaseNode | nil
|
|
16
|
+
|
|
17
|
+
# @rbs prism_node: Prism::BeginNode
|
|
18
|
+
# @rbs parent: Node::BaseNode
|
|
19
|
+
# @rbs prev: Node::BaseNode | nil
|
|
20
|
+
# @rbs return: void
|
|
21
|
+
def initialize(prism_node, parent:, prev: nil)
|
|
22
|
+
@prism_node = prism_node
|
|
23
|
+
@parent = parent
|
|
24
|
+
@prev = prev
|
|
25
|
+
raise RubyModKit::Error unless prism_node.is_a?(Prism::BeginNode)
|
|
26
|
+
|
|
27
|
+
super()
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -11,7 +11,7 @@ module RubyModKit
|
|
|
11
11
|
# @rbs @parent: Node::BaseNode
|
|
12
12
|
# @rbs @prev: Node::BaseNode | nil
|
|
13
13
|
|
|
14
|
-
attr_reader :prism_node #: Prism::CallNode
|
|
14
|
+
private attr_reader :prism_node #: Prism::CallNode
|
|
15
15
|
attr_reader :name #: Symbol
|
|
16
16
|
attr_reader :parent #: Node::BaseNode
|
|
17
17
|
attr_reader :prev #: Node::BaseNode | nil
|
|
@@ -10,7 +10,7 @@ module RubyModKit
|
|
|
10
10
|
# @rbs @parent: Node::BaseNode
|
|
11
11
|
# @rbs @prev: Node::BaseNode | nil
|
|
12
12
|
|
|
13
|
-
attr_reader :prism_node #: Prism::DefNode
|
|
13
|
+
private attr_reader :prism_node #: Prism::DefNode
|
|
14
14
|
attr_reader :parent #: Node::BaseNode
|
|
15
15
|
attr_reader :prev #: Node::BaseNode | nil
|
|
16
16
|
|
|
@@ -11,7 +11,7 @@ module RubyModKit
|
|
|
11
11
|
# @rbs @parent: Node::BaseNode
|
|
12
12
|
# @rbs @prev: Node::BaseNode | nil
|
|
13
13
|
|
|
14
|
-
attr_reader :prism_node #: Prism::ClassNode | Prism::ModuleNode
|
|
14
|
+
private attr_reader :prism_node #: Prism::ClassNode | Prism::ModuleNode
|
|
15
15
|
attr_reader :parent #: Node::BaseNode
|
|
16
16
|
attr_reader :prev #: Node::BaseNode | nil
|
|
17
17
|
|
|
@@ -28,13 +28,20 @@ module RubyModKit
|
|
|
28
28
|
super()
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
+
# @rbs prism_child_node: Prism::Node
|
|
32
|
+
# @rbs prev: Node::BaseNode | nil
|
|
33
|
+
# @rbs return: Node::BaseNode
|
|
34
|
+
def wrap(prism_child_node, prev: nil)
|
|
35
|
+
child_node = super
|
|
36
|
+
@body_node = child_node if prism_child_node == @prism_node.body && child_node.is_a?(Node::StatementsNode)
|
|
37
|
+
child_node
|
|
38
|
+
end
|
|
39
|
+
|
|
31
40
|
# @rbs return: nil | Node::StatementsNode
|
|
32
41
|
def body_node
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
body_node
|
|
36
|
-
body_node = nil unless body_node.is_a?(Node::StatementsNode)
|
|
37
|
-
@body_node = body_node
|
|
42
|
+
# body_node will be set in #children
|
|
43
|
+
children
|
|
44
|
+
@body_node
|
|
38
45
|
end
|
|
39
46
|
end
|
|
40
47
|
end
|
|
@@ -13,9 +13,9 @@ module RubyModKit
|
|
|
13
13
|
# @rbs!
|
|
14
14
|
# type prism_node = Prism::RequiredParameterNode | Prism::OptionalKeywordParameterNode
|
|
15
15
|
# | Prism::OptionalParameterNode | Prism::RequiredKeywordParameterNode
|
|
16
|
-
# | Prism::RestParameterNode
|
|
16
|
+
# | Prism::RestParameterNode | Prism::BlockParameterNode
|
|
17
17
|
|
|
18
|
-
attr_reader :prism_node #: prism_node
|
|
18
|
+
private attr_reader :prism_node #: prism_node
|
|
19
19
|
attr_reader :parent #: Node::BaseNode
|
|
20
20
|
attr_reader :prev #: Node::BaseNode | nil
|
|
21
21
|
|
|
@@ -30,7 +30,7 @@ module RubyModKit
|
|
|
30
30
|
case prism_node
|
|
31
31
|
when Prism::RequiredParameterNode, Prism::OptionalKeywordParameterNode,
|
|
32
32
|
Prism::OptionalParameterNode, Prism::RequiredKeywordParameterNode,
|
|
33
|
-
Prism::RestParameterNode
|
|
33
|
+
Prism::RestParameterNode, Prism::BlockParameterNode
|
|
34
34
|
super()
|
|
35
35
|
else
|
|
36
36
|
raise RubyModKit::Error, "unexpected prism node #{prism_node.class}"
|
|
@@ -8,7 +8,7 @@ module RubyModKit
|
|
|
8
8
|
class ProgramNode < Node::BaseNode
|
|
9
9
|
# @rbs @prism_node: Prism::ProgramNode
|
|
10
10
|
|
|
11
|
-
attr_reader :prism_node #: Prism::ProgramNode
|
|
11
|
+
private attr_reader :prism_node #: Prism::ProgramNode
|
|
12
12
|
|
|
13
13
|
# @rbs prism_node: Prism::ProgramNode
|
|
14
14
|
# @rbs return: void
|
|
@@ -18,6 +18,11 @@ module RubyModKit
|
|
|
18
18
|
|
|
19
19
|
super()
|
|
20
20
|
end
|
|
21
|
+
|
|
22
|
+
# @rbs return: nil
|
|
23
|
+
def parent
|
|
24
|
+
nil
|
|
25
|
+
end
|
|
21
26
|
end
|
|
22
27
|
end
|
|
23
28
|
end
|
|
@@ -10,7 +10,7 @@ module RubyModKit
|
|
|
10
10
|
# @rbs @parent: Node::BaseNode
|
|
11
11
|
# @rbs @prev: Node::BaseNode | nil
|
|
12
12
|
|
|
13
|
-
attr_reader :prism_node #: Prism::StatementsNode
|
|
13
|
+
private attr_reader :prism_node #: Prism::StatementsNode
|
|
14
14
|
attr_reader :parent #: Node::BaseNode
|
|
15
15
|
attr_reader :prev #: Node::BaseNode | nil
|
|
16
16
|
|
|
@@ -9,8 +9,9 @@ module RubyModKit
|
|
|
9
9
|
# @rbs @prism_node: Prism::SymbolNode
|
|
10
10
|
# @rbs @parent: Node::BaseNode
|
|
11
11
|
# @rbs @prev: Node::BaseNode | nil
|
|
12
|
+
# @rbs @value: nil | Symbol
|
|
12
13
|
|
|
13
|
-
attr_reader :prism_node #: Prism::SymbolNode
|
|
14
|
+
private attr_reader :prism_node #: Prism::SymbolNode
|
|
14
15
|
attr_reader :parent #: Node::BaseNode
|
|
15
16
|
attr_reader :prev #: Node::BaseNode | nil
|
|
16
17
|
|
|
@@ -10,7 +10,7 @@ module RubyModKit
|
|
|
10
10
|
# @rbs @parent: Node::BaseNode
|
|
11
11
|
# @rbs @prev: Node::BaseNode | nil
|
|
12
12
|
|
|
13
|
-
attr_reader :prism_node #: Prism::Node
|
|
13
|
+
private attr_reader :prism_node #: Prism::Node
|
|
14
14
|
attr_reader :parent #: Node::BaseNode
|
|
15
15
|
attr_reader :prev #: Node::BaseNode | nil
|
|
16
16
|
|
|
@@ -20,6 +20,8 @@ module RubyModKit
|
|
|
20
20
|
# @rbs return: Node::BaseNode
|
|
21
21
|
def wrap(prism_node, parent:, prev: nil)
|
|
22
22
|
case prism_node
|
|
23
|
+
when Prism::BeginNode
|
|
24
|
+
Node::BeginNode.new(prism_node, parent: parent, prev: prev)
|
|
23
25
|
when Prism::CallNode
|
|
24
26
|
Node::CallNode.new(prism_node, parent: parent, prev: prev)
|
|
25
27
|
when Prism::DefNode
|
|
@@ -28,7 +30,7 @@ module RubyModKit
|
|
|
28
30
|
Node::DefParentNode.new(prism_node, parent: parent, prev: prev)
|
|
29
31
|
when Prism::RequiredParameterNode, Prism::OptionalKeywordParameterNode,
|
|
30
32
|
Prism::OptionalParameterNode, Prism::RequiredKeywordParameterNode,
|
|
31
|
-
Prism::RestParameterNode
|
|
33
|
+
Prism::RestParameterNode, Prism::BlockParameterNode
|
|
32
34
|
Node::ParameterNode.new(prism_node, parent: parent, prev: prev)
|
|
33
35
|
when Prism::StatementsNode
|
|
34
36
|
Node::StatementsNode.new(prism_node, parent: parent, prev: prev)
|
data/lib/ruby_mod_kit/node.rb
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# rbs_inline: enabled
|
|
4
|
-
|
|
5
3
|
module RubyModKit
|
|
6
4
|
# The namespace of transpile node.
|
|
7
5
|
module Node
|
|
@@ -9,6 +7,7 @@ module RubyModKit
|
|
|
9
7
|
end
|
|
10
8
|
|
|
11
9
|
require_relative "node/base_node"
|
|
10
|
+
require_relative "node/begin_node"
|
|
12
11
|
require_relative "node/symbol_node"
|
|
13
12
|
require_relative "node/def_parent_node"
|
|
14
13
|
require_relative "node/call_node"
|
data/lib/ruby_mod_kit/version.rb
CHANGED