ruby_mod_kit 0.0.1 → 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 (117) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -8
  3. data/lib/ruby_mod_kit/cli.rb +10 -1
  4. data/lib/ruby_mod_kit/core_ext/eval.rb +36 -0
  5. data/lib/ruby_mod_kit/core_ext/load.rb +74 -0
  6. data/lib/ruby_mod_kit/core_ext.rb +7 -0
  7. data/lib/ruby_mod_kit/corrector.rb +22 -0
  8. data/lib/ruby_mod_kit/corrector_manager.rb +68 -0
  9. data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb +42 -0
  10. data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb +49 -0
  11. data/lib/ruby_mod_kit/feature/instance_variable_parameter.rb +27 -0
  12. data/lib/ruby_mod_kit/feature/overload/overload_mission.rb +80 -0
  13. data/lib/ruby_mod_kit/feature/overload.rb +19 -0
  14. data/lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb +49 -0
  15. data/lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb +90 -0
  16. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rb +41 -0
  17. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rb +31 -0
  18. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rb +43 -0
  19. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rb +38 -0
  20. data/lib/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rb +32 -0
  21. data/lib/ruby_mod_kit/feature/type/rbs_inline.rb +29 -0
  22. data/lib/ruby_mod_kit/feature/type/return_value_colon_corrector.rb +45 -0
  23. data/lib/ruby_mod_kit/feature/type/type_attr_mission.rb +67 -0
  24. data/lib/ruby_mod_kit/feature/type.rb +31 -0
  25. data/lib/ruby_mod_kit/feature.rb +24 -0
  26. data/lib/ruby_mod_kit/generation.rb +60 -22
  27. data/lib/ruby_mod_kit/memo/def_parent_memo.rb +36 -0
  28. data/lib/ruby_mod_kit/memo/{ivar.rb → ivar_memo.rb} +17 -3
  29. data/lib/ruby_mod_kit/memo/{method.rb → method_memo.rb} +7 -7
  30. data/lib/ruby_mod_kit/memo/offset_memo.rb +1 -1
  31. data/lib/ruby_mod_kit/memo/overload_memo.rb +46 -0
  32. data/lib/ruby_mod_kit/memo/{parameter.rb → parameter_memo.rb} +3 -3
  33. data/lib/ruby_mod_kit/memo.rb +7 -64
  34. data/lib/ruby_mod_kit/memo_pad.rb +69 -0
  35. data/lib/ruby_mod_kit/mission.rb +5 -24
  36. data/lib/ruby_mod_kit/node/base_node.rb +137 -0
  37. data/lib/ruby_mod_kit/node/call_node.rb +10 -6
  38. data/lib/ruby_mod_kit/node/def_node.rb +10 -6
  39. data/lib/ruby_mod_kit/node/def_parent_node.rb +41 -0
  40. data/lib/ruby_mod_kit/node/parameter_node.rb +12 -8
  41. data/lib/ruby_mod_kit/node/program_node.rb +2 -2
  42. data/lib/ruby_mod_kit/node/statements_node.rb +10 -6
  43. data/lib/ruby_mod_kit/node/symbol_node.rb +10 -6
  44. data/lib/ruby_mod_kit/node/untyped_node.rb +10 -6
  45. data/lib/ruby_mod_kit/node/wrap.rb +43 -0
  46. data/lib/ruby_mod_kit/node.rb +5 -149
  47. data/lib/ruby_mod_kit/offset_diff.rb +12 -6
  48. data/lib/ruby_mod_kit/version.rb +1 -1
  49. data/lib/ruby_mod_kit.rb +43 -11
  50. data/ruby_mod_kit.gemspec +1 -6
  51. data/sig/generated/ruby_mod_kit/core_ext/eval.rbs +17 -0
  52. data/sig/generated/ruby_mod_kit/core_ext/load.rbs +33 -0
  53. data/sig/generated/ruby_mod_kit/corrector.rbs +16 -0
  54. data/sig/generated/ruby_mod_kit/corrector_manager.rbs +26 -0
  55. data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rbs +20 -0
  56. data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rbs +21 -0
  57. data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter.rbs +14 -0
  58. data/sig/generated/ruby_mod_kit/feature/overload/overload_mission.rbs +24 -0
  59. data/sig/generated/ruby_mod_kit/feature/overload.rbs +11 -0
  60. data/sig/generated/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rbs +20 -0
  61. data/sig/generated/ruby_mod_kit/feature/type/parameter_arrow_corrector.rbs +39 -0
  62. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rbs +19 -0
  63. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rbs +19 -0
  64. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rbs +19 -0
  65. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rbs +19 -0
  66. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rbs +19 -0
  67. data/sig/generated/ruby_mod_kit/feature/type/rbs_inline.rbs +13 -0
  68. data/sig/generated/ruby_mod_kit/feature/type/return_value_colon_corrector.rbs +20 -0
  69. data/sig/generated/ruby_mod_kit/feature/type/type_attr_mission.rbs +20 -0
  70. data/sig/generated/ruby_mod_kit/feature/type.rbs +14 -0
  71. data/sig/generated/ruby_mod_kit/feature.rbs +16 -0
  72. data/sig/generated/ruby_mod_kit/generation.rbs +25 -10
  73. data/sig/generated/ruby_mod_kit/memo/def_parent_memo.rbs +24 -0
  74. data/sig/generated/ruby_mod_kit/memo/{ivar.rbs → ivar_memo.rbs} +15 -3
  75. data/sig/generated/ruby_mod_kit/memo/{method.rbs → method_memo.rbs} +8 -8
  76. data/sig/generated/ruby_mod_kit/memo/offset_memo.rbs +1 -1
  77. data/sig/generated/ruby_mod_kit/memo/overload_memo.rbs +32 -0
  78. data/sig/generated/ruby_mod_kit/memo/{parameter.rbs → parameter_memo.rbs} +3 -3
  79. data/sig/generated/ruby_mod_kit/memo.rbs +2 -36
  80. data/sig/generated/ruby_mod_kit/memo_pad.rbs +46 -0
  81. data/sig/generated/ruby_mod_kit/mission.rbs +4 -12
  82. data/sig/generated/ruby_mod_kit/node/base_node.rbs +65 -0
  83. data/sig/generated/ruby_mod_kit/node/call_node.rbs +11 -6
  84. data/sig/generated/ruby_mod_kit/node/def_node.rbs +11 -6
  85. data/sig/generated/ruby_mod_kit/node/def_parent_node.rbs +31 -0
  86. data/sig/generated/ruby_mod_kit/node/parameter_node.rbs +13 -8
  87. data/sig/generated/ruby_mod_kit/node/program_node.rbs +2 -2
  88. data/sig/generated/ruby_mod_kit/node/statements_node.rbs +11 -6
  89. data/sig/generated/ruby_mod_kit/node/symbol_node.rbs +11 -6
  90. data/sig/generated/ruby_mod_kit/node/untyped_node.rbs +11 -6
  91. data/sig/generated/ruby_mod_kit/node/wrap.rbs +12 -0
  92. data/sig/generated/ruby_mod_kit/node.rbs +2 -58
  93. data/sig/generated/ruby_mod_kit/offset_diff.rbs +3 -1
  94. data/sig/generated/ruby_mod_kit.rbs +13 -2
  95. data/sig/thor.rbs +2 -0
  96. metadata +63 -43
  97. data/lib/ruby_mod_kit/memo/class.rb +0 -27
  98. data/lib/ruby_mod_kit/mission/fix_parse_error.rb +0 -213
  99. data/lib/ruby_mod_kit/mission/ivar_arg.rb +0 -42
  100. data/lib/ruby_mod_kit/mission/overload.rb +0 -73
  101. data/lib/ruby_mod_kit/mission/type_attr.rb +0 -75
  102. data/lib/ruby_mod_kit/mission/type_parameter.rb +0 -39
  103. data/lib/ruby_mod_kit/mission/type_return.rb +0 -33
  104. data/lib/ruby_mod_kit/node/class_node.rb +0 -37
  105. data/lib/ruby_mod_kit/transpiler.rb +0 -20
  106. data/sig/generated/examples/user.rbs +0 -60
  107. data/sig/generated/ruby_mod_kit/memo/class.rbs +0 -20
  108. data/sig/generated/ruby_mod_kit/memo/located.rbs +0 -14
  109. data/sig/generated/ruby_mod_kit/memo/parameter_type.rbs +0 -14
  110. data/sig/generated/ruby_mod_kit/mission/fix_parse_error.rbs +0 -73
  111. data/sig/generated/ruby_mod_kit/mission/ivar_arg.rbs +0 -19
  112. data/sig/generated/ruby_mod_kit/mission/overload.rbs +0 -20
  113. data/sig/generated/ruby_mod_kit/mission/type_attr.rbs +0 -18
  114. data/sig/generated/ruby_mod_kit/mission/type_parameter.rbs +0 -18
  115. data/sig/generated/ruby_mod_kit/mission/type_return.rbs +0 -18
  116. data/sig/generated/ruby_mod_kit/node/class_node.rbs +0 -29
  117. data/sig/generated/ruby_mod_kit/transpiler.rbs +0 -11
