ruby_mod_kit 0.0.4 → 0.0.6
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/.ruby_mod_kit.yml +1 -0
- data/.yardopts +3 -0
- data/README.md +89 -0
- data/examples/user.rb +4 -16
- data/lib/ruby_mod_kit/cli.rb +5 -0
- data/lib/ruby_mod_kit/config.rb +6 -1
- data/lib/ruby_mod_kit/core_ext/eval.rb +13 -10
- data/lib/ruby_mod_kit/core_ext/load.rb +10 -0
- data/lib/ruby_mod_kit/corrector.rb +8 -0
- data/lib/ruby_mod_kit/corrector_manager.rb +16 -6
- data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb +4 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb +3 -1
- data/lib/ruby_mod_kit/feature/instance_variable_parameter.rb +2 -0
- data/lib/ruby_mod_kit/feature/overload/overload_mission.rb +44 -13
- data/lib/ruby_mod_kit/feature/overload.rb +1 -0
- data/lib/ruby_mod_kit/feature/type/check/arguments/add_arguments_checker_mission.rb +58 -0
- data/lib/ruby_mod_kit/feature/type/check/arguments.rb +25 -0
- data/lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb +13 -4
- data/lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb +41 -5
- data/lib/ruby_mod_kit/feature/type/rbs_inline/add_magic_comment_mission.rb +3 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rb +5 -2
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rb +3 -2
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rb +7 -4
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rb +3 -1
- data/lib/ruby_mod_kit/feature/type/rbs_inline.rb +1 -0
- data/lib/ruby_mod_kit/feature/type/return_value_colon_corrector.rb +5 -0
- data/lib/ruby_mod_kit/feature/type/type_attr_mission.rb +6 -9
- data/lib/ruby_mod_kit/feature/type/yard/type_parameter_mission.rb +37 -0
- data/lib/ruby_mod_kit/feature/type/yard/type_return_mission.rb +32 -0
- data/lib/ruby_mod_kit/feature/type/yard.rb +34 -0
- data/lib/ruby_mod_kit/feature/type.rb +2 -0
- data/lib/ruby_mod_kit/feature.rb +2 -0
- data/lib/ruby_mod_kit/generation.rb +67 -49
- data/lib/ruby_mod_kit/memo/def_parent_memo.rb +6 -0
- data/lib/ruby_mod_kit/memo/ivar_memo.rb +18 -8
- data/lib/ruby_mod_kit/memo/method_memo.rb +8 -1
- data/lib/ruby_mod_kit/memo/offset_memo.rb +4 -0
- data/lib/ruby_mod_kit/memo/overload_memo.rb +9 -1
- data/lib/ruby_mod_kit/memo/parameter_memo.rb +10 -3
- data/lib/ruby_mod_kit/memo_pad.rb +34 -0
- data/lib/ruby_mod_kit/mission.rb +2 -4
- data/lib/ruby_mod_kit/node/base_node.rb +43 -3
- data/lib/ruby_mod_kit/node/begin_node.rb +35 -0
- data/lib/ruby_mod_kit/node/call_node.rb +4 -0
- data/lib/ruby_mod_kit/node/def_node.rb +36 -0
- data/lib/ruby_mod_kit/node/def_parent_node.rb +10 -2
- data/lib/ruby_mod_kit/node/parameter_node.rb +7 -2
- data/lib/ruby_mod_kit/node/program_node.rb +3 -0
- data/lib/ruby_mod_kit/node/statements_node.rb +4 -0
- data/lib/ruby_mod_kit/node/symbol_node.rb +7 -2
- data/lib/ruby_mod_kit/node/untyped_node.rb +4 -0
- data/lib/ruby_mod_kit/node/wrap.rb +7 -1
- data/lib/ruby_mod_kit/node.rb +1 -0
- data/lib/ruby_mod_kit/offset_diff.rb +6 -0
- data/lib/ruby_mod_kit/version.rb +1 -1
- data/lib/ruby_mod_kit.rb +29 -8
- data/sig/generated/ruby_mod_kit/cli.rbs +5 -0
- data/sig/generated/ruby_mod_kit/config.rbs +7 -2
- data/sig/generated/ruby_mod_kit/core_ext/eval.rbs +11 -2
- data/sig/generated/ruby_mod_kit/core_ext/load.rbs +10 -0
- data/sig/generated/ruby_mod_kit/corrector.rbs +8 -0
- data/sig/generated/ruby_mod_kit/corrector_manager.rbs +7 -1
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rbs +4 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/instance_variable_parameter.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/overload/overload_mission.rbs +3 -0
- data/sig/generated/ruby_mod_kit/feature/overload.rbs +1 -0
- data/sig/generated/ruby_mod_kit/feature/type/check/arguments/add_arguments_checker_mission.rbs +18 -0
- data/sig/generated/ruby_mod_kit/feature/type/check/arguments.rbs +17 -0
- data/sig/generated/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rbs +4 -0
- data/sig/generated/ruby_mod_kit/feature/type/parameter_arrow_corrector.rbs +19 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/add_magic_comment_mission.rbs +3 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_attr_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_instance_variable_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/rbs_inline.rbs +1 -0
- data/sig/generated/ruby_mod_kit/feature/type/return_value_colon_corrector.rbs +4 -0
- data/sig/generated/ruby_mod_kit/feature/type/type_attr_mission.rbs +3 -0
- data/sig/generated/ruby_mod_kit/feature/type/yard/type_parameter_mission.rbs +18 -0
- data/sig/generated/ruby_mod_kit/feature/type/yard/type_return_mission.rbs +18 -0
- data/sig/generated/ruby_mod_kit/feature/type/yard.rbs +20 -0
- data/sig/generated/ruby_mod_kit/feature/type.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature.rbs +2 -0
- data/sig/generated/ruby_mod_kit/generation.rbs +46 -25
- data/sig/generated/ruby_mod_kit/memo/def_parent_memo.rbs +6 -0
- data/sig/generated/ruby_mod_kit/memo/ivar_memo.rbs +20 -8
- data/sig/generated/ruby_mod_kit/memo/method_memo.rbs +8 -1
- data/sig/generated/ruby_mod_kit/memo/offset_memo.rbs +4 -0
- data/sig/generated/ruby_mod_kit/memo/overload_memo.rbs +8 -0
- data/sig/generated/ruby_mod_kit/memo/parameter_memo.rbs +12 -3
- data/sig/generated/ruby_mod_kit/memo_pad.rbs +23 -0
- data/sig/generated/ruby_mod_kit/mission.rbs +2 -4
- data/sig/generated/ruby_mod_kit/node/base_node.rbs +36 -3
- data/sig/generated/ruby_mod_kit/node/begin_node.rbs +30 -0
- data/sig/generated/ruby_mod_kit/node/call_node.rbs +4 -0
- data/sig/generated/ruby_mod_kit/node/def_node.rbs +24 -0
- data/sig/generated/ruby_mod_kit/node/def_parent_node.rbs +11 -3
- data/sig/generated/ruby_mod_kit/node/parameter_node.rbs +6 -1
- data/sig/generated/ruby_mod_kit/node/program_node.rbs +3 -0
- data/sig/generated/ruby_mod_kit/node/statements_node.rbs +4 -0
- data/sig/generated/ruby_mod_kit/node/symbol_node.rbs +8 -3
- data/sig/generated/ruby_mod_kit/node/untyped_node.rbs +4 -0
- data/sig/generated/ruby_mod_kit/node/wrap.rbs +4 -0
- data/sig/generated/ruby_mod_kit/offset_diff.rbs +6 -0
- data/sig/generated/ruby_mod_kit.rbs +31 -6
- metadata +15 -2
|
@@ -12,6 +12,8 @@ module RubyModKit
|
|
|
12
12
|
|
|
13
13
|
# @rbs def_parent_node: Node::DefParentNode
|
|
14
14
|
# @rbs return: void
|
|
15
|
+
# @param def_parent_node [Node::DefParentNode]
|
|
16
|
+
# @return [void]
|
|
15
17
|
def initialize(def_parent_node)
|
|
16
18
|
@ivars_memo = {}
|
|
17
19
|
super(def_parent_node.offset)
|
|
@@ -19,12 +21,16 @@ module RubyModKit
|
|
|
19
21
|
|
|
20
22
|
# @rbs name: Symbol
|
|
21
23
|
# @rbs return: Memo::IvarMemo
|
|
24
|
+
# @param name [Symbol]
|
|
25
|
+
# @return [Memo::IvarMemo]
|
|
22
26
|
def ivar_memo(name)
|
|
23
27
|
@ivars_memo[name] ||= Memo::IvarMemo.new(name)
|
|
24
28
|
end
|
|
25
29
|
|
|
26
30
|
# @rbs offset_diff: OffsetDiff
|
|
27
31
|
# @rbs return: void
|
|
32
|
+
# @param offset_diff [OffsetDiff]
|
|
33
|
+
# @return [void]
|
|
28
34
|
def succ(offset_diff)
|
|
29
35
|
@ivars_memo.each_value do |ivar_memo|
|
|
30
36
|
ivar_memo.succ(offset_diff)
|
|
@@ -6,21 +6,25 @@ module RubyModKit
|
|
|
6
6
|
module Memo
|
|
7
7
|
# The memo for parameter type
|
|
8
8
|
class IvarMemo
|
|
9
|
-
# @rbs @type:
|
|
10
|
-
# @rbs @attr_kind:
|
|
11
|
-
# @rbs @offset:
|
|
9
|
+
# @rbs @type: String | nil
|
|
10
|
+
# @rbs @attr_kind: Symbol | nil
|
|
11
|
+
# @rbs @offset: Integer | nil
|
|
12
12
|
# @rbs @indent: String
|
|
13
13
|
# @rbs @name: Symbol
|
|
14
|
-
# @rbs @visibility:
|
|
14
|
+
# @rbs @visibility: Symbol | nil
|
|
15
|
+
# @rbs @separator: String
|
|
15
16
|
|
|
16
|
-
attr_reader :type #:
|
|
17
|
-
attr_reader :attr_kind #:
|
|
18
|
-
attr_accessor :offset #:
|
|
17
|
+
attr_reader :type #: String | nil
|
|
18
|
+
attr_reader :attr_kind #: Symbol | nil
|
|
19
|
+
attr_accessor :offset #: Integer | nil
|
|
19
20
|
attr_accessor :indent #: String
|
|
20
|
-
attr_accessor :visibility #:
|
|
21
|
+
attr_accessor :visibility #: Symbol | nil
|
|
22
|
+
attr_accessor :separator #: String
|
|
21
23
|
|
|
22
24
|
# @rbs name: Symbol
|
|
23
25
|
# @rbs return: void
|
|
26
|
+
# @param name [Symbol]
|
|
27
|
+
# @return [void]
|
|
24
28
|
def initialize(name)
|
|
25
29
|
@name = name
|
|
26
30
|
@indent = ""
|
|
@@ -28,12 +32,16 @@ module RubyModKit
|
|
|
28
32
|
|
|
29
33
|
# @rbs type: String
|
|
30
34
|
# @rbs return: void
|
|
35
|
+
# @param type [String]
|
|
36
|
+
# @return [void]
|
|
31
37
|
def type=(type)
|
|
32
38
|
@type = RubyModKit.unify_type(type)
|
|
33
39
|
end
|
|
34
40
|
|
|
35
41
|
# @rbs kind: Symbol | String
|
|
36
42
|
# @rbs return: void
|
|
43
|
+
# @param kind [Symbol, String]
|
|
44
|
+
# @return [void]
|
|
37
45
|
def attr_kind=(kind)
|
|
38
46
|
case kind.to_sym
|
|
39
47
|
when :attr_reader, :reader, :getter
|
|
@@ -47,6 +55,8 @@ module RubyModKit
|
|
|
47
55
|
|
|
48
56
|
# @rbs offset_diff: OffsetDiff
|
|
49
57
|
# @rbs return: void
|
|
58
|
+
# @param offset_diff [OffsetDiff]
|
|
59
|
+
# @return [void]
|
|
50
60
|
def succ(offset_diff)
|
|
51
61
|
offset = @offset
|
|
52
62
|
return unless offset
|
|
@@ -14,10 +14,12 @@ module RubyModKit
|
|
|
14
14
|
attr_reader :parameters #: Set[Memo::ParameterMemo]
|
|
15
15
|
attr_reader :type #: String
|
|
16
16
|
|
|
17
|
-
UNTYPED = "untyped"
|
|
17
|
+
UNTYPED = "untyped" #: String
|
|
18
18
|
|
|
19
19
|
# @rbs node: Node::DefNode
|
|
20
20
|
# @rbs return: void
|
|
21
|
+
# @param node [Node::DefNode]
|
|
22
|
+
# @return [void]
|
|
21
23
|
def initialize(node)
|
|
22
24
|
@type = UNTYPED
|
|
23
25
|
@parameters = Set.new
|
|
@@ -29,18 +31,23 @@ module RubyModKit
|
|
|
29
31
|
|
|
30
32
|
# @rbs parameter_memo: Memo::ParameterMemo
|
|
31
33
|
# @rbs return: Memo::ParameterMemo
|
|
34
|
+
# @param parameter_memo [Memo::ParameterMemo]
|
|
35
|
+
# @return [Memo::ParameterMemo]
|
|
32
36
|
def add_parameter(parameter_memo)
|
|
33
37
|
@parameters << parameter_memo
|
|
34
38
|
parameter_memo
|
|
35
39
|
end
|
|
36
40
|
|
|
37
41
|
# @rbs return: bool
|
|
42
|
+
# @return [Boolean]
|
|
38
43
|
def untyped?
|
|
39
44
|
@type == UNTYPED
|
|
40
45
|
end
|
|
41
46
|
|
|
42
47
|
# @rbs type: String
|
|
43
48
|
# @rbs return: void
|
|
49
|
+
# @param type [String]
|
|
50
|
+
# @return [void]
|
|
44
51
|
def type=(type)
|
|
45
52
|
@type = RubyModKit.unify_type(type)
|
|
46
53
|
end
|
|
@@ -12,12 +12,16 @@ module RubyModKit
|
|
|
12
12
|
|
|
13
13
|
# @rbs offset: Integer
|
|
14
14
|
# @rbs return: void
|
|
15
|
+
# @param offset [Integer]
|
|
16
|
+
# @return [void]
|
|
15
17
|
def initialize(offset)
|
|
16
18
|
@offset = offset
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
# @rbs offset_diff: OffsetDiff
|
|
20
22
|
# @rbs return: void
|
|
23
|
+
# @param offset_diff [OffsetDiff]
|
|
24
|
+
# @return [void]
|
|
21
25
|
def succ(offset_diff)
|
|
22
26
|
@offset = offset_diff[@offset]
|
|
23
27
|
end
|
|
@@ -17,6 +17,9 @@ module RubyModKit
|
|
|
17
17
|
# @rbs offset: Integer
|
|
18
18
|
# @rbs name: Symbol
|
|
19
19
|
# @rbs return: void
|
|
20
|
+
# @param offset [Integer]
|
|
21
|
+
# @param name [Symbol]
|
|
22
|
+
# @return [void]
|
|
20
23
|
def initialize(offset, name)
|
|
21
24
|
@name = name
|
|
22
25
|
@overload_types = []
|
|
@@ -26,10 +29,12 @@ module RubyModKit
|
|
|
26
29
|
|
|
27
30
|
# @rbs root_node: Node::ProgramNode
|
|
28
31
|
# @rbs return: Integer
|
|
32
|
+
# @param root_node [Node::ProgramNode]
|
|
33
|
+
# @return [Integer]
|
|
29
34
|
def correct_offset(root_node)
|
|
30
35
|
return @offset if @offset_corrected
|
|
31
36
|
|
|
32
|
-
node = root_node.def_node_at(@offset)
|
|
37
|
+
node = root_node.def_node_at(@offset)
|
|
33
38
|
raise RubyModKit::Error unless node.is_a?(Node::DefNode)
|
|
34
39
|
|
|
35
40
|
@offset_corrected = true
|
|
@@ -39,6 +44,9 @@ module RubyModKit
|
|
|
39
44
|
# @rbs parameter_types: Array[String]
|
|
40
45
|
# @rbs return_value_type: String
|
|
41
46
|
# @rbs return: void
|
|
47
|
+
# @param parameter_types [Array<String>]
|
|
48
|
+
# @param return_value_type [String]
|
|
49
|
+
# @return [void]
|
|
42
50
|
def add_overload_type(parameter_types, return_value_type)
|
|
43
51
|
@overload_types << [parameter_types, return_value_type]
|
|
44
52
|
end
|
|
@@ -8,16 +8,20 @@ module RubyModKit
|
|
|
8
8
|
class ParameterMemo < OffsetMemo
|
|
9
9
|
# @rbs @type: String
|
|
10
10
|
# @rbs @ivar_parameter: bool
|
|
11
|
-
# @rbs @qualifier: String
|
|
11
|
+
# @rbs @qualifier: String | nil
|
|
12
|
+
# @rbs @name: Symbol
|
|
12
13
|
|
|
13
14
|
attr_reader :type #: String
|
|
14
15
|
attr_accessor :ivar_parameter #: bool
|
|
15
|
-
attr_accessor :qualifier #: String
|
|
16
|
+
attr_accessor :qualifier #: String | nil
|
|
17
|
+
attr_accessor :name #: Symbol
|
|
16
18
|
|
|
17
|
-
UNTYPED = "untyped"
|
|
19
|
+
UNTYPED = "untyped" #: String
|
|
18
20
|
|
|
19
21
|
# @rbs offset: Integer
|
|
20
22
|
# @rbs return: void
|
|
23
|
+
# @param offset [Integer]
|
|
24
|
+
# @return [void]
|
|
21
25
|
def initialize(offset)
|
|
22
26
|
@type = UNTYPED
|
|
23
27
|
@ivar_parameter = false
|
|
@@ -25,12 +29,15 @@ module RubyModKit
|
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
# @rbs return: bool
|
|
32
|
+
# @return [Boolean]
|
|
28
33
|
def untyped?
|
|
29
34
|
@type == UNTYPED
|
|
30
35
|
end
|
|
31
36
|
|
|
32
37
|
# @rbs type: String
|
|
33
38
|
# @rbs return: void
|
|
39
|
+
# @param type [String]
|
|
40
|
+
# @return [void]
|
|
34
41
|
def type=(type)
|
|
35
42
|
@type = RubyModKit.unify_type(type)
|
|
36
43
|
end
|
|
@@ -18,6 +18,7 @@ module RubyModKit
|
|
|
18
18
|
attr_accessor :flags #: Hash[Symbol, bool]
|
|
19
19
|
|
|
20
20
|
# @rbs return: void
|
|
21
|
+
# @return [void]
|
|
21
22
|
def initialize
|
|
22
23
|
@def_parents_memo = {}
|
|
23
24
|
@methods_memo = {}
|
|
@@ -28,6 +29,8 @@ module RubyModKit
|
|
|
28
29
|
|
|
29
30
|
# @rbs offset_diff: OffsetDiff
|
|
30
31
|
# @rbs return: void
|
|
32
|
+
# @param offset_diff [OffsetDiff]
|
|
33
|
+
# @return [void]
|
|
31
34
|
def succ(offset_diff)
|
|
32
35
|
[@methods_memo, @parameters_memo, @def_parents_memo, @overloads_memo].each do |offset_node_memo|
|
|
33
36
|
new_offset_node_memo = {}
|
|
@@ -42,12 +45,16 @@ module RubyModKit
|
|
|
42
45
|
|
|
43
46
|
# @rbs def_parent_node: Node::DefParentNode
|
|
44
47
|
# @rbs return: Memo::DefParentMemo
|
|
48
|
+
# @param def_parent_node [Node::DefParentNode]
|
|
49
|
+
# @return [Memo::DefParentMemo]
|
|
45
50
|
def def_parent_memo(def_parent_node)
|
|
46
51
|
@def_parents_memo[def_parent_node.offset] ||= Memo::DefParentMemo.new(def_parent_node)
|
|
47
52
|
end
|
|
48
53
|
|
|
49
54
|
# @rbs def_node: Node::DefNode
|
|
50
55
|
# @rbs return: Memo::MethodMemo
|
|
56
|
+
# @param def_node [Node::DefNode]
|
|
57
|
+
# @return [Memo::MethodMemo]
|
|
51
58
|
def method_memo(def_node)
|
|
52
59
|
@methods_memo[def_node.offset] ||= Memo::MethodMemo.new(def_node)
|
|
53
60
|
end
|
|
@@ -55,12 +62,17 @@ module RubyModKit
|
|
|
55
62
|
# @rbs offset: Integer
|
|
56
63
|
# @rbs name: Symbol
|
|
57
64
|
# @rbs return: Memo::OverloadMemo
|
|
65
|
+
# @param offset [Integer]
|
|
66
|
+
# @param name [Symbol]
|
|
67
|
+
# @return [Memo::OverloadMemo]
|
|
58
68
|
def overload_memo(offset, name)
|
|
59
69
|
@overloads_memo[offset] ||= Memo::OverloadMemo.new(offset, name)
|
|
60
70
|
end
|
|
61
71
|
|
|
62
72
|
# @rbs node: Node::BaseNode
|
|
63
73
|
# @rbs return: Memo::ParameterMemo
|
|
74
|
+
# @param node [Node::BaseNode]
|
|
75
|
+
# @return [Memo::ParameterMemo]
|
|
64
76
|
def parameter_memo(node)
|
|
65
77
|
memo = @parameters_memo[node.offset] ||= Memo::ParameterMemo.new(node.offset)
|
|
66
78
|
def_node = node.def_node_at(node.offset)
|
|
@@ -68,5 +80,27 @@ module RubyModKit
|
|
|
68
80
|
|
|
69
81
|
method_memo(def_node).add_parameter(memo)
|
|
70
82
|
end
|
|
83
|
+
|
|
84
|
+
# @rbs (Memo::ParameterMemo) -> void
|
|
85
|
+
# | (Memo::MethodMemo) -> void
|
|
86
|
+
def delete(*args)
|
|
87
|
+
case args
|
|
88
|
+
in [Memo::ParameterMemo => parameter_memo]
|
|
89
|
+
@parameters_memo.delete(parameter_memo.offset)
|
|
90
|
+
in [Memo::MethodMemo => method_memo]
|
|
91
|
+
method_memo.parameters.each do |parameter_memo| # rubocop:disable Lint/ShadowingOuterLocalVariable
|
|
92
|
+
delete(parameter_memo)
|
|
93
|
+
end
|
|
94
|
+
@methods_memo.delete(method_memo.offset)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# @rbs &block: (Memo::ParameterMemo) -> void
|
|
99
|
+
# @rbs return: void
|
|
100
|
+
# @param block [(Memo::ParameterMemo) -> void]
|
|
101
|
+
# @return [void]
|
|
102
|
+
def each_parameter_memo(&block)
|
|
103
|
+
parameters_memo.each_value(&block)
|
|
104
|
+
end
|
|
71
105
|
end
|
|
72
106
|
end
|
data/lib/ruby_mod_kit/mission.rb
CHANGED
|
@@ -7,12 +7,10 @@ module RubyModKit
|
|
|
7
7
|
class Mission
|
|
8
8
|
# @rbs _generation: Generation
|
|
9
9
|
# @rbs return: void
|
|
10
|
+
# @param _generation [Generation]
|
|
11
|
+
# @return [void]
|
|
10
12
|
def perform(_generation)
|
|
11
13
|
raise RubyModKit::Error, "Unexpected type #{self.class}"
|
|
12
14
|
end
|
|
13
|
-
|
|
14
|
-
# @rbs offset_diff: OffsetDiff
|
|
15
|
-
# @rbs return: void
|
|
16
|
-
def succ(offset_diff); end
|
|
17
15
|
end
|
|
18
16
|
end
|
|
@@ -14,6 +14,7 @@ module RubyModKit
|
|
|
14
14
|
attr_reader :prev #: Node::BaseNode | nil
|
|
15
15
|
|
|
16
16
|
# @rbs return: Prism::Location
|
|
17
|
+
# @return [Prism::Location]
|
|
17
18
|
def location
|
|
18
19
|
return @location if defined?(@location)
|
|
19
20
|
|
|
@@ -21,6 +22,7 @@ module RubyModKit
|
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
# @rbs return: Array[Node::BaseNode]
|
|
25
|
+
# @return [Array<Node::BaseNode>]
|
|
24
26
|
def children
|
|
25
27
|
return @children if @children
|
|
26
28
|
|
|
@@ -33,11 +35,15 @@ module RubyModKit
|
|
|
33
35
|
# @rbs prism_node: Prism::Node
|
|
34
36
|
# @rbs prev: Node::BaseNode | nil
|
|
35
37
|
# @rbs return: Node::BaseNode
|
|
38
|
+
# @param prism_node [Prism::Node]
|
|
39
|
+
# @param prev [Node::BaseNode, nil]
|
|
40
|
+
# @return [Node::BaseNode]
|
|
36
41
|
def wrap(prism_node, prev: nil)
|
|
37
42
|
Node.wrap(prism_node, parent: self, prev: prev)
|
|
38
43
|
end
|
|
39
44
|
|
|
40
45
|
# @rbs return: Array[Node::BaseNode]
|
|
46
|
+
# @return [Array<Node::BaseNode>]
|
|
41
47
|
def ancestors
|
|
42
48
|
return @ancestors if @ancestors
|
|
43
49
|
|
|
@@ -49,18 +55,22 @@ module RubyModKit
|
|
|
49
55
|
end
|
|
50
56
|
end
|
|
51
57
|
|
|
52
|
-
# @rbs return:
|
|
58
|
+
# @rbs return: BaseNode | nil
|
|
59
|
+
# @return [BaseNode, nil]
|
|
53
60
|
def parent
|
|
54
61
|
raise(RubyModKit::Error)
|
|
55
62
|
end
|
|
56
63
|
|
|
57
64
|
# @rbs return: Symbol
|
|
65
|
+
# @return [Symbol]
|
|
58
66
|
def name
|
|
59
67
|
raise(RubyModKit::Error, "Expected ParameterNode but #{self.class}:#{prism_node.inspect}")
|
|
60
68
|
end
|
|
61
69
|
|
|
62
70
|
# @rbs offset: Integer
|
|
63
71
|
# @rbs return: Node::BaseNode | nil
|
|
72
|
+
# @param offset [Integer]
|
|
73
|
+
# @return [Node::BaseNode, nil]
|
|
64
74
|
def node_at(offset)
|
|
65
75
|
return nil unless include?(offset)
|
|
66
76
|
|
|
@@ -70,6 +80,8 @@ module RubyModKit
|
|
|
70
80
|
|
|
71
81
|
# @rbs offset: Integer
|
|
72
82
|
# @rbs return: Node::StatementsNode | nil
|
|
83
|
+
# @param offset [Integer]
|
|
84
|
+
# @return [Node::StatementsNode, nil]
|
|
73
85
|
def statements_node_at(offset)
|
|
74
86
|
node = node_at(offset) || return
|
|
75
87
|
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::StatementsNode) }
|
|
@@ -78,6 +90,8 @@ module RubyModKit
|
|
|
78
90
|
|
|
79
91
|
# @rbs offset: Integer
|
|
80
92
|
# @rbs return: Node::DefNode | nil
|
|
93
|
+
# @param offset [Integer]
|
|
94
|
+
# @return [Node::DefNode, nil]
|
|
81
95
|
def def_node_at(offset)
|
|
82
96
|
node = node_at(offset) || return
|
|
83
97
|
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::DefNode) }
|
|
@@ -86,6 +100,8 @@ module RubyModKit
|
|
|
86
100
|
|
|
87
101
|
# @rbs offset: Integer
|
|
88
102
|
# @rbs return: Node::ParameterNode | nil
|
|
103
|
+
# @param offset [Integer]
|
|
104
|
+
# @return [Node::ParameterNode, nil]
|
|
89
105
|
def parameter_node_at(offset)
|
|
90
106
|
node = node_at(offset) || return
|
|
91
107
|
[node, *node.ancestors].each { return _1 if _1.is_a?(Node::ParameterNode) }
|
|
@@ -93,25 +109,48 @@ module RubyModKit
|
|
|
93
109
|
end
|
|
94
110
|
|
|
95
111
|
# @rbs offset: Integer
|
|
112
|
+
# @rbs allowed: Array[Class] | nil
|
|
96
113
|
# @rbs return: Node::DefParentNode | nil
|
|
97
|
-
|
|
114
|
+
# @param offset [Integer]
|
|
115
|
+
# @param allowed [Array<Class>, nil]
|
|
116
|
+
# @return [Node::DefParentNode, nil]
|
|
117
|
+
def def_parent_node_at(offset, allowed: nil)
|
|
98
118
|
node = node_at(offset) || return
|
|
99
|
-
[node, *node.ancestors].each
|
|
119
|
+
[node, *node.ancestors].each do |ancestor_node|
|
|
120
|
+
return ancestor_node if ancestor_node.is_a?(Node::DefParentNode)
|
|
121
|
+
return nil if allowed && !allowed.include?(ancestor_node.class)
|
|
122
|
+
end
|
|
100
123
|
nil
|
|
101
124
|
end
|
|
102
125
|
|
|
103
126
|
# @rbs offset: Integer
|
|
104
127
|
# @rbs return: bool
|
|
128
|
+
# @param offset [Integer]
|
|
129
|
+
# @return [Boolean]
|
|
105
130
|
def include?(offset)
|
|
106
131
|
self.offset <= offset && offset <= prism_node.location.end_offset
|
|
107
132
|
end
|
|
108
133
|
|
|
109
134
|
# @rbs return: Integer
|
|
135
|
+
# @return [Integer]
|
|
110
136
|
def offset
|
|
111
137
|
location.start_offset
|
|
112
138
|
end
|
|
113
139
|
|
|
140
|
+
# @rbs return: Integer
|
|
141
|
+
# @return [Integer]
|
|
142
|
+
def end_offset
|
|
143
|
+
location.end_offset
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# @rbs return: String
|
|
147
|
+
# @return [String]
|
|
148
|
+
def slice
|
|
149
|
+
location.slice
|
|
150
|
+
end
|
|
151
|
+
|
|
114
152
|
# @rbs return: String
|
|
153
|
+
# @return [String]
|
|
115
154
|
def inspect
|
|
116
155
|
str = +"#<#{self.class} "
|
|
117
156
|
first = true
|
|
@@ -146,6 +185,7 @@ module RubyModKit
|
|
|
146
185
|
# :nocov:
|
|
147
186
|
# This is just for interface definition, must not be called
|
|
148
187
|
# @rbs return: Prism::Node & Prism::_Node
|
|
188
|
+
# @return [Prism::Node & Prism::_Node]
|
|
149
189
|
def prism_node
|
|
150
190
|
raise RubyModKit::Error
|
|
151
191
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# rbs_inline: enabled
|
|
4
|
+
|
|
5
|
+
module RubyModKit
|
|
6
|
+
module Node
|
|
7
|
+
# Transpiler program node
|
|
8
|
+
class BeginNode < Node::BaseNode
|
|
9
|
+
# @rbs @prism_node: Prism::BeginNode
|
|
10
|
+
# @rbs @parent: Node::BaseNode
|
|
11
|
+
# @rbs @prev: Node::BaseNode | nil
|
|
12
|
+
|
|
13
|
+
private attr_reader :prism_node #: Prism::BeginNode
|
|
14
|
+
attr_reader :parent #: Node::BaseNode
|
|
15
|
+
attr_reader :prev #: Node::BaseNode | nil
|
|
16
|
+
|
|
17
|
+
# @rbs prism_node: Prism::BeginNode
|
|
18
|
+
# @rbs parent: Node::BaseNode
|
|
19
|
+
# @rbs prev: Node::BaseNode | nil
|
|
20
|
+
# @rbs return: void
|
|
21
|
+
# @param prism_node [Prism::BeginNode]
|
|
22
|
+
# @param parent [Node::BaseNode]
|
|
23
|
+
# @param prev [Node::BaseNode, nil]
|
|
24
|
+
# @return [void]
|
|
25
|
+
def initialize(prism_node, parent:, prev: nil)
|
|
26
|
+
@prism_node = prism_node
|
|
27
|
+
@parent = parent
|
|
28
|
+
@prev = prev
|
|
29
|
+
raise RubyModKit::Error unless prism_node.is_a?(Prism::BeginNode)
|
|
30
|
+
|
|
31
|
+
super()
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -20,6 +20,10 @@ module RubyModKit
|
|
|
20
20
|
# @rbs parent: Node::BaseNode
|
|
21
21
|
# @rbs prev: Node::BaseNode | nil
|
|
22
22
|
# @rbs return: void
|
|
23
|
+
# @param prism_node [Prism::CallNode]
|
|
24
|
+
# @param parent [Node::BaseNode]
|
|
25
|
+
# @param prev [Node::BaseNode, nil]
|
|
26
|
+
# @return [void]
|
|
23
27
|
def initialize(prism_node, parent:, prev: nil)
|
|
24
28
|
@prism_node = prism_node
|
|
25
29
|
@parent = parent
|
|
@@ -9,6 +9,7 @@ module RubyModKit
|
|
|
9
9
|
# @rbs @prism_node: Prism::DefNode
|
|
10
10
|
# @rbs @parent: Node::BaseNode
|
|
11
11
|
# @rbs @prev: Node::BaseNode | nil
|
|
12
|
+
# @rbs @body_node: Node::StatementsNode | Node::BeginNode | nil
|
|
12
13
|
|
|
13
14
|
private attr_reader :prism_node #: Prism::DefNode
|
|
14
15
|
attr_reader :parent #: Node::BaseNode
|
|
@@ -18,6 +19,10 @@ module RubyModKit
|
|
|
18
19
|
# @rbs parent: Node::BaseNode
|
|
19
20
|
# @rbs prev: Node::BaseNode | nil
|
|
20
21
|
# @rbs return: void
|
|
22
|
+
# @param prism_node [Prism::DefNode]
|
|
23
|
+
# @param parent [Node::BaseNode]
|
|
24
|
+
# @param prev [Node::BaseNode, nil]
|
|
25
|
+
# @return [void]
|
|
21
26
|
def initialize(prism_node, parent:, prev: nil)
|
|
22
27
|
@prism_node = prism_node
|
|
23
28
|
@parent = parent
|
|
@@ -28,34 +33,65 @@ module RubyModKit
|
|
|
28
33
|
end
|
|
29
34
|
|
|
30
35
|
# @rbs return: Symbol
|
|
36
|
+
# @return [Symbol]
|
|
31
37
|
def name
|
|
32
38
|
@prism_node.name
|
|
33
39
|
end
|
|
34
40
|
|
|
35
41
|
# @rbs return: Prism::Location | nil
|
|
42
|
+
# @return [Prism::Location, nil]
|
|
36
43
|
def body_location
|
|
37
44
|
prism_node.body&.location
|
|
38
45
|
end
|
|
39
46
|
|
|
40
47
|
# @rbs return: Prism::Location | nil
|
|
48
|
+
# @return [Prism::Location, nil]
|
|
41
49
|
def lparen_loc
|
|
42
50
|
@prism_node.lparen_loc
|
|
43
51
|
end
|
|
44
52
|
|
|
45
53
|
# @rbs return: Prism::Location | nil
|
|
54
|
+
# @return [Prism::Location, nil]
|
|
46
55
|
def rparen_loc
|
|
47
56
|
@prism_node.rparen_loc
|
|
48
57
|
end
|
|
49
58
|
|
|
50
59
|
# @rbs return: Prism::Location
|
|
60
|
+
# @return [Prism::Location]
|
|
51
61
|
def name_loc
|
|
52
62
|
@prism_node.name_loc
|
|
53
63
|
end
|
|
54
64
|
|
|
55
65
|
# @rbs return: Prism::Location | nil
|
|
66
|
+
# @return [Prism::Location, nil]
|
|
56
67
|
def end_keyword_loc
|
|
57
68
|
@prism_node.end_keyword_loc
|
|
58
69
|
end
|
|
70
|
+
|
|
71
|
+
# @rbs prism_child_node: Prism::Node
|
|
72
|
+
# @rbs prev: Node::BaseNode | nil
|
|
73
|
+
# @rbs return: Node::BaseNode
|
|
74
|
+
# @param prism_child_node [Prism::Node]
|
|
75
|
+
# @param prev [Node::BaseNode, nil]
|
|
76
|
+
# @return [Node::BaseNode]
|
|
77
|
+
def wrap(prism_child_node, prev: nil)
|
|
78
|
+
child_node = super
|
|
79
|
+
if prism_child_node == @prism_node.body
|
|
80
|
+
case child_node
|
|
81
|
+
when Node::StatementsNode, Node::BeginNode
|
|
82
|
+
@body_node = child_node
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
child_node
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# @rbs return: Node::StatementsNode | Node::BeginNode | nil
|
|
89
|
+
# @return [Node::StatementsNode, Node::BeginNode, nil]
|
|
90
|
+
def body_node
|
|
91
|
+
# body_node will be set in #children
|
|
92
|
+
children
|
|
93
|
+
@body_node
|
|
94
|
+
end
|
|
59
95
|
end
|
|
60
96
|
end
|
|
61
97
|
end
|
|
@@ -7,7 +7,7 @@ module RubyModKit
|
|
|
7
7
|
# Transpiler program node
|
|
8
8
|
class DefParentNode < Node::BaseNode
|
|
9
9
|
# @rbs @prism_node: Prism::ClassNode | Prism::ModuleNode
|
|
10
|
-
# @rbs @body_node:
|
|
10
|
+
# @rbs @body_node: Node::StatementsNode | nil
|
|
11
11
|
# @rbs @parent: Node::BaseNode
|
|
12
12
|
# @rbs @prev: Node::BaseNode | nil
|
|
13
13
|
|
|
@@ -19,6 +19,10 @@ module RubyModKit
|
|
|
19
19
|
# @rbs parent: Node::BaseNode
|
|
20
20
|
# @rbs prev: Node::BaseNode | nil
|
|
21
21
|
# @rbs return: void
|
|
22
|
+
# @param prism_node [Prism::ClassNode, Prism::ModuleNode]
|
|
23
|
+
# @param parent [Node::BaseNode]
|
|
24
|
+
# @param prev [Node::BaseNode, nil]
|
|
25
|
+
# @return [void]
|
|
22
26
|
def initialize(prism_node, parent:, prev: nil)
|
|
23
27
|
@prism_node = prism_node
|
|
24
28
|
@parent = parent
|
|
@@ -31,13 +35,17 @@ module RubyModKit
|
|
|
31
35
|
# @rbs prism_child_node: Prism::Node
|
|
32
36
|
# @rbs prev: Node::BaseNode | nil
|
|
33
37
|
# @rbs return: Node::BaseNode
|
|
38
|
+
# @param prism_child_node [Prism::Node]
|
|
39
|
+
# @param prev [Node::BaseNode, nil]
|
|
40
|
+
# @return [Node::BaseNode]
|
|
34
41
|
def wrap(prism_child_node, prev: nil)
|
|
35
42
|
child_node = super
|
|
36
43
|
@body_node = child_node if prism_child_node == @prism_node.body && child_node.is_a?(Node::StatementsNode)
|
|
37
44
|
child_node
|
|
38
45
|
end
|
|
39
46
|
|
|
40
|
-
# @rbs return:
|
|
47
|
+
# @rbs return: Node::StatementsNode | nil
|
|
48
|
+
# @return [Node::StatementsNode, nil]
|
|
41
49
|
def body_node
|
|
42
50
|
# body_node will be set in #children
|
|
43
51
|
children
|
|
@@ -13,7 +13,7 @@ module RubyModKit
|
|
|
13
13
|
# @rbs!
|
|
14
14
|
# type prism_node = Prism::RequiredParameterNode | Prism::OptionalKeywordParameterNode
|
|
15
15
|
# | Prism::OptionalParameterNode | Prism::RequiredKeywordParameterNode
|
|
16
|
-
# | Prism::RestParameterNode
|
|
16
|
+
# | Prism::RestParameterNode | Prism::BlockParameterNode
|
|
17
17
|
|
|
18
18
|
private attr_reader :prism_node #: prism_node
|
|
19
19
|
attr_reader :parent #: Node::BaseNode
|
|
@@ -23,6 +23,10 @@ module RubyModKit
|
|
|
23
23
|
# @rbs parent: Node::BaseNode
|
|
24
24
|
# @rbs prev: Node::BaseNode | nil
|
|
25
25
|
# @rbs return: void
|
|
26
|
+
# @param prism_node [prism_node]
|
|
27
|
+
# @param parent [Node::BaseNode]
|
|
28
|
+
# @param prev [Node::BaseNode, nil]
|
|
29
|
+
# @return [void]
|
|
26
30
|
def initialize(prism_node, parent:, prev: nil)
|
|
27
31
|
@prism_node = prism_node
|
|
28
32
|
@parent = parent
|
|
@@ -30,7 +34,7 @@ module RubyModKit
|
|
|
30
34
|
case prism_node
|
|
31
35
|
when Prism::RequiredParameterNode, Prism::OptionalKeywordParameterNode,
|
|
32
36
|
Prism::OptionalParameterNode, Prism::RequiredKeywordParameterNode,
|
|
33
|
-
Prism::RestParameterNode
|
|
37
|
+
Prism::RestParameterNode, Prism::BlockParameterNode
|
|
34
38
|
super()
|
|
35
39
|
else
|
|
36
40
|
raise RubyModKit::Error, "unexpected prism node #{prism_node.class}"
|
|
@@ -38,6 +42,7 @@ module RubyModKit
|
|
|
38
42
|
end
|
|
39
43
|
|
|
40
44
|
# @rbs return: Symbol | nil
|
|
45
|
+
# @return [Symbol, nil]
|
|
41
46
|
def name
|
|
42
47
|
@prism_node.name
|
|
43
48
|
end
|
|
@@ -12,6 +12,8 @@ module RubyModKit
|
|
|
12
12
|
|
|
13
13
|
# @rbs prism_node: Prism::ProgramNode
|
|
14
14
|
# @rbs return: void
|
|
15
|
+
# @param prism_node [Prism::ProgramNode]
|
|
16
|
+
# @return [void]
|
|
15
17
|
def initialize(prism_node)
|
|
16
18
|
@prism_node = prism_node
|
|
17
19
|
raise RubyModKit::Error unless prism_node.is_a?(Prism::ProgramNode)
|
|
@@ -20,6 +22,7 @@ module RubyModKit
|
|
|
20
22
|
end
|
|
21
23
|
|
|
22
24
|
# @rbs return: nil
|
|
25
|
+
# @return [nil]
|
|
23
26
|
def parent
|
|
24
27
|
nil
|
|
25
28
|
end
|
|
@@ -18,6 +18,10 @@ module RubyModKit
|
|
|
18
18
|
# @rbs parent: Node::BaseNode
|
|
19
19
|
# @rbs prev: Node::BaseNode | nil
|
|
20
20
|
# @rbs return: void
|
|
21
|
+
# @param prism_node [Prism::StatementsNode]
|
|
22
|
+
# @param parent [Node::BaseNode]
|
|
23
|
+
# @param prev [Node::BaseNode, nil]
|
|
24
|
+
# @return [void]
|
|
21
25
|
def initialize(prism_node, parent:, prev: nil)
|
|
22
26
|
@prism_node = prism_node
|
|
23
27
|
@parent = parent
|