ruby_mod_kit 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ruby_mod_kit/core_ext/eval.rb +6 -0
  3. data/lib/ruby_mod_kit/core_ext/load.rb +12 -4
  4. data/lib/ruby_mod_kit/core_ext.rb +2 -2
  5. data/lib/ruby_mod_kit/corrector.rb +22 -0
  6. data/lib/ruby_mod_kit/corrector_manager.rb +68 -0
  7. data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb +42 -0
  8. data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb +49 -0
  9. data/lib/ruby_mod_kit/feature/instance_variable_parameter.rb +27 -0
  10. data/lib/ruby_mod_kit/feature/overload/overload_mission.rb +80 -0
  11. data/lib/ruby_mod_kit/feature/overload.rb +19 -0
  12. data/lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb +49 -0
  13. data/lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb +90 -0
  14. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rb +41 -0
  15. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rb +31 -0
  16. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rb +43 -0
  17. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rb +38 -0
  18. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rb +32 -0
  19. data/lib/ruby_mod_kit/feature/type/rbs_inline.rb +29 -0
  20. data/lib/ruby_mod_kit/feature/type/return_value_colon_corrector.rb +45 -0
  21. data/lib/ruby_mod_kit/feature/type/type_attr_mission.rb +67 -0
  22. data/lib/ruby_mod_kit/feature/type.rb +31 -0
  23. data/lib/ruby_mod_kit/feature.rb +24 -0
  24. data/lib/ruby_mod_kit/generation.rb +60 -22
  25. data/lib/ruby_mod_kit/memo/def_parent_memo.rb +36 -0
  26. data/lib/ruby_mod_kit/memo/{ivar.rb → ivar_memo.rb} +17 -3
  27. data/lib/ruby_mod_kit/memo/{method.rb → method_memo.rb} +7 -7
  28. data/lib/ruby_mod_kit/memo/offset_memo.rb +1 -1
  29. data/lib/ruby_mod_kit/memo/overload_memo.rb +46 -0
  30. data/lib/ruby_mod_kit/memo/{parameter.rb → parameter_memo.rb} +3 -3
  31. data/lib/ruby_mod_kit/memo.rb +7 -64
  32. data/lib/ruby_mod_kit/memo_pad.rb +69 -0
  33. data/lib/ruby_mod_kit/mission.rb +5 -24
  34. data/lib/ruby_mod_kit/node/base_node.rb +137 -0
  35. data/lib/ruby_mod_kit/node/call_node.rb +10 -6
  36. data/lib/ruby_mod_kit/node/def_node.rb +10 -6
  37. data/lib/ruby_mod_kit/node/def_parent_node.rb +17 -13
  38. data/lib/ruby_mod_kit/node/parameter_node.rb +12 -8
  39. data/lib/ruby_mod_kit/node/program_node.rb +2 -2
  40. data/lib/ruby_mod_kit/node/statements_node.rb +10 -6
  41. data/lib/ruby_mod_kit/node/symbol_node.rb +10 -6
  42. data/lib/ruby_mod_kit/node/untyped_node.rb +10 -6
  43. data/lib/ruby_mod_kit/node/wrap.rb +43 -0
  44. data/lib/ruby_mod_kit/node.rb +4 -148
  45. data/lib/ruby_mod_kit/version.rb +1 -1
  46. data/lib/ruby_mod_kit.rb +17 -3
  47. data/sig/generated/ruby_mod_kit/core_ext/eval.rbs +3 -0
  48. data/sig/generated/ruby_mod_kit/core_ext/load.rbs +7 -4
  49. data/sig/generated/ruby_mod_kit/corrector.rbs +16 -0
  50. data/sig/generated/ruby_mod_kit/corrector_manager.rbs +26 -0
  51. data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rbs +20 -0
  52. data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rbs +21 -0
  53. data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter.rbs +14 -0
  54. data/sig/generated/ruby_mod_kit/feature/overload/overload_mission.rbs +24 -0
  55. data/sig/generated/ruby_mod_kit/feature/overload.rbs +11 -0
  56. data/sig/generated/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rbs +20 -0
  57. data/sig/generated/ruby_mod_kit/feature/type/parameter_arrow_corrector.rbs +39 -0
  58. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rbs +19 -0
  59. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rbs +19 -0
  60. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rbs +19 -0
  61. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rbs +19 -0
  62. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rbs +19 -0
  63. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline.rbs +13 -0
  64. data/sig/generated/ruby_mod_kit/feature/type/return_value_colon_corrector.rbs +20 -0
  65. data/sig/generated/ruby_mod_kit/feature/type/type_attr_mission.rbs +20 -0
  66. data/sig/generated/ruby_mod_kit/feature/type.rbs +14 -0
  67. data/sig/generated/ruby_mod_kit/feature.rbs +16 -0
  68. data/sig/generated/ruby_mod_kit/generation.rbs +25 -10
  69. data/sig/generated/ruby_mod_kit/memo/def_parent_memo.rbs +24 -0
  70. data/sig/generated/ruby_mod_kit/memo/{ivar.rbs → ivar_memo.rbs} +15 -3
  71. data/sig/generated/ruby_mod_kit/memo/{method.rbs → method_memo.rbs} +8 -8
  72. data/sig/generated/ruby_mod_kit/memo/offset_memo.rbs +1 -1
  73. data/sig/generated/ruby_mod_kit/memo/overload_memo.rbs +32 -0
  74. data/sig/generated/ruby_mod_kit/memo/{parameter.rbs → parameter_memo.rbs} +3 -3
  75. data/sig/generated/ruby_mod_kit/memo.rbs +2 -36
  76. data/sig/generated/ruby_mod_kit/memo_pad.rbs +46 -0
  77. data/sig/generated/ruby_mod_kit/mission.rbs +4 -12
  78. data/sig/generated/ruby_mod_kit/node/base_node.rbs +65 -0
  79. data/sig/generated/ruby_mod_kit/node/call_node.rbs +11 -6
  80. data/sig/generated/ruby_mod_kit/node/def_node.rbs +11 -6
  81. data/sig/generated/ruby_mod_kit/node/def_parent_node.rbs +12 -10
  82. data/sig/generated/ruby_mod_kit/node/parameter_node.rbs +13 -8
  83. data/sig/generated/ruby_mod_kit/node/program_node.rbs +2 -2
  84. data/sig/generated/ruby_mod_kit/node/statements_node.rbs +11 -6
  85. data/sig/generated/ruby_mod_kit/node/symbol_node.rbs +11 -6
  86. data/sig/generated/ruby_mod_kit/node/untyped_node.rbs +11 -6
  87. data/sig/generated/ruby_mod_kit/node/wrap.rbs +12 -0
  88. data/sig/generated/ruby_mod_kit/node.rbs +2 -58
  89. data/sig/generated/ruby_mod_kit.rbs +4 -0
  90. metadata +56 -27
  91. data/lib/ruby_mod_kit/memo/def_parent.rb +0 -27
  92. data/lib/ruby_mod_kit/mission/fix_parse_error.rb +0 -216
  93. data/lib/ruby_mod_kit/mission/ivar_arg.rb +0 -42
  94. data/lib/ruby_mod_kit/mission/overload.rb +0 -73
  95. data/lib/ruby_mod_kit/mission/type_attr.rb +0 -75
  96. data/lib/ruby_mod_kit/mission/type_parameter.rb +0 -39
  97. data/lib/ruby_mod_kit/mission/type_return.rb +0 -33
  98. data/lib/ruby_mod_kit/transpiler.rb +0 -20
  99. data/sig/generated/examples/user.rbs +0 -60
  100. data/sig/generated/ruby_mod_kit/memo/def_parent.rbs +0 -20
  101. data/sig/generated/ruby_mod_kit/memo/located.rbs +0 -14
  102. data/sig/generated/ruby_mod_kit/memo/parameter_type.rbs +0 -14
  103. data/sig/generated/ruby_mod_kit/mission/fix_parse_error.rbs +0 -73
  104. data/sig/generated/ruby_mod_kit/mission/ivar_arg.rbs +0 -19
  105. data/sig/generated/ruby_mod_kit/mission/overload.rbs +0 -20
  106. data/sig/generated/ruby_mod_kit/mission/type_attr.rbs +0 -18
  107. data/sig/generated/ruby_mod_kit/mission/type_parameter.rbs +0 -18
  108. data/sig/generated/ruby_mod_kit/mission/type_return.rbs +0 -18
  109. data/sig/generated/ruby_mod_kit/transpiler.rbs +0 -11
