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
@@ -1,21 +1,26 @@
1
1
  # Generated from lib/ruby_mod_kit/node/untyped_node.rb with RBS::Inline
2
2
 
3
3
  module RubyModKit
4
- class Node
4
+ module Node
5
5
  # Transpiler program node
6
- class UntypedNode < Node
6
+ class UntypedNode < Node::BaseNode
7
7
  @prism_node: Prism::Node
8
8
 
9
- @parent: Node
9
+ @parent: Node::BaseNode
10
+
11
+ @prev: Node::BaseNode | nil
10
12
 
11
13
  attr_reader prism_node: Prism::Node
12
14
 
13
- attr_reader parent: Node
15
+ attr_reader parent: Node::BaseNode
16
+
17
+ attr_reader prev: Node::BaseNode | nil
14
18
 
15
19
  # @rbs prism_node: Prism::Node
16
- # @rbs parent: Node
20
+ # @rbs parent: Node::BaseNode
21
+ # @rbs prev: Node::BaseNode | nil
17
22
  # @rbs return: void
18
- def initialize: (Prism::Node prism_node, parent: Node) -> void
23
+ def initialize: (Prism::Node prism_node, parent: Node::BaseNode, ?prev: Node::BaseNode | nil) -> void
19
24
  end
20
25
  end
21
26
  end
@@ -0,0 +1,12 @@
1
+ # Generated from lib/ruby_mod_kit/node/wrap.rb with RBS::Inline
2
+
3
+ module RubyModKit
4
+ # The namespace of transpile node.
5
+ module Node
6
+ # @rbs prism_node: Prism::Node
7
+ # @rbs parent: Node::BaseNode
8
+ # @rbs prev: Node::BaseNode | nil
9
+ # @rbs return: Node::BaseNode
10
+ def self.wrap: (Prism::Node prism_node, parent: Node::BaseNode, ?prev: Node::BaseNode | nil) -> Node::BaseNode
11
+ end
12
+ end
@@ -1,63 +1,7 @@
1
1
  # Generated from lib/ruby_mod_kit/node.rb with RBS::Inline
2
2
 
3
3
  module RubyModKit
4
- # The class of transpile node.
5
- class Node
6
- @location: Prism::Location
7
-
8
- @children: Array[Node]
9
-
10
- @ancestors: Array[Node]
11
-
12
- attr_reader location: Prism::Location
13
-
14
- # @rbs return: void
15
- def initialize: () -> void
16
-
17
- # @rbs return: Array[Node]
18
- def children: () -> Array[Node]
19
-
20
- # @rbs prism_node: Prism::Node
21
- # @rbs return: Node
22
- def wrap: (Prism::Node prism_node) -> Node
23
-
24
- # @rbs return: Array[Node]
25
- def ancestors: () -> Array[Node]
26
-
27
- # @rbs return: Symbol
28
- def name: () -> Symbol
29
-
30
- # @rbs offset: Integer
31
- # @rbs return: Node | nil
32
- def node_at: (Integer offset) -> (Node | nil)
33
-
34
- # @rbs offset: Integer
35
- # @rbs return: Node::StatementsNode | nil
36
- def statements_node_at: (Integer offset) -> (Node::StatementsNode | nil)
37
-
38
- # @rbs offset: Integer
39
- # @rbs return: Node::DefNode | nil
40
- def def_node_at: (Integer offset) -> (Node::DefNode | nil)
41
-
42
- # @rbs offset: Integer
43
- # @rbs return: Node::ParameterNode | nil
44
- def parameter_node_at: (Integer offset) -> (Node::ParameterNode | nil)
45
-
46
- # @rbs offset: Integer
47
- # @rbs return: Node::DefParentNode | nil
48
- def def_parent_node_at: (Integer offset) -> (Node::DefParentNode | nil)
49
-
50
- # @rbs offset: Integer
51
- # @rbs return: bool
52
- def include?: (Integer offset) -> bool
53
-
54
- # @rbs return: Prism::Node & Prism::_Node
55
- def prism_node: () -> (Prism::Node & Prism::_Node)
56
-
57
- # @rbs return: Integer
58
- def offset: () -> Integer
59
-
60
- # @rbs return: String
61
- def inspect: () -> String
4
+ # The namespace of transpile node.
5
+ module Node
62
6
  end
