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