@@ -3,71 +3,14 @@
3
3
  # rbs_inline: enabled
4
4
 
5
5
  module RubyModKit
6
- # The class of transpiler generation.
7
- class Memo
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
6
+ # The namespace of transpiler memo.
7
+ module Memo
66
8
  end
67
9
  end
68
10
 
69
11
  require_relative "memo/offset_memo"
70
- require_relative "memo/def_parent"
71
- require_relative "memo/ivar"
72
- require_relative "memo/method"
73
- require_relative "memo/parameter"
12
+ require_relative "memo/def_parent_memo"
13
+ require_relative "memo/ivar_memo"
14
+ require_relative "memo/method_memo"
15
+ require_relative "memo/overload_memo"
16
+ require_relative "memo/parameter_memo"
@@ -0,0 +1,69 @@
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
+
13
+ attr_reader :def_parents_memo #: Hash[Integer, Memo::DefParentMemo]
14
+ attr_reader :methods_memo #: Hash[Integer, Memo::MethodMemo]
15
+ attr_reader :parameters_memo #: Hash[Integer, Memo::ParameterMemo]
16
+ attr_reader :overloads_memo #: Hash[Integer, Memo::OverloadMemo]
17
+
18
+ # @rbs return: void
19
+ def initialize
20
+ @def_parents_memo = {}
21
+ @methods_memo = {}
22
+ @parameters_memo = {}
23
+ @overloads_memo = {}
24
+ end
25
+
26
+ # @rbs offset_diff: OffsetDiff
27
+ # @rbs return: void
28
+ def succ(offset_diff)
29
+ [@methods_memo, @parameters_memo, @def_parents_memo, @overloads_memo].each do |offset_node_memo|
30
+ new_offset_node_memo = {}
31
+ offset_node_memo.each_value do |node_memo|
32
+ node_memo.succ(offset_diff)
33
+ new_offset_node_memo[node_memo.offset] = node_memo
34
+ end
35
+ offset_node_memo.replace(new_offset_node_memo)
36
+ end
37
+ self
38
+ end
39
+
40
+ # @rbs def_parent_node: Node::DefParentNode
41
+ # @rbs return: Memo::DefParentMemo
42
+ def def_parent_memo(def_parent_node)
43
+ @def_parents_memo[def_parent_node.offset] ||= Memo::DefParentMemo.new(def_parent_node)
44
+ end
45
+
46
+ # @rbs def_node: Node::DefNode
47
+ # @rbs return: Memo::MethodMemo
48
+ def method_memo(def_node)
49
+ @methods_memo[def_node.offset] ||= Memo::MethodMemo.new(def_node)
50
+ end
51
+
52
+ # @rbs offset: Integer
53
+ # @rbs name: Symbol
54
+ # @rbs return: Memo::OverloadMemo
55
+ def overload_memo(offset, name)
56
+ @overloads_memo[offset] ||= Memo::OverloadMemo.new(offset, name)
57
+ end
58
+
59
+ # @rbs node: Node::BaseNode
60
+ # @rbs return: Memo::ParameterMemo
61
+ def parameter_memo(node)
62
+ memo = @parameters_memo[node.offset] ||= Memo::ParameterMemo.new(node.offset)
63
+ def_node = node.def_node_at(node.offset)
64
+ raise RubyModKit::Error unless def_node.is_a?(Node::DefNode)
65
+
66
+ method_memo(def_node).add_parameter(memo)
67
+ end
68
+ end
69
+ end
@@ -3,38 +3,19 @@
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
9
+ # @rbs _root_node: Node::ProgramNode
20
10
  # @rbs _parse_result: Prism::ParseResult