63
7
  end
@@ -37,4 +37,8 @@ module RubyModKit
37
37
  # @rbs *args: String
38
38
  # @rbs return: void
39
39
  def self.execute_rb: (String rb_script, *String args) -> void
40
+
41
+ # @rbs type: String
42
+ # @rbs return: String
43
+ def self.unify_type: (String type) -> String
40
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_mod_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - wanabe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-21 00:00:00.000000000 Z
11
+ date: 2024-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prism
@@ -56,21 +56,37 @@ files:
56
56
  - lib/ruby_mod_kit/core_ext.rb
57
57
  - lib/ruby_mod_kit/core_ext/eval.rb
58
58
  - lib/ruby_mod_kit/core_ext/load.rb
59
+ - lib/ruby_mod_kit/corrector.rb
60
+ - lib/ruby_mod_kit/corrector_manager.rb
61
+ - lib/ruby_mod_kit/feature.rb
62
+ - lib/ruby_mod_kit/feature/instance_variable_parameter.rb
63
+ - lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb
64
+ - lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb
65
+ - lib/ruby_mod_kit/feature/overload.rb
66
+ - lib/ruby_mod_kit/feature/overload/overload_mission.rb
67
+ - lib/ruby_mod_kit/feature/type.rb
68
+ - lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb
69
+ - lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb
70
+ - lib/ruby_mod_kit/feature/type/rbs_inline.rb
71
+ - lib/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rb
72
+ - lib/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rb
73
+ - lib/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rb
74
+ - lib/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rb
75
+ - lib/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rb
76
+ - lib/ruby_mod_kit/feature/type/return_value_colon_corrector.rb
77
+ - lib/ruby_mod_kit/feature/type/type_attr_mission.rb
59
78
  - lib/ruby_mod_kit/generation.rb
60
79
  - lib/ruby_mod_kit/memo.rb
61
- - lib/ruby_mod_kit/memo/def_parent.rb
62
- - lib/ruby_mod_kit/memo/ivar.rb
63
- - lib/ruby_mod_kit/memo/method.rb
80
+ - lib/ruby_mod_kit/memo/def_parent_memo.rb
81
+ - lib/ruby_mod_kit/memo/ivar_memo.rb
82
+ - lib/ruby_mod_kit/memo/method_memo.rb
64
83
  - lib/ruby_mod_kit/memo/offset_memo.rb
65
- - lib/ruby_mod_kit/memo/parameter.rb
84
+ - lib/ruby_mod_kit/memo/overload_memo.rb
85
+ - lib/ruby_mod_kit/memo/parameter_memo.rb
86
+ - lib/ruby_mod_kit/memo_pad.rb
66
87
  - lib/ruby_mod_kit/mission.rb
67
- - lib/ruby_mod_kit/mission/fix_parse_error.rb
68
- - lib/ruby_mod_kit/mission/ivar_arg.rb
69
- - lib/ruby_mod_kit/mission/overload.rb
70
- - lib/ruby_mod_kit/mission/type_attr.rb
71
- - lib/ruby_mod_kit/mission/type_parameter.rb
72
- - lib/ruby_mod_kit/mission/type_return.rb
73
88
  - lib/ruby_mod_kit/node.rb
89
+ - lib/ruby_mod_kit/node/base_node.rb
74
90
  - lib/ruby_mod_kit/node/call_node.rb
75
91
  - lib/ruby_mod_kit/node/def_node.rb
76
92
  - lib/ruby_mod_kit/node/def_parent_node.rb
@@ -79,32 +95,45 @@ files:
79
95
  - lib/ruby_mod_kit/node/statements_node.rb
