ruby_mod_kit 0.0.2 → 0.0.4
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/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 -0
- data/lib/ruby_mod_kit/core_ext/load.rb +12 -4
- data/lib/ruby_mod_kit/core_ext.rb +2 -2
- data/lib/ruby_mod_kit/corrector.rb +20 -0
- data/lib/ruby_mod_kit/corrector_manager.rb +64 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb +40 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb +42 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter.rb +27 -0
- data/lib/ruby_mod_kit/feature/overload/overload_mission.rb +77 -0
- data/lib/ruby_mod_kit/feature/overload.rb +19 -0
- data/lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb +52 -0
- data/lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb +84 -0
- 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 +46 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rb +29 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rb +41 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rb +36 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rb +30 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline.rb +32 -0
- data/lib/ruby_mod_kit/feature/type/return_value_colon_corrector.rb +43 -0
- data/lib/ruby_mod_kit/feature/type/type_attr_mission.rb +69 -0
- data/lib/ruby_mod_kit/feature/type.rb +31 -0
- data/lib/ruby_mod_kit/feature.rb +18 -0
- data/lib/ruby_mod_kit/generation.rb +76 -29
- data/lib/ruby_mod_kit/memo/def_parent_memo.rb +36 -0
- data/lib/ruby_mod_kit/memo/{ivar.rb → ivar_memo.rb} +19 -3
- data/lib/ruby_mod_kit/memo/{method.rb → method_memo.rb} +7 -7
- data/lib/ruby_mod_kit/memo/offset_memo.rb +1 -1
- data/lib/ruby_mod_kit/memo/overload_memo.rb +47 -0
- data/lib/ruby_mod_kit/memo/{parameter.rb → parameter_memo.rb} +3 -3
- data/lib/ruby_mod_kit/memo.rb +7 -66
- data/lib/ruby_mod_kit/memo_pad.rb +72 -0
- data/lib/ruby_mod_kit/mission.rb +3 -25
- data/lib/ruby_mod_kit/node/base_node.rb +155 -0
- data/lib/ruby_mod_kit/node/call_node.rb +11 -7
- data/lib/ruby_mod_kit/node/def_node.rb +11 -7
- data/lib/ruby_mod_kit/node/def_parent_node.rb +25 -14
- data/lib/ruby_mod_kit/node/parameter_node.rb +13 -9
- data/lib/ruby_mod_kit/node/program_node.rb +8 -3
- data/lib/ruby_mod_kit/node/statements_node.rb +11 -7
- data/lib/ruby_mod_kit/node/symbol_node.rb +12 -7
- data/lib/ruby_mod_kit/node/untyped_node.rb +11 -7
- data/lib/ruby_mod_kit/node/wrap.rb +43 -0
- data/lib/ruby_mod_kit/node.rb +4 -150
- data/lib/ruby_mod_kit/version.rb +1 -1
- data/lib/ruby_mod_kit.rb +27 -8
- 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 +3 -0
- data/sig/generated/ruby_mod_kit/core_ext/load.rbs +7 -4
- data/sig/generated/ruby_mod_kit/corrector.rbs +14 -0
- data/sig/generated/ruby_mod_kit/corrector_manager.rbs +22 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rbs +18 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rbs +14 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter.rbs +14 -0
- data/sig/generated/ruby_mod_kit/feature/overload/overload_mission.rbs +21 -0
- data/sig/generated/ruby_mod_kit/feature/overload.rbs +11 -0
- data/sig/generated/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rbs +24 -0
- data/sig/generated/ruby_mod_kit/feature/type/parameter_arrow_corrector.rbs +33 -0
- 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 +16 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rbs +16 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rbs +16 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rbs +16 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rbs +16 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline.rbs +13 -0
- data/sig/generated/ruby_mod_kit/feature/type/return_value_colon_corrector.rbs +18 -0
- data/sig/generated/ruby_mod_kit/feature/type/type_attr_mission.rbs +19 -0
- data/sig/generated/ruby_mod_kit/feature/type.rbs +14 -0
- data/sig/generated/ruby_mod_kit/feature.rbs +12 -0
- data/sig/generated/ruby_mod_kit/generation.rbs +44 -13
- data/sig/generated/ruby_mod_kit/memo/def_parent_memo.rbs +24 -0
- data/sig/generated/ruby_mod_kit/memo/{ivar.rbs → ivar_memo.rbs} +19 -3
- data/sig/generated/ruby_mod_kit/memo/{method.rbs → method_memo.rbs} +8 -8
- data/sig/generated/ruby_mod_kit/memo/offset_memo.rbs +1 -1
- data/sig/generated/ruby_mod_kit/memo/overload_memo.rbs +34 -0
- data/sig/generated/ruby_mod_kit/memo/{parameter.rbs → parameter_memo.rbs} +3 -3
- data/sig/generated/ruby_mod_kit/memo_pad.rbs +50 -0
- data/sig/generated/ruby_mod_kit/mission.rbs +2 -13
- data/sig/generated/ruby_mod_kit/node/base_node.rbs +75 -0
- data/sig/generated/ruby_mod_kit/node/call_node.rbs +11 -6
- data/sig/generated/ruby_mod_kit/node/def_node.rbs +11 -6
- data/sig/generated/ruby_mod_kit/node/def_parent_node.rbs +17 -10
- data/sig/generated/ruby_mod_kit/node/parameter_node.rbs +13 -8
- data/sig/generated/ruby_mod_kit/node/program_node.rbs +5 -2
- data/sig/generated/ruby_mod_kit/node/statements_node.rbs +11 -6
- data/sig/generated/ruby_mod_kit/node/symbol_node.rbs +13 -6
- data/sig/generated/ruby_mod_kit/node/untyped_node.rbs +11 -6
- data/sig/generated/ruby_mod_kit/node/wrap.rbs +12 -0
- data/sig/generated/ruby_mod_kit.rbs +10 -3
- data/sig/yaml.rbs +3 -0
- metadata +63 -30
- data/lib/ruby_mod_kit/memo/def_parent.rb +0 -27
- data/lib/ruby_mod_kit/mission/fix_parse_error.rb +0 -216
- data/lib/ruby_mod_kit/mission/ivar_arg.rb +0 -42
- data/lib/ruby_mod_kit/mission/overload.rb +0 -73
- data/lib/ruby_mod_kit/mission/type_attr.rb +0 -75
- data/lib/ruby_mod_kit/mission/type_parameter.rb +0 -39
- data/lib/ruby_mod_kit/mission/type_return.rb +0 -33
- data/lib/ruby_mod_kit/transpiler.rb +0 -20
- data/sig/generated/examples/user.rbs +0 -60
- data/sig/generated/ruby_mod_kit/memo/def_parent.rbs +0 -20
- data/sig/generated/ruby_mod_kit/memo/located.rbs +0 -14
- data/sig/generated/ruby_mod_kit/memo/parameter_type.rbs +0 -14
- data/sig/generated/ruby_mod_kit/memo.rbs +0 -41
- data/sig/generated/ruby_mod_kit/mission/fix_parse_error.rbs +0 -73
- data/sig/generated/ruby_mod_kit/mission/ivar_arg.rbs +0 -19
- data/sig/generated/ruby_mod_kit/mission/overload.rbs +0 -20
- data/sig/generated/ruby_mod_kit/mission/type_attr.rbs +0 -18
- data/sig/generated/ruby_mod_kit/mission/type_parameter.rbs +0 -18
- data/sig/generated/ruby_mod_kit/mission/type_return.rbs +0 -18
- data/sig/generated/ruby_mod_kit/node.rbs +0 -63
- data/sig/generated/ruby_mod_kit/transpiler.rbs +0 -11
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
# rbs_inline: enabled
|
|
4
4
|
|
|
5
5
|
module RubyModKit
|
|
6
|
-
|
|
6
|
+
module Memo
|
|
7
7
|
# The memo for parameter type
|
|
8
|
-
class
|
|
8
|
+
class MethodMemo < OffsetMemo
|
|
9
9
|
# @rbs @name: Symbol
|
|
10
|
-
# @rbs @parameters: Set[Memo::
|
|
10
|
+
# @rbs @parameters: Set[Memo::ParameterMemo]
|
|
11
11
|
# @rbs @type: String
|
|
12
12
|
|
|
13
13
|
attr_reader :name #: Symbol
|
|
14
|
-
attr_reader :parameters #: Set[Memo::
|
|
14
|
+
attr_reader :parameters #: Set[Memo::ParameterMemo]
|
|
15
15
|
attr_reader :type #: String
|
|
16
16
|
|
|
17
17
|
UNTYPED = "untyped"
|
|
@@ -27,8 +27,8 @@ module RubyModKit
|
|
|
27
27
|
super(node.offset)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
# @rbs parameter_memo: Memo::
|
|
31
|
-
# @rbs return: Memo::
|
|
30
|
+
# @rbs parameter_memo: Memo::ParameterMemo
|
|
31
|
+
# @rbs return: Memo::ParameterMemo
|
|
32
32
|
def add_parameter(parameter_memo)
|
|
33
33
|
@parameters << parameter_memo
|
|
34
34
|
parameter_memo
|
|
@@ -42,7 +42,7 @@ module RubyModKit
|
|
|
42
42
|
# @rbs type: String
|
|
43
43
|
# @rbs return: void
|
|
44
44
|
def type=(type)
|
|
45
|
-
@type =
|
|
45
|
+
@type = RubyModKit.unify_type(type)
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# rbs_inline: enabled
|
|
4
|
+
|
|
5
|
+
module RubyModKit
|
|
6
|
+
module Memo
|
|
7
|
+
# The memo for parameter type
|
|
8
|
+
class OverloadMemo < OffsetMemo
|
|
9
|
+
# @rbs @name: Symbol
|
|
10
|
+
# @rbs @overload_types: [[Array[String], String]]
|
|
11
|
+
# @rbs @offset_corrected: bool
|
|
12
|
+
# @rbs @offset: Integer
|
|
13
|
+
|
|
14
|
+
attr_reader :name #: Symbol
|
|
15
|
+
attr_reader :overload_types #: [[Array[String], String]]
|
|
16
|
+
|
|
17
|
+
# @rbs offset: Integer
|
|
18
|
+
# @rbs name: Symbol
|
|
19
|
+
# @rbs return: void
|
|
20
|
+
def initialize(offset, name)
|
|
21
|
+
@name = name
|
|
22
|
+
@overload_types = []
|
|
23
|
+
@offset_corrected = false
|
|
24
|
+
super(offset)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @rbs root_node: Node::ProgramNode
|
|
28
|
+
# @rbs return: Integer
|
|
29
|
+
def correct_offset(root_node)
|
|
30
|
+
return @offset if @offset_corrected
|
|
31
|
+
|
|
32
|
+
node = root_node.def_node_at(@offset)&.prev
|
|
33
|
+
raise RubyModKit::Error unless node.is_a?(Node::DefNode)
|
|
34
|
+
|
|
35
|
+
@offset_corrected = true
|
|
36
|
+
@offset = node.offset
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @rbs parameter_types: Array[String]
|
|
40
|
+
# @rbs return_value_type: String
|
|
41
|
+
# @rbs return: void
|
|
42
|
+
def add_overload_type(parameter_types, return_value_type)
|
|
43
|
+
@overload_types << [parameter_types, return_value_type]
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
# rbs_inline: enabled
|
|
4
4
|
|
|
5
5
|
module RubyModKit
|
|
6
|
-
|
|
6
|
+
module Memo
|
|
7
7
|
# The memo for parameter type
|
|
8
|
-
class
|
|
8
|
+
class ParameterMemo < OffsetMemo
|
|
9
9
|
# @rbs @type: String
|
|
10
10
|
# @rbs @ivar_parameter: bool
|
|
11
11
|
# @rbs @qualifier: String
|
|
@@ -32,7 +32,7 @@ module RubyModKit
|
|
|
32
32
|
# @rbs type: String
|
|
33
33
|
# @rbs return: void
|
|
34
34
|
def type=(type)
|
|
35
|
-
@type =
|
|
35
|
+
@type = RubyModKit.unify_type(type)
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
end
|
data/lib/ruby_mod_kit/memo.rb
CHANGED
|
@@ -1,73 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# rbs_inline: enabled
|
|
4
|
-
|
|
5
3
|
module RubyModKit
|
|
6
|
-
# The
|
|
7
|
-
|
|
8
|
-
# @rbs @def_parents_memo: Hash[Integer, Memo::DefParent]
|
|
9
|
-
# @rbs @methods_memo: Hash[Integer, Memo::Method]
|
|
10
|
-
# @rbs @parameters_memo: Hash[Integer, Memo::Parameter]
|
|
11
|
-
|
|
12
|
-
attr_reader :def_parents_memo #: Hash[Integer, Memo::DefParent]
|
|
13
|
-
attr_reader :methods_memo #: Hash[Integer, Memo::Method]
|
|
14
|
-
attr_reader :parameters_memo #: Hash[Integer, Memo::Parameter]
|
|
15
|
-
|
|
16
|
-
# @rbs return: void
|
|
17
|
-
def initialize
|
|
18
|
-
@def_parents_memo = {}
|
|
19
|
-
@methods_memo = {}
|
|
20
|
-
@parameters_memo = {}
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @rbs offset_diff: OffsetDiff
|
|
24
|
-
# @rbs return: void
|
|
25
|
-
def succ(offset_diff)
|
|
26
|
-
[@methods_memo, @parameters_memo, @def_parents_memo].each do |offset_node_memo|
|
|
27
|
-
new_offset_node_memo = {}
|
|
28
|
-
offset_node_memo.each_value do |node_memo|
|
|
29
|
-
node_memo.succ(offset_diff)
|
|
30
|
-
new_offset_node_memo[node_memo.offset] = node_memo
|
|
31
|
-
end
|
|
32
|
-
offset_node_memo.replace(new_offset_node_memo)
|
|
33
|
-
end
|
|
34
|
-
self
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# @rbs def_parent_node: Node::DefParentNode
|
|
38
|
-
# @rbs return: Memo::DefParent
|
|
39
|
-
def def_parent_memo(def_parent_node)
|
|
40
|
-
@def_parents_memo[def_parent_node.offset] ||= Memo::DefParent.new(def_parent_node)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# @rbs def_node: Node::DefNode
|
|
44
|
-
# @rbs return: Memo::Method
|
|
45
|
-
def method_memo(def_node)
|
|
46
|
-
@methods_memo[def_node.offset] ||= Memo::Method.new(def_node)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# @rbs node: Node
|
|
50
|
-
# @rbs return: Memo::Parameter
|
|
51
|
-
def parameter_memo(node)
|
|
52
|
-
memo = @parameters_memo[node.offset] ||= Memo::Parameter.new(node.offset)
|
|
53
|
-
def_node = node.def_node_at(node.offset)
|
|
54
|
-
raise RubyModKit::Error unless def_node.is_a?(Node::DefNode)
|
|
55
|
-
|
|
56
|
-
method_memo(def_node).add_parameter(memo)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
class << self
|
|
60
|
-
# @rbs type: String
|
|
61
|
-
# @rbs return: String
|
|
62
|
-
def unify_type(type)
|
|
63
|
-
type[/\A\(([^()]*)\)\z/, 1] || type
|
|
64
|
-
end
|
|
65
|
-
end
|
|
4
|
+
# The namespace of transpiler memo.
|
|
5
|
+
module Memo
|
|
66
6
|
end
|
|
67
7
|
end
|
|
68
8
|
|
|
69
9
|
require_relative "memo/offset_memo"
|
|
70
|
-
require_relative "memo/
|
|
71
|
-
require_relative "memo/
|
|
72
|
-
require_relative "memo/
|
|
73
|
-
require_relative "memo/
|
|
10
|
+
require_relative "memo/def_parent_memo"
|
|
11
|
+
require_relative "memo/ivar_memo"
|
|
12
|
+
require_relative "memo/method_memo"
|
|
13
|
+
require_relative "memo/overload_memo"
|
|
14
|
+
require_relative "memo/parameter_memo"
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# rbs_inline: enabled
|
|
4
|
+
|
|
5
|
+
module RubyModKit
|
|
6
|
+
# The class for bundling memos.
|
|
7
|
+
class MemoPad
|
|
8
|
+
# @rbs @def_parents_memo: Hash[Integer, Memo::DefParentMemo]
|
|
9
|
+
# @rbs @methods_memo: Hash[Integer, Memo::MethodMemo]
|
|
10
|
+
# @rbs @parameters_memo: Hash[Integer, Memo::ParameterMemo]
|
|
11
|
+
# @rbs @overloads_memo: Hash[Integer, Memo::OverloadMemo]
|
|
12
|
+
# @rbs @flags: Hash[Symbol, bool]
|
|
13
|
+
|
|
14
|
+
attr_reader :def_parents_memo #: Hash[Integer, Memo::DefParentMemo]
|
|
15
|
+
attr_reader :methods_memo #: Hash[Integer, Memo::MethodMemo]
|
|
16
|
+
attr_reader :parameters_memo #: Hash[Integer, Memo::ParameterMemo]
|
|
17
|
+
attr_reader :overloads_memo #: Hash[Integer, Memo::OverloadMemo]
|
|
18
|
+
attr_accessor :flags #: Hash[Symbol, bool]
|
|
19
|
+
|
|
20
|
+
# @rbs return: void
|
|
21
|
+
def initialize
|
|
22
|
+
@def_parents_memo = {}
|
|
23
|
+
@methods_memo = {}
|
|
24
|
+
@parameters_memo = {}
|
|
25
|
+
@overloads_memo = {}
|
|
26
|
+
@flags = Hash.new(false)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @rbs offset_diff: OffsetDiff
|
|
30
|
+
# @rbs return: void
|
|
31
|
+
def succ(offset_diff)
|
|
32
|
+
[@methods_memo, @parameters_memo, @def_parents_memo, @overloads_memo].each do |offset_node_memo|
|
|
33
|
+
new_offset_node_memo = {}
|
|
34
|
+
offset_node_memo.each_value do |node_memo|
|
|
35
|
+
node_memo.succ(offset_diff)
|
|
36
|
+
new_offset_node_memo[node_memo.offset] = node_memo
|
|
37
|
+
end
|
|
38
|
+
offset_node_memo.replace(new_offset_node_memo)
|
|
39
|
+
end
|
|
40
|
+
self
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# @rbs def_parent_node: Node::DefParentNode
|
|
44
|
+
# @rbs return: Memo::DefParentMemo
|
|
45
|
+
def def_parent_memo(def_parent_node)
|
|
46
|
+
@def_parents_memo[def_parent_node.offset] ||= Memo::DefParentMemo.new(def_parent_node)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# @rbs def_node: Node::DefNode
|
|
50
|
+
# @rbs return: Memo::MethodMemo
|
|
51
|
+
def method_memo(def_node)
|
|
52
|
+
@methods_memo[def_node.offset] ||= Memo::MethodMemo.new(def_node)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @rbs offset: Integer
|
|
56
|
+
# @rbs name: Symbol
|
|
57
|
+
# @rbs return: Memo::OverloadMemo
|
|
58
|
+
def overload_memo(offset, name)
|
|
59
|
+
@overloads_memo[offset] ||= Memo::OverloadMemo.new(offset, name)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# @rbs node: Node::BaseNode
|
|
63
|
+
# @rbs return: Memo::ParameterMemo
|
|
64
|
+
def parameter_memo(node)
|
|
65
|
+
memo = @parameters_memo[node.offset] ||= Memo::ParameterMemo.new(node.offset)
|
|
66
|
+
def_node = node.def_node_at(node.offset)
|
|
67
|
+
raise RubyModKit::Error unless def_node.is_a?(Node::DefNode)
|
|
68
|
+
|
|
69
|
+
method_memo(def_node).add_parameter(memo)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
data/lib/ruby_mod_kit/mission.rb
CHANGED
|
@@ -3,38 +3,16 @@
|
|
|
3
3
|
# rbs_inline: enabled
|
|
4
4
|
|
|
5
5
|
module RubyModKit
|
|
6
|
-
# The class of transpiler mission.
|
|
6
|
+
# The base class of transpiler mission.
|
|
7
7
|
class Mission
|
|
8
|
-
# @rbs @offset: Integer
|
|
9
|
-
|
|
10
|
-
attr_accessor :offset #: Integer
|
|
11
|
-
|
|
12
|
-
# @rbs offset: Integer
|
|
13
|
-
# @rbs return: void
|
|
14
|
-
def initialize(offset)
|
|
15
|
-
@offset = offset
|
|
16
|
-
end
|
|
17
|
-
|
|
18
8
|
# @rbs _generation: Generation
|
|
19
|
-
# @rbs _root_node: Node
|
|
20
|
-
# @rbs _parse_result: Prism::ParseResult
|
|
21
|
-
# @rbs _memo: Memo
|
|
22
9
|
# @rbs return: void
|
|
23
|
-
def perform(_generation
|
|
10
|
+
def perform(_generation)
|
|
24
11
|
raise RubyModKit::Error, "Unexpected type #{self.class}"
|
|
25
12
|
end
|
|
26
13
|
|
|
27
14
|
# @rbs offset_diff: OffsetDiff
|
|
28
15
|
# @rbs return: void
|
|
29
|
-
def succ(offset_diff)
|
|
30
|
-
@offset = offset_diff[@offset]
|
|
31
|
-
end
|
|
16
|
+
def succ(offset_diff); end
|
|
32
17
|
end
|
|
33
18
|
end
|
|
34
|
-
|
|
35
|
-
require_relative "mission/ivar_arg"
|
|
36
|
-
require_relative "mission/type_attr"
|
|
37
|
-
require_relative "mission/type_parameter"
|
|
38
|
-
require_relative "mission/type_return"
|
|
39
|
-
require_relative "mission/fix_parse_error"
|
|
40
|
-
require_relative "mission/overload"
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# rbs_inline: enabled
|
|
4
|
+
|
|
5
|
+
module RubyModKit
|
|
6
|
+
module Node
|
|
7
|
+
# The class of transpile node.
|
|
8
|
+
class BaseNode
|
|
9
|
+
# @rbs @location: Prism::Location
|
|
10
|
+
# @rbs @children: Array[Node::BaseNode]
|
|
11
|
+
# @rbs @ancestors: Array[Node::BaseNode]
|
|
12
|
+
# @rbs @prev: Node::BaseNode | nil
|
|
13
|
+
|
|
14
|
+
attr_reader :prev #: Node::BaseNode | nil
|
|
15
|
+
|
|
16
|
+
# @rbs return: Prism::Location
|
|
17
|
+
def location
|
|
18
|
+
return @location if defined?(@location)
|
|
19
|
+
|
|
20
|
+
@location = prism_node.location
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @rbs return: Array[Node::BaseNode]
|
|
24
|
+
def children
|
|
25
|
+
return @children if @children
|
|
26
|
+
|
|
27
|
+
prev = nil
|
|
28
|
+
@children = prism_node.child_nodes.compact.map do |prism_child_node|
|
|
29
|
+
prev = wrap(prism_child_node, prev: prev)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
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
|
+
|
|
40
|
+
# @rbs return: Array[Node::BaseNode]
|
|
41
|
+
def ancestors
|
|
42
|
+
return @ancestors if @ancestors
|
|
43
|
+
|
|
44
|
+
parent = self.parent
|
|
45
|
+
@ancestors = if parent
|
|
46
|
+
[parent] + parent.ancestors
|
|
47
|
+
else
|
|
48
|
+
[]
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# @rbs return: nil | BaseNode
|
|
53
|
+
def parent
|
|
54
|
+
raise(RubyModKit::Error)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# @rbs return: Symbol
|
|
58
|
+
def name
|
|
59
|
+
raise(RubyModKit::Error, "Expected ParameterNode but #{self.class}:#{prism_node.inspect}")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# @rbs offset: Integer
|
|
63
|
+
# @rbs return: Node::BaseNode | nil
|
|
64
|
+
def node_at(offset)
|
|
65
|
+
return nil unless include?(offset)
|
|
66
|
+
|
|
67
|
+
child = children.find { _1.include?(offset) }
|
|
68
|
+
child&.node_at(offset) || self
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# @rbs offset: Integer
|
|
72
|
+
# @rbs return: Node::StatementsNode | nil
|
|
73
|
+
def statements_node_at(offset)
|
|
74
|
+
node = node_at(offset) || return
|
|
75
|
+
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::StatementsNode) }
|
|
76
|
+
nil
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# @rbs offset: Integer
|
|
80
|
+
# @rbs return: Node::DefNode | nil
|
|
81
|
+
def def_node_at(offset)
|
|
82
|
+
node = node_at(offset) || return
|
|
83
|
+
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::DefNode) }
|
|
84
|
+
nil
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# @rbs offset: Integer
|
|
88
|
+
# @rbs return: Node::ParameterNode | nil
|
|
89
|
+
def parameter_node_at(offset)
|
|
90
|
+
node = node_at(offset) || return
|
|
91
|
+
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::ParameterNode) }
|
|
92
|
+
nil
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# @rbs offset: Integer
|
|
96
|
+
# @rbs return: Node::DefParentNode | nil
|
|
97
|
+
def def_parent_node_at(offset)
|
|
98
|
+
node = node_at(offset) || return
|
|
99
|
+
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::DefParentNode) }
|
|
100
|
+
nil
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# @rbs offset: Integer
|
|
104
|
+
# @rbs return: bool
|
|
105
|
+
def include?(offset)
|
|
106
|
+
self.offset <= offset && offset <= prism_node.location.end_offset
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# @rbs return: Integer
|
|
110
|
+
def offset
|
|
111
|
+
location.start_offset
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# @rbs return: String
|
|
115
|
+
def inspect
|
|
116
|
+
str = +"#<#{self.class} "
|
|
117
|
+
first = true
|
|
118
|
+
instance_variables.each do |ivar_name|
|
|
119
|
+
case ivar_name
|
|
120
|
+
when :@children, :@ancestors, :@parent
|
|
121
|
+
next
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
if first
|
|
125
|
+
first = false
|
|
126
|
+
else
|
|
127
|
+
str << ", "
|
|
128
|
+
end
|
|
129
|
+
str << "#{ivar_name}="
|
|
130
|
+
value = instance_variable_get(ivar_name)
|
|
131
|
+
str << (
|
|
132
|
+
case value
|
|
133
|
+
when Prism::Node
|
|
134
|
+
"#<#{value.class} location=#{value.location.inspect}>"
|
|
135
|
+
else
|
|
136
|
+
value.inspect
|
|
137
|
+
end
|
|
138
|
+
)
|
|
139
|
+
end
|
|
140
|
+
str << ">"
|
|
141
|
+
str
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
private
|
|
145
|
+
|
|
146
|
+
# :nocov:
|
|
147
|
+
# This is just for interface definition, must not be called
|
|
148
|
+
# @rbs return: Prism::Node & Prism::_Node
|
|
149
|
+
def prism_node
|
|
150
|
+
raise RubyModKit::Error
|
|
151
|
+
end
|
|
152
|
+
# :nocov:
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
@@ -3,23 +3,27 @@
|
|
|
3
3
|
# rbs_inline: enabled
|
|
4
4
|
|
|
5
5
|
module RubyModKit
|
|
6
|
-
|
|
6
|
+
module Node
|
|
7
7
|
# Transpiler method call node
|
|
8
|
-
class CallNode < Node
|
|
8
|
+
class CallNode < Node::BaseNode
|
|
9
9
|
# @rbs @prism_node: Prism::CallNode
|
|
10
10
|
# @rbs @name: Symbol
|
|
11
|
-
# @rbs @parent: Node
|
|
11
|
+
# @rbs @parent: Node::BaseNode
|
|
12
|
+
# @rbs @prev: Node::BaseNode | nil
|
|
12
13
|
|
|
13
|
-
attr_reader :prism_node #: Prism::CallNode
|
|
14
|
+
private attr_reader :prism_node #: Prism::CallNode
|
|
14
15
|
attr_reader :name #: Symbol
|
|
15
|
-
attr_reader :parent #: Node
|
|
16
|
+
attr_reader :parent #: Node::BaseNode
|
|
17
|
+
attr_reader :prev #: Node::BaseNode | nil
|
|
16
18
|
|
|
17
19
|
# @rbs prism_node: Prism::CallNode
|
|
18
|
-
# @rbs parent: Node
|
|
20
|
+
# @rbs parent: Node::BaseNode
|
|
21
|
+
# @rbs prev: Node::BaseNode | nil
|
|
19
22
|
# @rbs return: void
|
|
20
|
-
def initialize(prism_node, parent:)
|
|
23
|
+
def initialize(prism_node, parent:, prev: nil)
|
|
21
24
|
@prism_node = prism_node
|
|
22
25
|
@parent = parent
|
|
26
|
+
@prev = prev
|
|
23
27
|
raise RubyModKit::Error unless prism_node.is_a?(Prism::CallNode)
|
|
24
28
|
|
|
25
29
|
@name = prism_node.name.to_sym
|
|
@@ -3,21 +3,25 @@
|
|
|
3
3
|
# rbs_inline: enabled
|
|
4
4
|
|
|
5
5
|
module RubyModKit
|
|
6
|
-
|
|
6
|
+
module Node
|
|
7
7
|
# Transpiler program node
|
|
8
|
-
class DefNode < Node
|
|
8
|
+
class DefNode < Node::BaseNode
|
|
9
9
|
# @rbs @prism_node: Prism::DefNode
|
|
10
|
-
# @rbs @parent: Node
|
|
10
|
+
# @rbs @parent: Node::BaseNode
|
|
11
|
+
# @rbs @prev: Node::BaseNode | nil
|
|
11
12
|
|
|
12
|
-
attr_reader :prism_node #: Prism::DefNode
|
|
13
|
-
attr_reader :parent #: Node
|
|
13
|
+
private attr_reader :prism_node #: Prism::DefNode
|
|
14
|
+
attr_reader :parent #: Node::BaseNode
|
|
15
|
+
attr_reader :prev #: Node::BaseNode | nil
|
|
14
16
|
|
|
15
17
|
# @rbs prism_node: Prism::DefNode
|
|
16
|
-
# @rbs parent: Node
|
|
18
|
+
# @rbs parent: Node::BaseNode
|
|
19
|
+
# @rbs prev: Node::BaseNode | nil
|
|
17
20
|
# @rbs return: void
|
|
18
|
-
def initialize(prism_node, parent:)
|
|
21
|
+
def initialize(prism_node, parent:, prev: nil)
|
|
19
22
|
@prism_node = prism_node
|
|
20
23
|
@parent = parent
|
|
24
|
+
@prev = prev
|
|
21
25
|
raise RubyModKit::Error unless prism_node.is_a?(Prism::DefNode)
|
|
22
26
|
|
|
23
27
|
super()
|
|
@@ -3,34 +3,45 @@
|
|
|
3
3
|
# rbs_inline: enabled
|
|
4
4
|
|
|
5
5
|
module RubyModKit
|
|
6
|
-
|
|
6
|
+
module Node
|
|
7
7
|
# Transpiler program node
|
|
8
|
-
class DefParentNode < Node
|
|
8
|
+
class DefParentNode < Node::BaseNode
|
|
9
9
|
# @rbs @prism_node: Prism::ClassNode | Prism::ModuleNode
|
|
10
10
|
# @rbs @body_node: nil | Node::StatementsNode
|
|
11
|
-
# @rbs @parent: Node
|
|
11
|
+
# @rbs @parent: Node::BaseNode
|
|
12
|
+
# @rbs @prev: Node::BaseNode | nil
|
|
12
13
|
|
|
13
|
-
attr_reader :prism_node #: Prism::ClassNode | Prism::ModuleNode
|
|
14
|
-
attr_reader :
|
|
15
|
-
attr_reader :
|
|
14
|
+
private attr_reader :prism_node #: Prism::ClassNode | Prism::ModuleNode
|
|
15
|
+
attr_reader :parent #: Node::BaseNode
|
|
16
|
+
attr_reader :prev #: Node::BaseNode | nil
|
|
16
17
|
|
|
17
18
|
# @rbs prism_node: Prism::ClassNode | Prism::ModuleNode
|
|
18
|
-
# @rbs parent: Node
|
|
19
|
+
# @rbs parent: Node::BaseNode
|
|
20
|
+
# @rbs prev: Node::BaseNode | nil
|
|
19
21
|
# @rbs return: void
|
|
20
|
-
def initialize(prism_node, parent:)
|
|
22
|
+
def initialize(prism_node, parent:, prev: nil)
|
|
21
23
|
@prism_node = prism_node
|
|
22
24
|
@parent = parent
|
|
25
|
+
@prev = prev
|
|
23
26
|
raise RubyModKit::Error if !prism_node.is_a?(Prism::ClassNode) && !prism_node.is_a?(Prism::ModuleNode)
|
|
24
27
|
|
|
25
28
|
super()
|
|
26
29
|
end
|
|
27
30
|
|
|
28
|
-
# @rbs
|
|
29
|
-
# @rbs
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
+
|
|
40
|
+
# @rbs return: nil | Node::StatementsNode
|
|
41
|
+
def body_node
|
|
42
|
+
# body_node will be set in #children
|
|
43
|
+
children
|
|
44
|
+
@body_node
|
|
34
45
|
end
|
|
35
46
|
end
|
|
36
47
|
end
|
|
@@ -3,26 +3,30 @@
|
|
|
3
3
|
# rbs_inline: enabled
|
|
4
4
|
|
|
5
5
|
module RubyModKit
|
|
6
|
-
|
|
6
|
+
module Node
|
|
7
7
|
# Transpiler program node
|
|
8
|
-
class ParameterNode < Node
|
|
8
|
+
class ParameterNode < Node::BaseNode
|
|
9
|
+
# @rbs @prism_node: prism_node
|
|
10
|
+
# @rbs @parent: Node::BaseNode
|
|
11
|
+
# @rbs @prev: Node::BaseNode | nil
|
|
12
|
+
|
|
9
13
|
# @rbs!
|
|
10
14
|
# type prism_node = Prism::RequiredParameterNode | Prism::OptionalKeywordParameterNode
|
|
11
15
|
# | Prism::OptionalParameterNode | Prism::RequiredKeywordParameterNode
|
|
12
16
|
# | Prism::RestParameterNode
|
|
13
17
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
attr_reader :prism_node #: prism_node
|
|
18
|
-
attr_reader :parent #: Node
|
|
18
|
+
private attr_reader :prism_node #: prism_node
|
|
19
|
+
attr_reader :parent #: Node::BaseNode
|
|
20
|
+
attr_reader :prev #: Node::BaseNode | nil
|
|
19
21
|
|
|
20
22
|
# @rbs prism_node: prism_node
|
|
21
|
-
# @rbs parent: Node
|
|
23
|
+
# @rbs parent: Node::BaseNode
|
|
24
|
+
# @rbs prev: Node::BaseNode | nil
|
|
22
25
|
# @rbs return: void
|
|
23
|
-
def initialize(prism_node, parent:)
|
|
26
|
+
def initialize(prism_node, parent:, prev: nil)
|
|
24
27
|
@prism_node = prism_node
|
|
25
28
|
@parent = parent
|
|
29
|
+
@prev = prev
|
|
26
30
|
case prism_node
|
|
27
31
|
when Prism::RequiredParameterNode, Prism::OptionalKeywordParameterNode,
|
|
28
32
|
Prism::OptionalParameterNode, Prism::RequiredKeywordParameterNode,
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
# rbs_inline: enabled
|
|
4
4
|
|
|
5
5
|
module RubyModKit
|
|
6
|
-
|
|
6
|
+
module Node
|
|
7
7
|
# Transpiler program node
|
|
8
|
-
class ProgramNode < Node
|
|
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
|