@@ -0,0 +1,46 @@
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
+
13
+ attr_reader :name #: Symbol
14
+ attr_reader :overload_types #: [[Array[String], String]]
15
+
16
+ # @rbs offset: Integer
17
+ # @rbs name: Symbol
18
+ # @rbs return: void
19
+ def initialize(offset, name)
20
+ @name = name
21
+ @overload_types = []
22
+ @offset_corrected = false
23
+ super(offset)
24
+ end
25
+
26
+ # @rbs root_node: Node::ProgramNode
27
+ # @rbs return: Integer
28
+ def correct_offset(root_node)
29
+ return @offset if @offset_corrected
30
+
31
+ node = root_node.def_node_at(@offset)&.prev
32
+ raise RubyModKit::Error unless node.is_a?(Node::DefNode)
33
+
34
+ @offset_corrected = true
35
+ @offset = node.offset
36
+ end
37
+
38
+ # @rbs parameter_types: Array[String]
39
+ # @rbs return_value_type: String
40
+ # @rbs return: void
41
+ def add_overload_type(parameter_types, return_value_type)
42
+ @overload_types << [parameter_types, return_value_type]
43
+ end
44
+ end
45
+ end
46
+ end
@@ -3,9 +3,9 @@
3
3
  # rbs_inline: enabled