21
- # @rbs _memo: Memo
11
+ # @rbs _memo_pad: MemoPad
22
12
  # @rbs return: void
23
- def perform(_generation, _root_node, _parse_result, _memo)
13
+ def perform(_generation, _root_node, _parse_result, _memo_pad)
24
14
  raise RubyModKit::Error, "Unexpected type #{self.class}"
25
15
  end
26
16
 
27
17
  # @rbs offset_diff: OffsetDiff
28
18
  # @rbs return: void
29
- def succ(offset_diff)
30
- @offset = offset_diff[@offset]
31
- end
19
+ def succ(offset_diff); end
32
20
  end
33
21
  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,137 @@
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 :location #: Prism::Location
15
+ attr_reader :prev #: Node::BaseNode | nil
16
+
17
+ # @rbs return: void
18
+ def initialize
19
+ @location = prism_node.location
20
+ end
21
+
22
+ # @rbs return: Array[Node::BaseNode]
23
+ def children
24
+ return @children if @children
25
+
26
+ prev = nil
27
+ @children = prism_node.child_nodes.compact.map do |prism_child_node|
28
+ prev = Node.wrap(prism_child_node, parent: self, prev: prev)
29
+ end
30
+ end
31
+
32
+ # @rbs return: Array[Node::BaseNode]
33
+ def ancestors
34
+ return @ancestors if @ancestors
35
+
36
+ parent = @parent
37
+ @ancestors = if parent
38
+ [parent] + parent.ancestors
39
+ else
40
+ []
41
+ end
42
+ end
43
+
44
+ # @rbs return: Symbol
45
+ def name
46
+ raise(RubyModKit::Error, "Expected ParameterNode but #{self.class}:#{prism_node.inspect}")
47
+ end
48
+
49
+ # @rbs offset: Integer
50
+ # @rbs return: Node::BaseNode | nil
51
+ def node_at(offset)
52
+ return nil unless include?(offset)
53
+
54
+ child = children.find { _1.include?(offset) }
55
+ child&.node_at(offset) || self
56
+ end
57
+
58
+ # @rbs offset: Integer
59
+ # @rbs return: Node::StatementsNode | nil
60
+ def statements_node_at(offset)
61
+ node = node_at(offset) || return
62
+ [node, *node.ancestors].each { return _1 if _1.is_a?(Node::StatementsNode) }
63
+ nil
64
+ end
65
+
66
+ # @rbs offset: Integer
67
+ # @rbs return: Node::DefNode | nil
68
+ def def_node_at(offset)
69
+ node = node_at(offset) || return
70
+ [node, *node.ancestors].each { return _1 if _1.is_a?(Node::DefNode) }
71
+ nil
72
+ end
73
+
74
+ # @rbs offset: Integer
75
+ # @rbs return: Node::ParameterNode | nil
76
+ def parameter_node_at(offset)
77
+ node = node_at(offset) || return
78
+ [node, *node.ancestors].each { return _1 if _1.is_a?(Node::ParameterNode) }
79
+ nil
80
+ end
81
+
82
+ # @rbs offset: Integer
83
+ # @rbs return: Node::DefParentNode | nil
84
+ def def_parent_node_at(offset)
85
+ node = node_at(offset) || return
86
+ [node, *node.ancestors].each { return _1 if _1.is_a?(Node::DefParentNode) }
87
+ nil
88
+ end
89
+
90
+ # @rbs offset: Integer
91
+ # @rbs return: bool
92
+ def include?(offset)
93
+ self.offset <= offset && offset <= prism_node.location.end_offset
94
+ end
95
+
96
+ # @rbs return: Prism::Node & Prism::_Node
97
+ def prism_node
98
+ raise RubyModKit::Error
99
+ end
100
+
101
+ # @rbs return: Integer
102
+ def offset
103
+ location.start_offset
104
+ end
105
+
106
+ # @rbs return: String
107
+ def inspect
108
+ str = +"#<#{self.class} "
109
+ first = true
110
+ instance_variables.each do |ivar_name|
111
+ case ivar_name
112
+ when :@children, :@ancestors, :@parent
113
+ next
114
+ end
115
+
116
+ if first
117
+ first = false
118
+ else
119
+ str << ", "
120
+ end
121
+ str << "#{ivar_name}="
122
+ value = instance_variable_get(ivar_name)
123
+ str << (
124
+ case value
125
+ when Prism::Node
126
+ "#<#{value.class} location=#{value.location.inspect}>"
127
+ else
128
+ value.inspect
129
+ end
130
+ )
131
+ end
132
+ str << ">"
133
+ str
134
+ end
135
+ end
136
+ end
137
+ end
@@ -3,23 +3,27 @@
3
3
  # rbs_inline: enabled
