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.
- checksums.yaml +4 -4
- data/README.md +14 -8
- data/lib/ruby_mod_kit/cli.rb +10 -1
- data/lib/ruby_mod_kit/core_ext/eval.rb +36 -0
- data/lib/ruby_mod_kit/core_ext/load.rb +74 -0
- data/lib/ruby_mod_kit/core_ext.rb +7 -0
- data/lib/ruby_mod_kit/corrector.rb +22 -0
- data/lib/ruby_mod_kit/corrector_manager.rb +68 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb +42 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb +49 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter.rb +27 -0
- data/lib/ruby_mod_kit/feature/overload/overload_mission.rb +80 -0
- data/lib/ruby_mod_kit/feature/overload.rb +19 -0
- data/lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb +49 -0
- data/lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb +90 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rb +41 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rb +31 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rb +43 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rb +38 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rb +32 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline.rb +29 -0
- data/lib/ruby_mod_kit/feature/type/return_value_colon_corrector.rb +45 -0
- data/lib/ruby_mod_kit/feature/type/type_attr_mission.rb +67 -0
- data/lib/ruby_mod_kit/feature/type.rb +31 -0
- data/lib/ruby_mod_kit/feature.rb +24 -0
- data/lib/ruby_mod_kit/generation.rb +60 -22
- data/lib/ruby_mod_kit/memo/def_parent_memo.rb +36 -0
- data/lib/ruby_mod_kit/memo/{ivar.rb → ivar_memo.rb} +17 -3
- data/lib/ruby_mod_kit/memo/{method.rb → method_memo.rb} +7 -7
- data/lib/ruby_mod_kit/memo/offset_memo.rb +1 -1
- data/lib/ruby_mod_kit/memo/overload_memo.rb +46 -0
- data/lib/ruby_mod_kit/memo/{parameter.rb → parameter_memo.rb} +3 -3
- data/lib/ruby_mod_kit/memo.rb +7 -64
- data/lib/ruby_mod_kit/memo_pad.rb +69 -0
- data/lib/ruby_mod_kit/mission.rb +5 -24
- data/lib/ruby_mod_kit/node/base_node.rb +137 -0
- data/lib/ruby_mod_kit/node/call_node.rb +10 -6
- data/lib/ruby_mod_kit/node/def_node.rb +10 -6
- data/lib/ruby_mod_kit/node/def_parent_node.rb +41 -0
- data/lib/ruby_mod_kit/node/parameter_node.rb +12 -8
- data/lib/ruby_mod_kit/node/program_node.rb +2 -2
- data/lib/ruby_mod_kit/node/statements_node.rb +10 -6
- data/lib/ruby_mod_kit/node/symbol_node.rb +10 -6
- data/lib/ruby_mod_kit/node/untyped_node.rb +10 -6
- data/lib/ruby_mod_kit/node/wrap.rb +43 -0
- data/lib/ruby_mod_kit/node.rb +5 -149
- data/lib/ruby_mod_kit/offset_diff.rb +12 -6
- data/lib/ruby_mod_kit/version.rb +1 -1
- data/lib/ruby_mod_kit.rb +43 -11
- data/ruby_mod_kit.gemspec +1 -6
- data/sig/generated/ruby_mod_kit/core_ext/eval.rbs +17 -0
- data/sig/generated/ruby_mod_kit/core_ext/load.rbs +33 -0
- data/sig/generated/ruby_mod_kit/corrector.rbs +16 -0
- data/sig/generated/ruby_mod_kit/corrector_manager.rbs +26 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rbs +20 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rbs +21 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter.rbs +14 -0
- data/sig/generated/ruby_mod_kit/feature/overload/overload_mission.rbs +24 -0
- data/sig/generated/ruby_mod_kit/feature/overload.rbs +11 -0
- data/sig/generated/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rbs +20 -0
- data/sig/generated/ruby_mod_kit/feature/type/parameter_arrow_corrector.rbs +39 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rbs +19 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rbs +19 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rbs +19 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rbs +19 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rbs +19 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline.rbs +13 -0
- data/sig/generated/ruby_mod_kit/feature/type/return_value_colon_corrector.rbs +20 -0
- data/sig/generated/ruby_mod_kit/feature/type/type_attr_mission.rbs +20 -0
- data/sig/generated/ruby_mod_kit/feature/type.rbs +14 -0
- data/sig/generated/ruby_mod_kit/feature.rbs +16 -0
- data/sig/generated/ruby_mod_kit/generation.rbs +25 -10
- data/sig/generated/ruby_mod_kit/memo/def_parent_memo.rbs +24 -0
- data/sig/generated/ruby_mod_kit/memo/{ivar.rbs → ivar_memo.rbs} +15 -3
- data/sig/generated/ruby_mod_kit/memo/{method.rbs → method_memo.rbs} +8 -8
- data/sig/generated/ruby_mod_kit/memo/offset_memo.rbs +1 -1
- data/sig/generated/ruby_mod_kit/memo/overload_memo.rbs +32 -0
- data/sig/generated/ruby_mod_kit/memo/{parameter.rbs → parameter_memo.rbs} +3 -3
- data/sig/generated/ruby_mod_kit/memo.rbs +2 -36
- data/sig/generated/ruby_mod_kit/memo_pad.rbs +46 -0
- data/sig/generated/ruby_mod_kit/mission.rbs +4 -12
- data/sig/generated/ruby_mod_kit/node/base_node.rbs +65 -0
- data/sig/generated/ruby_mod_kit/node/call_node.rbs +11 -6
- data/sig/generated/ruby_mod_kit/node/def_node.rbs +11 -6
- data/sig/generated/ruby_mod_kit/node/def_parent_node.rbs +31 -0
- data/sig/generated/ruby_mod_kit/node/parameter_node.rbs +13 -8
- data/sig/generated/ruby_mod_kit/node/program_node.rbs +2 -2
- data/sig/generated/ruby_mod_kit/node/statements_node.rbs +11 -6
- data/sig/generated/ruby_mod_kit/node/symbol_node.rbs +11 -6
- data/sig/generated/ruby_mod_kit/node/untyped_node.rbs +11 -6
- data/sig/generated/ruby_mod_kit/node/wrap.rbs +12 -0
- data/sig/generated/ruby_mod_kit/node.rbs +2 -58
- data/sig/generated/ruby_mod_kit/offset_diff.rbs +3 -1
- data/sig/generated/ruby_mod_kit.rbs +13 -2
- data/sig/thor.rbs +2 -0
- metadata +63 -43
- data/lib/ruby_mod_kit/memo/class.rb +0 -27
- data/lib/ruby_mod_kit/mission/fix_parse_error.rb +0 -213
- data/lib/ruby_mod_kit/mission/ivar_arg.rb +0 -42
- data/lib/ruby_mod_kit/mission/overload.rb +0 -73
- data/lib/ruby_mod_kit/mission/type_attr.rb +0 -75
- data/lib/ruby_mod_kit/mission/type_parameter.rb +0 -39
- data/lib/ruby_mod_kit/mission/type_return.rb +0 -33
- data/lib/ruby_mod_kit/node/class_node.rb +0 -37
- data/lib/ruby_mod_kit/transpiler.rb +0 -20
- data/sig/generated/examples/user.rbs +0 -60
- data/sig/generated/ruby_mod_kit/memo/class.rbs +0 -20
- data/sig/generated/ruby_mod_kit/memo/located.rbs +0 -14
- data/sig/generated/ruby_mod_kit/memo/parameter_type.rbs +0 -14
- data/sig/generated/ruby_mod_kit/mission/fix_parse_error.rbs +0 -73
- data/sig/generated/ruby_mod_kit/mission/ivar_arg.rbs +0 -19
- data/sig/generated/ruby_mod_kit/mission/overload.rbs +0 -20
- data/sig/generated/ruby_mod_kit/mission/type_attr.rbs +0 -18
- data/sig/generated/ruby_mod_kit/mission/type_parameter.rbs +0 -18
- data/sig/generated/ruby_mod_kit/mission/type_return.rbs +0 -18
- data/sig/generated/ruby_mod_kit/node/class_node.rbs +0 -29
- data/sig/generated/ruby_mod_kit/transpiler.rbs +0 -11
|
@@ -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
|
data/lib/ruby_mod_kit/node.rb
CHANGED
|
@@ -3,162 +3,18 @@
|
|
|
3
3
|
# rbs_inline: enabled
|
|
4
4
|
|
|
5
5
|
module RubyModKit
|
|
6
|
-
# The
|
|
7
|
-
|
|
8
|
-
# @rbs @location: Prism::Location
|
|
9
|
-
# @rbs @children: Array[Node]
|
|
10
|
-
# @rbs @ancestors: Array[Node]
|
|
11
|
-
|
|
12
|
-
attr_reader :location #: Prism::Location
|
|
13
|
-
|
|
14
|
-
# @rbs return: void
|
|
15
|
-
def initialize
|
|
16
|
-
@location = prism_node.location
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# @rbs return: Array[Node]
|
|
20
|
-
def children
|
|
21
|
-
return @children if @children
|
|
22
|
-
|
|
23
|
-
@children = prism_node.child_nodes.compact.map do |prism_child_node|
|
|
24
|
-
wrap(prism_child_node)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# @rbs prism_node: Prism::Node
|
|
29
|
-
# @rbs return: Node
|
|
30
|
-
def wrap(prism_node)
|
|
31
|
-
case prism_node
|
|
32
|
-
when Prism::SymbolNode
|
|
33
|
-
Node::SymbolNode.new(prism_node, parent: self)
|
|
34
|
-
when Prism::ClassNode
|
|
35
|
-
Node::ClassNode.new(prism_node, parent: self)
|
|
36
|
-
when Prism::DefNode
|
|
37
|
-
Node::DefNode.new(prism_node, parent: self)
|
|
38
|
-
when Prism::RequiredParameterNode, Prism::OptionalKeywordParameterNode,
|
|
39
|
-
Prism::OptionalParameterNode, Prism::RequiredKeywordParameterNode,
|
|
40
|
-
Prism::RestParameterNode
|
|
41
|
-
Node::ParameterNode.new(prism_node, parent: self)
|
|
42
|
-
when Prism::StatementsNode
|
|
43
|
-
Node::StatementsNode.new(prism_node, parent: self)
|
|
44
|
-
when Prism::CallNode
|
|
45
|
-
Node::CallNode.new(prism_node, parent: self)
|
|
46
|
-
else
|
|
47
|
-
Node::UntypedNode.new(prism_node, parent: self)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# @rbs return: Array[Node]
|
|
52
|
-
def ancestors
|
|
53
|
-
return @ancestors if @ancestors
|
|
54
|
-
|
|
55
|
-
parent = @parent
|
|
56
|
-
@ancestors = if parent
|
|
57
|
-
[parent] + parent.ancestors
|
|
58
|
-
else
|
|
59
|
-
[]
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# @rbs return: Symbol
|
|
64
|
-
def name
|
|
65
|
-
raise(RubyModKit::Error, "Expected ParameterNode but #{self.class}:#{prism_node.inspect}")
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# @rbs offset: Integer
|
|
69
|
-
# @rbs return: Node | nil
|
|
70
|
-
def node_at(offset)
|
|
71
|
-
return nil unless include?(offset)
|
|
72
|
-
|
|
73
|
-
child = children.find { _1.include?(offset) }
|
|
74
|
-
child&.node_at(offset) || self
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# @rbs offset: Integer
|
|
78
|
-
# @rbs return: Node::StatementsNode | nil
|
|
79
|
-
def statements_node_at(offset)
|
|
80
|
-
node = node_at(offset) || return
|
|
81
|
-
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::StatementsNode) }
|
|
82
|
-
nil
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# @rbs offset: Integer
|
|
86
|
-
# @rbs return: Node::DefNode | nil
|
|
87
|
-
def def_node_at(offset)
|
|
88
|
-
node = node_at(offset) || return
|
|
89
|
-
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::DefNode) }
|
|
90
|
-
nil
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# @rbs offset: Integer
|
|
94
|
-
# @rbs return: Node::ParameterNode | nil
|
|
95
|
-
def parameter_node_at(offset)
|
|
96
|
-
node = node_at(offset) || return
|
|
97
|
-
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::ParameterNode) }
|
|
98
|
-
nil
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# @rbs offset: Integer
|
|
102
|
-
# @rbs return: Node::ClassNode | nil
|
|
103
|
-
def class_node_at(offset)
|
|
104
|
-
node = node_at(offset) || return
|
|
105
|
-
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::ClassNode) }
|
|
106
|
-
nil
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# @rbs offset: Integer
|
|
110
|
-
# @rbs return: bool
|
|
111
|
-
def include?(offset)
|
|
112
|
-
self.offset <= offset && offset <= prism_node.location.end_offset
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
# @rbs return: Prism::Node & Prism::_Node
|
|
116
|
-
def prism_node
|
|
117
|
-
raise RubyModKit::Error
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
# @rbs return: Integer
|
|
121
|
-
def offset
|
|
122
|
-
location.start_offset
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
# @rbs return: String
|
|
126
|
-
def inspect
|
|
127
|
-
str = +"#<#{self.class} "
|
|
128
|
-
first = true
|
|
129
|
-
instance_variables.each do |ivar_name|
|
|
130
|
-
case ivar_name
|
|
131
|
-
when :@children, :@ancestors, :@parent
|
|
132
|
-
next
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
if first
|
|
136
|
-
first = false
|
|
137
|
-
else
|
|
138
|
-
str << ", "
|
|
139
|
-
end
|
|
140
|
-
str << "#{ivar_name}="
|
|
141
|
-
value = instance_variable_get(ivar_name)
|
|
142
|
-
str << (
|
|
143
|
-
case value
|
|
144
|
-
when Prism::Node
|
|
145
|
-
"#<#{value.class} location=#{value.location.inspect}>"
|
|
146
|
-
else
|
|
147
|
-
value.inspect
|
|
148
|
-
end
|
|
149
|
-
)
|
|
150
|
-
end
|
|
151
|
-
str << ">"
|
|
152
|
-
str
|
|
153
|
-
end
|
|
6
|
+
# The namespace of transpile node.
|
|
7
|
+
module Node
|
|
154
8
|
end
|
|
155
9
|
end
|
|
156
10
|
|
|
11
|
+
require_relative "node/base_node"
|
|
157
12
|
require_relative "node/symbol_node"
|
|
158
|
-
require_relative "node/
|
|
13
|
+
require_relative "node/def_parent_node"
|
|
159
14
|
require_relative "node/call_node"
|
|
160
15
|
require_relative "node/def_node"
|
|
161
16
|
require_relative "node/parameter_node"
|
|
162
17
|
require_relative "node/program_node"
|
|
163
18
|
require_relative "node/statements_node"
|
|
164
19
|
require_relative "node/untyped_node"
|
|
20
|
+
require_relative "node/wrap"
|
|
@@ -2,23 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
# rbs_inline: enabled
|
|
4
4
|
|
|
5
|
-
require "sorted_set"
|
|
6
|
-
|
|
7
5
|
module RubyModKit
|
|
8
6
|
# The class of offset differences.
|
|
9
7
|
class OffsetDiff
|
|
10
|
-
# @rbs @diffs:
|
|
8
|
+
# @rbs @diffs: Hash[Integer, Integer]
|
|
9
|
+
# @rbs @offsets: Array[Integer]
|
|
11
10
|
|
|
12
11
|
# @rbs return: void
|
|
13
12
|
def initialize
|
|
14
|
-
@diffs =
|
|
13
|
+
@diffs = {}
|
|
14
|
+
@offsets = []
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
# @rbs src_offset: Integer
|
|
18
18
|
# @rbs return: Integer
|
|
19
19
|
def [](src_offset)
|
|
20
20
|
dst_offset = src_offset
|
|
21
|
-
@
|
|
21
|
+
@offsets.each do |offset|
|
|
22
|
+
diff = @diffs[offset]
|
|
22
23
|
break if offset > src_offset
|
|
23
24
|
break if offset == src_offset && diff < 0
|
|
24
25
|
|
|
@@ -31,7 +32,12 @@ module RubyModKit
|
|
|
31
32
|
# @rbs new_diff: Integer
|
|
32
33
|
# @rbs return: void
|
|
33
34
|
def insert(src_offset, new_diff)
|
|
34
|
-
@diffs
|
|
35
|
+
if @diffs[src_offset]
|
|
36
|
+
@diffs[src_offset] += new_diff
|
|
37
|
+
else
|
|
38
|
+
@diffs[src_offset] = new_diff
|
|
39
|
+
@offsets.insert(@offsets.bsearch_index { _1 > src_offset } || -1, src_offset)
|
|
40
|
+
end
|
|
35
41
|
end
|
|
36
42
|
end
|
|
37
43
|
end
|
data/lib/ruby_mod_kit/version.rb
CHANGED
data/lib/ruby_mod_kit.rb
CHANGED
|
@@ -13,26 +13,36 @@ module RubyModKit
|
|
|
13
13
|
class << self
|
|
14
14
|
# @rbs file: String
|
|
15
15
|
# @rbs *args: String
|
|
16
|
+
# @rbs output: String | nil
|
|
16
17
|
# @rbs return: void
|
|
17
|
-
def execute_file(file, *args)
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
def execute_file(file, *args, output: nil)
|
|
19
|
+
rb_script = transpile_file(file, output: output)
|
|
20
|
+
if output
|
|
21
|
+
execute_rb_file(output, *args)
|
|
22
|
+
else
|
|
23
|
+
execute_rb(rb_script, *args)
|
|
24
|
+
end
|
|
20
25
|
end
|
|
21
26
|
|
|
22
27
|
# @rbs file: String
|
|
28
|
+
# @rbs output: String | IO | nil
|
|
23
29
|
# @rbs return: String
|
|
24
|
-
def transpile_file(file)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
def transpile_file(file, output: nil)
|
|
31
|
+
rb_script = transpile(File.read(file), filename: file)
|
|
32
|
+
case output
|
|
33
|
+
when IO
|
|
34
|
+
output.write(rb_script)
|
|
35
|
+
when String
|
|
36
|
+
File.write(output, rb_script)
|
|
37
|
+
end
|
|
38
|
+
rb_script
|
|
29
39
|
end
|
|
30
40
|
|
|
31
41
|
# @rbs src: String
|
|
32
42
|
# @rbs filename: String | nil
|
|
33
43
|
# @rbs return: String
|
|
34
44
|
def transpile(src, filename: nil)
|
|
35
|
-
|
|
45
|
+
Generation.resolve(src, filename: filename).script
|
|
36
46
|
end
|
|
37
47
|
|
|
38
48
|
# @rbs file: String
|
|
@@ -47,13 +57,35 @@ module RubyModKit
|
|
|
47
57
|
def rb_path(path)
|
|
48
58
|
path.sub(/(?:\.rbm)?$/, ".rb")
|
|
49
59
|
end
|
|
60
|
+
|
|
61
|
+
# @rbs rb_script: String
|
|
62
|
+
# @rbs *args: String
|
|
63
|
+
# @rbs return: void
|
|
64
|
+
def execute_rb(rb_script, *args)
|
|
65
|
+
ARGV.replace(args)
|
|
66
|
+
eval(rb_script, TOPLEVEL_BINDING) # rubocop:disable Security/Eval
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# @rbs type: String
|
|
70
|
+
# @rbs return: String
|
|
71
|
+
def unify_type(type)
|
|
72
|
+
type[/\A\(([^()]*)\)\z/, 1] || type
|
|
73
|
+
end
|
|
50
74
|
end
|
|
51
75
|
end
|
|
52
76
|
|
|
53
77
|
require_relative "ruby_mod_kit/version"
|
|
54
|
-
require_relative "ruby_mod_kit/
|
|
78
|
+
require_relative "ruby_mod_kit/corrector"
|
|
79
|
+
require_relative "ruby_mod_kit/corrector_manager"
|
|
80
|
+
require_relative "ruby_mod_kit/feature"
|
|
55
81
|
require_relative "ruby_mod_kit/generation"
|
|
56
82
|
require_relative "ruby_mod_kit/memo"
|
|
57
|
-
require_relative "ruby_mod_kit/
|
|
83
|
+
require_relative "ruby_mod_kit/memo_pad"
|
|
58
84
|
require_relative "ruby_mod_kit/mission"
|
|
85
|
+
require_relative "ruby_mod_kit/node"
|
|
59
86
|
require_relative "ruby_mod_kit/offset_diff"
|
|
87
|
+
|
|
88
|
+
require_relative "ruby_mod_kit/feature/instance_variable_parameter"
|
|
89
|
+
require_relative "ruby_mod_kit/feature/overload"
|
|
90
|
+
require_relative "ruby_mod_kit/feature/type"
|
|
91
|
+
require_relative "ruby_mod_kit/feature/type/rbs_inline"
|
data/ruby_mod_kit.gemspec
CHANGED
|
@@ -4,14 +4,10 @@ require_relative "lib/ruby_mod_kit/version"
|
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = "ruby_mod_kit"
|
|
7
|
+
spec.version = RubyModKit::VERSION
|
|
7
8
|
spec.authors = ["wanabe"]
|
|
8
9
|
spec.email = ["s.wanabe@gmail.com"]
|
|
9
10
|
|
|
10
|
-
version = RubyModKit::VERSION
|
|
11
|
-
tag_version = `git tag --points-at HEAD`.chomp.sub("v", "")
|
|
12
|
-
version += "-#{`git rev-parse --short HEAD`}" if version != tag_version
|
|
13
|
-
spec.version = version
|
|
14
|
-
|
|
15
11
|
spec.summary = "ruby_mod_kit"
|
|
16
12
|
spec.description = "ruby_mod_kit"
|
|
17
13
|
spec.homepage = "https://github.com/wanabe/ruby_mod_kit"
|
|
@@ -43,7 +39,6 @@ Gem::Specification.new do |spec|
|
|
|
43
39
|
|
|
44
40
|
# Uncomment to register a new dependency of your gem
|
|
45
41
|
spec.add_dependency "prism", "~> 1.0"
|
|
46
|
-
spec.add_dependency "sorted_set", "~> 1.0"
|
|
47
42
|
spec.add_dependency "thor", "~> 1.3"
|
|
48
43
|
|
|
49
44
|
# For more information and examples about making a new gem, check out our
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/core_ext/eval.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
# Define RubyMotKit.eval
|
|
4
|
+
module RubyModKit
|
|
5
|
+
module CoreExt
|
|
6
|
+
# the extension for eval
|
|
7
|
+
module Eval
|
|
8
|
+
# @rbs expr: String
|
|
9
|
+
# @rbs *rest: Object
|
|
10
|
+
# @rbs transpile: bool
|
|
11
|
+
# @rbs return: Object
|
|
12
|
+
def self?.eval: (String expr, *Object rest, ?transpile: bool) -> Object
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
include CoreExt::Eval
|
|
17
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/core_ext/load.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
# Define RubyMotKit.load/require
|
|
4
|
+
module RubyModKit
|
|
5
|
+
module CoreExt
|
|
6
|
+
# the extension for load/require
|
|
7
|
+
module Load
|
|
8
|
+
LOADABLE_EXTS: Array[String]
|
|
9
|
+
|
|
10
|
+
# @rbs path: String
|
|
11
|
+
# @rbs wrap: bool
|
|
12
|
+
# @rbs return: bool
|
|
13
|
+
def self?.load: (String path, ?bool wrap) -> bool
|
|
14
|
+
|
|
15
|
+
# @rbs path: String
|
|
16
|
+
# @rbs return: bool
|
|
17
|
+
def self?.require: (String path) -> bool
|
|
18
|
+
|
|
19
|
+
# @rbs return: Array[String]
|
|
20
|
+
def self.loaded_features: () -> Array[String]
|
|
21
|
+
|
|
22
|
+
# @rbs return: Array[String]
|
|
23
|
+
def self.load_path: () -> Array[String]
|
|
24
|
+
|
|
25
|
+
# @rbs path: String
|
|
26
|
+
# @rbs expanded: bool
|
|
27
|
+
# @rbs return: String | nil
|
|
28
|
+
def self.require_path: (String path, ?expanded: bool) -> (String | nil)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
include CoreExt::Load
|
|
33
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/corrector.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
# the base class of corrector
|
|
5
|
+
class Corrector
|
|
6
|
+
# @rbs return: Array[Symbol]
|
|
7
|
+
def correctable_error_types: () -> Array[Symbol]
|
|
8
|
+
|
|
9
|
+
# @rbs _parse_error: Prism::ParseError
|
|
10
|
+
# @rbs _generation: Generation
|
|
11
|
+
# @rbs _root_node: Node::ProgramNode
|
|
12
|
+
# @rbs _memo_pad: MemoPad
|
|
13
|
+
# @rbs return: void
|
|
14
|
+
def correct: (untyped _parse_error, untyped _generation, untyped _root_node, untyped _memo_pad) -> void
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/corrector_manager.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
# the class to manege parse error correctors
|
|
5
|
+
class CorrectorManager
|
|
6
|
+
@previous_error_messages: Array[String]
|
|
7
|
+
|
|
8
|
+
@correctors_error_map: Hash[Symbol, Array[Corrector]]
|
|
9
|
+
|
|
10
|
+
# @rbs features: Array[Feature]
|
|
11
|
+
# @rbs return: void
|
|
12
|
+
def initialize: (Array[Feature] features) -> void
|
|
13
|
+
|
|
14
|
+
# @rbs generation: Generation
|
|
15
|
+
# @rbs root_node: Node::ProgramNode
|
|
16
|
+
# @rbs parse_result: Prism::ParseResult
|
|
17
|
+
# @rbs memo_pad: MemoPad
|
|
18
|
+
# @rbs return: bool
|
|
19
|
+
def perform: (Generation generation, Node::ProgramNode root_node, Prism::ParseResult parse_result, MemoPad memo_pad) -> bool
|
|
20
|
+
|
|
21
|
+
# @rbs generation: Generation
|
|
22
|
+
# @rbs parse_result: Prism::ParseResult
|
|
23
|
+
# @rbs return: void
|
|
24
|
+
def check_prev_errors: (Generation generation, Prism::ParseResult parse_result) -> void
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
class Feature
|
|
5
|
+
class InstanceVariableParameter
|
|
6
|
+
# the class to correct `def foo(@bar) ...` -> `def foo(bar) ...`
|
|
7
|
+
class InstanceVariableParameterCorrector < Corrector
|
|
8
|
+
# @rbs return: Array[Symbol]
|
|
9
|
+
def correctable_error_types: () -> Array[Symbol]
|
|
10
|
+
|
|
11
|
+
# @rbs parse_error: Prism::ParseError
|
|
12
|
+
# @rbs generation: Generation
|
|
13
|
+
# @rbs root_node: Node::ProgramNode
|
|
14
|
+
# @rbs memo_pad: MemoPad
|
|
15
|
+
# @rbs return: void
|
|
16
|
+
def correct: (Prism::ParseError parse_error, Generation generation, Node::ProgramNode root_node, MemoPad memo_pad) -> void
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
class Feature
|
|
5
|
+
class InstanceVariableParameter
|
|
6
|
+
# The mission for instance variable arguments
|
|
7
|
+
class InstanceVariableParameterMission < Mission
|
|
8
|
+
@assignment: String
|
|
9
|
+
|
|
10
|
+
attr_reader assignment: String
|
|
11
|
+
|
|
12
|
+
# @rbs generation: Generation
|
|
13
|
+
# @rbs root_node: Node::ProgramNode
|
|
14
|
+
# @rbs _parse_result: Prism::ParseResult
|
|
15
|
+
# @rbs memo_pad: MemoPad
|
|
16
|
+
# @rbs return: bool
|
|
17
|
+
def perform: (Generation generation, Node::ProgramNode root_node, untyped _parse_result, MemoPad memo_pad) -> bool
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/feature/instance_variable_parameter.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
class Feature
|
|
5
|
+
# namespace for instance_variable parameter feature
|
|
6
|
+
class InstanceVariableParameter < Feature
|
|
7
|
+
# @rbs return: Array[Corrector]
|
|
8
|
+
def create_correctors: () -> Array[Corrector]
|
|
9
|
+
|
|
10
|
+
# @rbs return: Array[Mission]
|
|
11
|
+
def create_missions: () -> Array[Mission]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/feature/overload/overload_mission.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
class Feature
|
|
5
|
+
class Overload
|
|
6
|
+
# The mission for overload
|
|
7
|
+
class OverloadMission < Mission
|
|
8
|
+
@modified: bool
|
|
9
|
+
|
|
10
|
+
OVERLOAD_METHOD_MAP: Hash[Symbol, String]
|
|
11
|
+
|
|
12
|
+
# @rbs return: void
|
|
13
|
+
def initialize: () -> void
|
|
14
|
+
|
|
15
|
+
# @rbs generation: Generation
|
|
16
|
+
# @rbs root_node: Node::ProgramNode
|
|
17
|
+
# @rbs parse_result: Prism::ParseResult
|
|
18
|
+
# @rbs memo_pad: MemoPad
|
|
19
|
+
# @rbs return: bool
|
|
20
|
+
def perform: (Generation generation, Node::ProgramNode root_node, Prism::ParseResult parse_result, MemoPad memo_pad) -> bool
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/feature/overload.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
class Feature
|
|
5
|
+
# namespace for overload feature
|
|
6
|
+
class Overload < Feature
|
|
7
|
+
# @rbs return: Array[Mission]
|
|
8
|
+
def create_missions: () -> Array[Mission]
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
class Feature
|
|
5
|
+
class Type
|
|
6
|
+
# the class to correct `@var: Type` -> `# @rbs @var: Type`
|
|
7
|
+
class InstanceVariableColonCorrector < Corrector
|
|
8
|
+
# @rbs return: Array[Symbol]
|
|
9
|
+
def correctable_error_types: () -> Array[Symbol]
|
|
10
|
+
|
|
11
|
+
# @rbs parse_error: Prism::ParseError
|
|
12
|
+
# @rbs generation: Generation
|
|
13
|
+
# @rbs root_node: Node::ProgramNode
|
|
14
|
+
# @rbs memo_pad: MemoPad
|
|
15
|
+
# @rbs return: void
|
|
16
|
+
def correct: (Prism::ParseError parse_error, Generation generation, Node::ProgramNode root_node, MemoPad memo_pad) -> void
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
class Feature
|
|
5
|
+
class Type
|
|
6
|
+
# the class to correct `def foo(Bar => bar, *Buz => buz)` -> `def foo(bar, *buz)`
|
|
7
|
+
class ParameterArrowCorrector < Corrector
|
|
8
|
+
# @rbs return: Array[Symbol]
|
|
9
|
+
def correctable_error_types: () -> Array[Symbol]
|
|
10
|
+
|
|
11
|
+
# @rbs parse_error: Prism::ParseError
|
|
12
|
+
# @rbs generation: Generation
|
|
13
|
+
# @rbs root_node: Node::ProgramNode
|
|
14
|
+
# @rbs memo_pad: MemoPad
|
|
15
|
+
# @rbs return: void
|
|
16
|
+
def correct: (Prism::ParseError parse_error, Generation generation, Node::ProgramNode root_node, MemoPad memo_pad) -> void
|
|
17
|
+
|
|
18
|
+
# @rbs parse_error: Prism::ParseError
|
|
19
|
+
# @rbs generation: Generation
|
|
20
|
+
# @rbs root_node: Node::ProgramNode
|
|
21
|
+
# @rbs memo_pad: MemoPad
|
|
22
|
+
# @rbs return: void
|
|
23
|
+
def remove_arrow_before_parameter: (Prism::ParseError parse_error, Generation generation, Node::ProgramNode root_node, MemoPad memo_pad) -> void
|
|
24
|
+
|
|
25
|
+
# @rbs parse_error: Prism::ParseError
|
|
26
|
+
# @rbs generation: Generation
|
|
27
|
+
# @rbs root_node: Node::ProgramNode
|
|
28
|
+
# @rbs memo_pad: MemoPad
|
|
29
|
+
# @rbs return: void
|
|
30
|
+
def remove_arrow_after_quailifier: (Prism::ParseError parse_error, Generation generation, Node::ProgramNode root_node, MemoPad memo_pad) -> void
|
|
31
|
+
|
|
32
|
+
# @rbs parse_error: Prism::ParseError
|
|
33
|
+
# @rbs generation: Generation
|
|
34
|
+
# @rbs return: void
|
|
35
|
+
def wrap_parameter_type_for_next_parse: (Prism::ParseError parse_error, Generation generation) -> void
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
class Feature
|
|
5
|
+
class Type
|
|
6
|
+
class RbsInline
|
|
7
|
+
# The mission for parameter types
|
|
8
|
+
class TypeAttrMission < Mission
|
|
9
|
+
# @rbs generation: Generation
|
|
10
|
+
# @rbs root_node: Node::ProgramNode
|
|
11
|
+
# @rbs _parse_result: Prism::ParseResult
|
|
12
|
+
# @rbs memo_pad: MemoPad
|
|
13
|
+
# @rbs return: bool
|
|
14
|
+
def perform: (Generation generation, Node::ProgramNode root_node, untyped _parse_result, MemoPad memo_pad) -> bool
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Generated from lib/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module RubyModKit
|
|
4
|
+
class Feature
|
|
5
|
+
class Type
|
|
6
|
+
class RbsInline
|
|
7
|
+
# The mission for instance variable types
|
|
8
|
+
class TypeInstanceVariableMission < Mission
|
|
9
|
+
# @rbs generation: Generation
|
|
10
|
+
# @rbs root_node: Node::ProgramNode
|
|
11
|
+
# @rbs parse_result: Prism::ParseResult
|
|
12
|
+
# @rbs memo_pad: MemoPad
|
|
13
|
+
# @rbs return: bool
|
|
14
|
+
def perform: (Generation generation, Node::ProgramNode root_node, Prism::ParseResult parse_result, MemoPad memo_pad) -> bool
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|