4
4
 
5
5
  module RubyModKit
6
- class Memo
6
+ module Memo
7
7
  # The memo for parameter type
8
- class Parameter < OffsetMemo
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 = Memo.unify_type(type)
35
+ @type = RubyModKit.unify_type(type)
36
36
  end
37
37
  end
38
38
  end
@@ -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 @classes_memo: Hash[Integer, Memo::Class]
9
- # @rbs @methods_memo: Hash[Integer, Memo::Method]
10
- # @rbs @parameters_memo: Hash[Integer, Memo::Parameter]
11
-
12
- attr_reader :classes_memo #: Hash[Integer, Memo::Class]
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
- @classes_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, @classes_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 class_node: Node::ClassNode
38
- # @rbs return: Memo::Class
39
- def class_memo(class_node)
40
- @classes_memo[class_node.offset] ||= Memo::Class.new(class_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/class"
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()
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rbs_inline: enabled
4
+
5
+ module RubyModKit
6
+ module Node
7
+ # Transpiler program node
8
+ class DefParentNode < Node::BaseNode
9
+ # @rbs @prism_node: Prism::ClassNode | Prism::ModuleNode
10
+ # @rbs @body_node: nil | Node::StatementsNode
11
+ # @rbs @parent: Node::BaseNode
12
+ # @rbs @prev: Node::BaseNode | nil
13
+
14
+ attr_reader :prism_node #: Prism::ClassNode | Prism::ModuleNode
15
+ attr_reader :parent #: Node::BaseNode
16
+ attr_reader :prev #: Node::BaseNode | nil
17
+
18
+ # @rbs prism_node: Prism::ClassNode | Prism::ModuleNode
19
+ # @rbs parent: Node::BaseNode
20
+ # @rbs prev: Node::BaseNode | nil
21
+ # @rbs return: void
22
+ def initialize(prism_node, parent:, prev: nil)
23
+ @prism_node = prism_node
24
+ @parent = parent
25
+ @prev = prev
26
+ raise RubyModKit::Error if !prism_node.is_a?(Prism::ClassNode) && !prism_node.is_a?(Prism::ModuleNode)
27
+
28
+ super()
29
+ end
30
+
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
38
+ end
39
+ end
40
+ end
41
+ 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