80
96
  - lib/ruby_mod_kit/node/symbol_node.rb
81
97
  - lib/ruby_mod_kit/node/untyped_node.rb
98
+ - lib/ruby_mod_kit/node/wrap.rb
82
99
  - lib/ruby_mod_kit/offset_diff.rb
83
- - lib/ruby_mod_kit/transpiler.rb
84
100
  - lib/ruby_mod_kit/version.rb
85
101
  - ruby_mod_kit.gemspec
86
- - sig/generated/examples/user.rbs
87
102
  - sig/generated/ruby_mod_kit.rbs
88
103
  - sig/generated/ruby_mod_kit/cli.rbs
89
104
  - sig/generated/ruby_mod_kit/core_ext/eval.rbs
90
105
  - sig/generated/ruby_mod_kit/core_ext/load.rbs
106
+ - sig/generated/ruby_mod_kit/corrector.rbs
107
+ - sig/generated/ruby_mod_kit/corrector_manager.rbs
108
+ - sig/generated/ruby_mod_kit/feature.rbs
109
+ - sig/generated/ruby_mod_kit/feature/instance_variable_parameter.rbs
110
+ - sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rbs
111
+ - sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rbs
112
+ - sig/generated/ruby_mod_kit/feature/overload.rbs
113
+ - sig/generated/ruby_mod_kit/feature/overload/overload_mission.rbs
114
+ - sig/generated/ruby_mod_kit/feature/type.rbs
115
+ - sig/generated/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rbs
116
+ - sig/generated/ruby_mod_kit/feature/type/parameter_arrow_corrector.rbs
117
+ - sig/generated/ruby_mod_kit/feature/type/rbs_inline.rbs
118
+ - sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rbs
119
+ - sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rbs
120
+ - sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rbs
121
+ - sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rbs
122
+ - sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rbs
123
+ - sig/generated/ruby_mod_kit/feature/type/return_value_colon_corrector.rbs
124
+ - sig/generated/ruby_mod_kit/feature/type/type_attr_mission.rbs
91
125
  - sig/generated/ruby_mod_kit/generation.rbs
92
126
  - sig/generated/ruby_mod_kit/memo.rbs
93
- - sig/generated/ruby_mod_kit/memo/def_parent.rbs
94
- - sig/generated/ruby_mod_kit/memo/ivar.rbs
95
- - sig/generated/ruby_mod_kit/memo/located.rbs
96
- - sig/generated/ruby_mod_kit/memo/method.rbs
127
+ - sig/generated/ruby_mod_kit/memo/def_parent_memo.rbs
128
+ - sig/generated/ruby_mod_kit/memo/ivar_memo.rbs
129
+ - sig/generated/ruby_mod_kit/memo/method_memo.rbs
97
130
  - sig/generated/ruby_mod_kit/memo/offset_memo.rbs
98
- - sig/generated/ruby_mod_kit/memo/parameter.rbs
99
- - sig/generated/ruby_mod_kit/memo/parameter_type.rbs
131
+ - sig/generated/ruby_mod_kit/memo/overload_memo.rbs
132
+ - sig/generated/ruby_mod_kit/memo/parameter_memo.rbs
133
+ - sig/generated/ruby_mod_kit/memo_pad.rbs
100
134
  - sig/generated/ruby_mod_kit/mission.rbs
101
- - sig/generated/ruby_mod_kit/mission/fix_parse_error.rbs
102
- - sig/generated/ruby_mod_kit/mission/ivar_arg.rbs
103
- - sig/generated/ruby_mod_kit/mission/overload.rbs
104
- - sig/generated/ruby_mod_kit/mission/type_attr.rbs
105
- - sig/generated/ruby_mod_kit/mission/type_parameter.rbs
106
- - sig/generated/ruby_mod_kit/mission/type_return.rbs
107
135
  - sig/generated/ruby_mod_kit/node.rbs
136
+ - sig/generated/ruby_mod_kit/node/base_node.rbs
108
137
  - sig/generated/ruby_mod_kit/node/call_node.rbs