4
4
 
5
5
  module RubyModKit
6
- class Node
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
14
  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
- class Node
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
13
  attr_reader :prism_node #: Prism::DefNode
13
- attr_reader :parent #: Node
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,38 @@
3
3
  # rbs_inline: enabled
4
4
 
5
5
  module RubyModKit
6
- class Node
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
14
  attr_reader :prism_node #: Prism::ClassNode | Prism::ModuleNode
14
- attr_reader :body_node #: nil | Node::StatementsNode
15
- attr_reader :parent #: Node
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 child_prism_node: Prism::Node
29
- # @rbs return: Node
30
- def wrap(child_prism_node)
31
- node = super
32
- @body_node = node if child_prism_node == prism_node.body && node.is_a?(Node::StatementsNode)
33
- node
31
+ # @rbs return: nil | Node::StatementsNode
32
+ def body_node
33
+ return @body_node if defined?(@body_node)
34
+
35
+ body_node = children.find { |node| node.prism_node == @prism_node.body }
36
+ body_node = nil unless body_node.is_a?(Node::StatementsNode)
37
+ @body_node = body_node
34
38
  end
35
39
  end
36
40
  end
@@ -3,26 +3,30 @@
3
3
  # rbs_inline: enabled
4
4
 
5
5
  module RubyModKit
6
- class Node
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
- # @rbs @prism_node: prism_node
15
- # @rbs @parent: Node
16
-
17
18
  attr_reader :prism_node #: prism_node
18
- attr_reader :parent #: 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,9 +3,9 @@
3
3
  # rbs_inline: enabled
