ruby_mod_kit 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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