109
138
  - sig/generated/ruby_mod_kit/node/def_node.rbs
110
139
  - sig/generated/ruby_mod_kit/node/def_parent_node.rbs
@@ -113,8 +142,8 @@ files:
113
142
  - sig/generated/ruby_mod_kit/node/statements_node.rbs
114
143
  - sig/generated/ruby_mod_kit/node/symbol_node.rbs
115
144
  - sig/generated/ruby_mod_kit/node/untyped_node.rbs
145
+ - sig/generated/ruby_mod_kit/node/wrap.rbs
116
146
  - sig/generated/ruby_mod_kit/offset_diff.rbs
117
- - sig/generated/ruby_mod_kit/transpiler.rbs
118
147
  - sig/generated/ruby_mod_kit/version.rbs
119
148
  - sig/sorted_set.rbs
120
149
  - sig/thor.rbs
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # rbs_inline: enabled
4
-
5
- module RubyModKit
6
- class Memo
7
- # The memo for def parent (class, module)
8
- class DefParent < OffsetMemo
9
- # @rbs @ivars_memo: Hash[Symbol, Memo::Ivar]
10
-
11
- attr_reader :ivars_memo #: Hash[Symbol, Memo::Ivar]
12
-
13
- # @rbs def_parent_node: Node::DefParentNode
14
- # @rbs return: void
15
- def initialize(def_parent_node)
16
- @ivars_memo = {}
17
- super(def_parent_node.offset)
18
- end
19
-
20
- # @rbs name: Symbol
21
- # @rbs return: Memo::Ivar
22
- def ivar_memo(name)
23
- @ivars_memo[name] ||= Memo::Ivar.new(name)
24
- end
25
- end
26
- end
27
- end
@@ -1,216 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # rbs_inline: enabled
4
-
5
- module RubyModKit
6
- class Mission
7
- # The mission for parameter types
8
- class FixParseError < Mission
9
- # @rbs @previous_error_messages: Array[String]
10
-
11
- # @rbs return: void
12
- def initialize
13
- super(0)
14
- @previous_error_messages = []
15
- end
16
-
17
- # @rbs generation: Generation
18
- # @rbs root_node: Node
19
- # @rbs parse_result: Prism::ParseResult
20
- # @rbs memo: Memo
21
- # @rbs return: bool
22
- def perform(generation, root_node, parse_result, memo)
23
- return true if parse_result.errors.empty?
24
-
25
- check_prev_errors(generation, parse_result)
26
- @previous_error_messages = parse_result.errors.map(&:message)
27
-
28
- parse_result.errors.each do |parse_error|
29
- case parse_error.type
30
- when :argument_formal_ivar
31
- fix_argument_formal_ivar(parse_error, generation, root_node, memo)
32
- when :argument_formal_constant
33
- fix_argument_formal_constant(parse_error, generation)
34
- when :unexpected_token_ignore
35
- case parse_error.location.slice
36
- when "=>"
37
- fix_unexpected_assoc(parse_error, generation, root_node, memo)
38
- when ":"
39
- fix_unexpected_colon(parse_error, generation, root_node, memo)
40
- end
41
- when :def_params_term_paren
42
- fix_def_params_term_paren(parse_error, generation, root_node, memo)
43
- end
44
- end
45
-
46
- false
47
- end
48
-
49
- # @rbs generation: Generation
50
- # @rbs parse_result: Prism::ParseResult
51
- # @rbs return: void
52
- def check_prev_errors(generation, parse_result)
53
- return if @previous_error_messages.empty?
54
- return if parse_result.errors.empty?
55
- return if @previous_error_messages != parse_result.errors.map(&:message)
56
-
57
- message = +""
58
- parse_result.errors.each do |parse_error|
59
- message << "\n" unless message.empty?
60
- message << "#{generation.name}:#{parse_error.location.start_line}:#{parse_error.message} "
61
- message << "(#{parse_error.type})"
62
- line = parse_result.source.lines[parse_error.location.start_line - 1]
63
- if line
64
- message << "\n#{line.chomp}\n"
65
- message << "#{" " * parse_error.location.start_column}^#{"~" * [parse_error.location.length - 1, 0].max}"
66
- end
67
- end
68
- raise RubyModKit::SyntaxError, message
69
- end
70
-
71
- # @rbs parse_error: Prism::ParseError
72
- # @rbs generation: Generation
73
- # @rbs root_node: Node
74
- # @rbs memo: Memo
75
- # @rbs return: void
76
- def fix_def_params_term_paren(parse_error, generation, root_node, memo)
77
- column = parse_error.location.start_column - 1
78
- return if column < 0
79
-
80
- line = generation.line(parse_error)[column..] || return
81
- line =~ /\A\*(.*?)\s*=>\s*/
82
- length = ::Regexp.last_match(0)&.length || return
83
- type = ::Regexp.last_match(1) || return
84
- offset = parse_error.location.start_offset - 1
85
- parameter_position_node = root_node.node_at(offset + length) || return
86
-
87
- generation[parse_error.location.start_offset, length - 1] = ""
88
- parameter_memo = memo.parameter_memo(parameter_position_node)
89
- parameter_memo.type = type
90
- parameter_memo.qualifier = "*"
91
- end
92
-
93
- # @rbs parse_error: Prism::ParseError
94
- # @rbs generation: Generation
95
- # @rbs root_node: Node
96
- # @rbs memo: Memo
97
- # @rbs return: void
98
- def fix_argument_formal_ivar(parse_error, generation, root_node, memo)
99
- src_offset = parse_error.location.start_offset
100
-
101
- name = parse_error.location.slice[1..]
102
- raise RubyModKit::Error unless name
103
-
104
- parameter_position_node = root_node.node_at(src_offset)
105
- raise RubyModKit::Error unless parameter_position_node
106
-
107
- generation[src_offset, parse_error.location.length] = name
108
- parameter_memo = memo.parameter_memo(parameter_position_node)
109
- parameter_memo.ivar_parameter = true
110
- generation.add_mission(Mission::IvarArg.new(src_offset))
111
-
112
- return unless parameter_memo.untyped?
113
-
114
- def_parent_node = root_node.def_parent_node_at(parse_error.location.start_offset) || return
115
- ivar_memo_type = memo.def_parent_memo(def_parent_node).ivar_memo(name.to_sym).type || return
116
- parameter_memo.type = ivar_memo_type
117
- end
118
-
119
- # @rbs parse_error: Prism::ParseError
120
- # @rbs generation: Generation
121
- # @rbs return: void
122
- def fix_argument_formal_constant(parse_error, generation)
123
- line = generation.line(parse_error)
124
- line = line[parse_error.location.start_column..] || return
125
- parameter_type = line[/(\A[A-Z]\w*(?:::[A-Z]\w*)+)(?:\s*=>\s*)/, 1] || return
126
- src_offset = parse_error.location.start_offset
127
- generation[src_offset, parameter_type.length] = "(#{parameter_type})"
128
- end
129
-
130
- # @rbs parse_error: Prism::ParseError
131
- # @rbs generation: Generation
132
- # @rbs root_node: Node
133
- # @rbs memo: Memo
134
- # @rbs return: void
135
- def fix_unexpected_assoc(parse_error, generation, root_node, memo)
136
- def_node = root_node.def_node_at(parse_error.location.start_offset) || return
137
- def_parent_node = def_node.parent
138
- parameters_node, body_node, = def_node.children
139
- return if !def_parent_node || !parameters_node || !body_node
140
-
141
- last_parameter_node = parameters_node.children.max_by(&:offset) || return
142
- last_parameter_offset = last_parameter_node.offset
143
-
144
- right_node = body_node.children.find { _1.offset >= parse_error.location.end_offset } || return
145
- right_offset = right_node.offset
146
- parameter_type = generation[last_parameter_offset...right_offset] || raise(RubyModKit::Error)
147
- parameter_type = parameter_type.sub(/\s*=>\s*\z/, "")
148
- generation[last_parameter_offset, right_offset - last_parameter_offset] = ""
149
- memo.parameter_memo(last_parameter_node).type = parameter_type
150
- end
151
-
152
- # @rbs parse_error: Prism::ParseError
153
- # @rbs generation: Generation
154
- # @rbs root_node: Node
155
- # @rbs memo: Memo
156
- # @rbs return: void
157
- def fix_unexpected_colon(parse_error, generation, root_node, memo)
158
- parent_node = root_node.statements_node_at(parse_error.location.start_offset)&.parent
159
- case parent_node
160
- when Node::DefNode
161
- fix_unexpected_colon_in_def(parse_error, generation, root_node, parent_node, memo)
162
- when Node::DefParentNode
163
- fix_unexpected_colon_in_module(parse_error, generation, parent_node, memo)
164
- end
165
- end
166
-
167
- # @rbs parse_error: Prism::ParseError
168
- # @rbs generation: Generation
169
- # @rbs root_node: Node
170
- # @rbs def_node: Node::DefNode
171
- # @rbs memo: Memo
172
- # @rbs return: void
173
- def fix_unexpected_colon_in_def(parse_error, generation, root_node, def_node, memo)
174
- lparen_loc = def_node.lparen_loc
175
- rparen_loc = def_node.rparen_loc
176
- if !lparen_loc && !rparen_loc
177
- src_offset = def_node.name_loc.end_offset
178
- elsif lparen_loc && rparen_loc && lparen_loc.slice == "(" && rparen_loc.slice == ")"
179
- src_offset = rparen_loc.end_offset
180
- else
181
- return
182
- end
183
- return if generation[src_offset...parse_error.location.start_offset] !~ /\A\s*\z/
184
-
185
- return_type_location = root_node.node_at(parse_error.location.end_offset + 1)&.location || return_type_location
186
- generation[src_offset, return_type_location.end_offset - src_offset] = ""
187
- memo.method_memo(def_node).type = return_type_location.slice
188
- end
189
-
190
- # @rbs parse_error: Prism::ParseError
191
- # @rbs generation: Generation
192
- # @rbs def_parent_node: Node::DefParentNode
193
- # @rbs memo: Memo
194
- # @rbs return: void
195
- def fix_unexpected_colon_in_module(parse_error, generation, def_parent_node, memo)
196
- line = generation.line(parse_error)
197
- line_offset = generation.src_offset(parse_error) || return
198
- attr_patterns = %i[attr_reader reader getter attr_writer writer setter attr_accessor accessor property]
199
- return if line !~ /(\A\s*)(?:(#{attr_patterns.join("|")}) )?@(\w*)\s*:\s*(.*)/
200
-
201
- length = ::Regexp.last_match(0)&.length
202
- indent = ::Regexp.last_match(1)
203
- attr_kind = ::Regexp.last_match(2)
204
- ivar_name = ::Regexp.last_match(3)
205
- type = ::Regexp.last_match(4)
206
- return if !length || !indent || !ivar_name || !type
207
-
208
- ivar_memo = memo.def_parent_memo(def_parent_node).ivar_memo(ivar_name.to_sym)
209
- ivar_memo.type = type
210
- ivar_memo.attr_kind = attr_kind if attr_kind
211
-
212
- generation[line_offset, length] = "#{indent}# @rbs @#{ivar_name}: #{Memo.unify_type(type)}"
213
- end
214
- end
215
- end
216
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # rbs_inline: enabled
4
-
5
- module RubyModKit
6
- class Mission
7
- # The mission for instance variable arguments
8
- class IvarArg < Mission
9
- # @rbs @assignment: String
10
-
11
- attr_reader :assignment #: String
12
-
13
- # @rbs generation: Generation
14
- # @rbs root_node: Node
15
- # @rbs _parse_result: Prism::ParseResult
16
- # @rbs _memo: Memo
17
- # @rbs return: bool
18
- def perform(generation, root_node, _parse_result, _memo)
19
- parameter_node = root_node.parameter_node_at(@offset)
20
- raise RubyModKit::Error unless parameter_node
21
-
22
- def_node = root_node.def_node_at(@offset)
23
- raise RubyModKit::Error, "DefNode not found" unless def_node
24
-
25
- def_body_location = def_node.body_location
26
- end_loc = def_node.end_keyword_loc
27
- if def_body_location
28
- indent = def_body_location.start_column
29
- src_offset = def_body_location.start_offset - indent
30
- elsif end_loc
31
- indent = end_loc.start_column + 2
32
- src_offset = end_loc.start_offset - indent + 2
33
- end
34
- raise RubyModKit::Error if !src_offset || !indent
35
-
36
- name = parameter_node.name
37
- generation[src_offset, 0] = "#{" " * indent}@#{name} = #{name}\n"
38
- true
39
- end
40
- end
41
- end
42
- end
@@ -1,73 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # rbs_inline: enabled
4
-
5
- module RubyModKit
6
- class Mission
7
- # The mission for overload
8
- class Overload < Mission
9
- OVERLOAD_METHOD_MAP = {
10
- "*": "_mul",
11
- }.freeze #: Hash[Symbol, String]
12
-
13
- # @rbs return: void
14
- def initialize
15
- super(0)
16
- end
17
-
18
- # @rbs generation: Generation
19
- # @rbs root_node: Node
20
- # @rbs parse_result: Prism::ParseResult
21
- # @rbs memo: Memo
22
- # @rbs return: bool
23
- def perform(generation, root_node, parse_result, memo)
24
- method_memo_groups = memo.methods_memo.each_value.group_by do |method_memo|
25
- [root_node.def_parent_node_at(method_memo.offset), method_memo.name]
26
- end
27
- method_memo_groups.each_value do |method_memos|
28
- next if method_memos.length <= 1
29
-
30
- first_method_memo = method_memos.first
31
- name = first_method_memo.name
32
- first_def_node = root_node.def_node_at(first_method_memo.offset)
33
- raise RubyModKit::Error unless first_def_node.is_a?(Node::DefNode)
34
- raise RubyModKit::Error unless name.is_a?(Symbol)
35
-
36
- start_line = first_def_node.location.start_line - 1
37
- indent = parse_result.source.lines[start_line][/\A */] || ""
38
- start_line -= 1 while parse_result.source.lines[start_line - 1] =~ /^ *# *@rbs /
39
- src_offset = parse_result.source.offsets[start_line]
40
- script = +""
41
-
42
- method_memos.each do |method_memo|
43
- script << if script.empty?
44
- "# @rbs"
45
- else
46
- "# |"
47
- end
48
- type = method_memo.type
49
- type = "(#{type})" if type.include?(" ")
50
- script << " (#{method_memo.parameters.map(&:type).join(", ")}) -> #{type}\n"
51
- end
52
- script << "def #{name}(*args)\n case args\n"
53
- overload_prefix = +"#{OVERLOAD_METHOD_MAP[name] || name}_"
54
- method_memos.each_with_index do |method_memo, i|
55
- overload_name = "#{overload_prefix}_overload#{i}"
56
- def_node = root_node.def_node_at(method_memo.offset)
57
- raise RubyModKit::Error if !def_node || !def_node.is_a?(Node::DefNode)
58
-
59
- name_loc = def_node.name_loc
60
- generation[name_loc.start_offset, name_loc.length] = overload_name
61
- script << " in [#{method_memo.parameters.map(&:type).join(", ")}]\n"
62
- script << " #{overload_name}(*args)\n"
63
- end
64
- script << " end\nend\n\n"
65
-
66
- script.gsub!(/^(?=.)/, indent)
67
- generation[src_offset, 0] = script
68
- end
69
- true
70
- end
71
- end
72
- end
73
- end