4
4
 
5
5
  module RubyModKit
6
- class Node
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
11
  attr_reader :prism_node #: Prism::ProgramNode
@@ -3,21 +3,25 @@
3
3
  # rbs_inline: enabled
4
4
 
5
5
  module RubyModKit
6
- class Node
6
+ module Node
7
7
  # Transpiler program node
8
- class StatementsNode < Node
8
+ class StatementsNode < Node::BaseNode
9
9
  # @rbs @prism_node: Prism::StatementsNode
10
- # @rbs @parent: Node
10
+ # @rbs @parent: Node::BaseNode
11
+ # @rbs @prev: Node::BaseNode | nil
11
12
 
12
13
  attr_reader :prism_node #: Prism::StatementsNode
13
- attr_reader :parent #: Node
14
+ attr_reader :parent #: Node::BaseNode
15
+ attr_reader :prev #: Node::BaseNode | nil
14
16
 
15
17
  # @rbs prism_node: Prism::StatementsNode
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::StatementsNode)
22
26
 
23
27
  super()
@@ -3,21 +3,25 @@
3
3
  # rbs_inline: enabled
4
4
 
5
5
  module RubyModKit
6
- class Node
6
+ module Node
7
7
  # Transpiler program node
8
- class SymbolNode < Node
8
+ class SymbolNode < Node::BaseNode
9
9
  # @rbs @prism_node: Prism::SymbolNode
10
- # @rbs @parent: Node
10
+ # @rbs @parent: Node::BaseNode
11
+ # @rbs @prev: Node::BaseNode | nil
11
12
 
12
13
  attr_reader :prism_node #: Prism::SymbolNode
13
- attr_reader :parent #: Node
14
+ attr_reader :parent #: Node::BaseNode
15
+ attr_reader :prev #: Node::BaseNode | nil
14
16
 
15
17
  # @rbs prism_node: Prism::SymbolNode
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::SymbolNode)
22
26
 
23
27
  super()
@@ -3,21 +3,25 @@
3
3
  # rbs_inline: enabled
4
4
 
5
5
  module RubyModKit
6
- class Node
6
+ module Node
7
7
  # Transpiler program node
8
- class UntypedNode < Node
8
+ class UntypedNode < Node::BaseNode
9
9
  # @rbs @prism_node: Prism::Node
10
- # @rbs @parent: Node
10
+ # @rbs @parent: Node::BaseNode
11
+ # @rbs @prev: Node::BaseNode | nil
11
12
 
12
13
  attr_reader :prism_node #: Prism::Node
13
- attr_reader :parent #: Node
14
+ attr_reader :parent #: Node::BaseNode
15
+ attr_reader :prev #: Node::BaseNode | nil
14
16
 
15
17
  # @rbs prism_node: Prism::Node
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
  super()
22
26
  end
23
27
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rbs_inline: enabled
4
+
5
+ require_relative "call_node"
6
+ require_relative "def_node"
7
+ require_relative "def_parent_node"
8
+ require_relative "parameter_node"
9
+ require_relative "statements_node"
10
+ require_relative "symbol_node"
11
+ require_relative "untyped_node"
12
+
13
+ module RubyModKit
14
+ # The namespace of transpile node.
15
+ module Node
16
+ class << self
17
+ # @rbs prism_node: Prism::Node
18
+ # @rbs parent: Node::BaseNode
19
+ # @rbs prev: Node::BaseNode | nil
20
+ # @rbs return: Node::BaseNode
21
+ def wrap(prism_node, parent:, prev: nil)
22
+ case prism_node
23
+ when Prism::CallNode
24
+ Node::CallNode.new(prism_node, parent: parent, prev: prev)
25
+ when Prism::DefNode
26
+ Node::DefNode.new(prism_node, parent: parent, prev: prev)
27
+ when Prism::ClassNode, Prism::ModuleNode
28
+ Node::DefParentNode.new(prism_node, parent: parent, prev: prev)
29
+ when Prism::RequiredParameterNode, Prism::OptionalKeywordParameterNode,
30
+ Prism::OptionalParameterNode, Prism::RequiredKeywordParameterNode,
31
+ Prism::RestParameterNode
32
+ Node::ParameterNode.new(prism_node, parent: parent, prev: prev)
33
+ when Prism::StatementsNode
34
+ Node::StatementsNode.new(prism_node, parent: parent, prev: prev)
35
+ when Prism::SymbolNode
36
+ Node::SymbolNode.new(prism_node, parent: parent, prev: prev)
37
+ else
38
+ Node::UntypedNode.new(prism_node, parent: parent, prev: prev)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end