ruby_mod_kit 0.0.5 → 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/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 +7 -0
- data/lib/ruby_mod_kit/core_ext/load.rb +10 -0
- data/lib/ruby_mod_kit/corrector.rb +5 -0
- data/lib/ruby_mod_kit/corrector_manager.rb +6 -0
- 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 +2 -0
- data/lib/ruby_mod_kit/feature/instance_variable_parameter.rb +2 -0
- data/lib/ruby_mod_kit/feature/overload/overload_mission.rb +42 -10
- data/lib/ruby_mod_kit/feature/overload.rb +1 -0
- data/lib/ruby_mod_kit/feature/type/check/arguments/add_arguments_checker_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/check/arguments.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/instance_variable_colon_corrector.rb +4 -0
- data/lib/ruby_mod_kit/feature/type/parameter_arrow_corrector.rb +14 -0
- 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 +2 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_overload_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_parameter_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline/type_return_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/rbs_inline.rb +1 -0
- data/lib/ruby_mod_kit/feature/type/return_value_colon_corrector.rb +4 -0
- data/lib/ruby_mod_kit/feature/type/type_attr_mission.rb +3 -0
- data/lib/ruby_mod_kit/feature/type/yard/type_parameter_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/yard/type_return_mission.rb +2 -0
- data/lib/ruby_mod_kit/feature/type/yard.rb +3 -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 +54 -71
- data/lib/ruby_mod_kit/memo/def_parent_memo.rb +6 -0
- data/lib/ruby_mod_kit/memo/ivar_memo.rb +16 -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 +6 -1
- data/lib/ruby_mod_kit/memo_pad.rb +28 -0
- data/lib/ruby_mod_kit/mission.rb +2 -0
- data/lib/ruby_mod_kit/node/base_node.rb +32 -1
- data/lib/ruby_mod_kit/node/begin_node.rb +4 -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 +5 -0
- 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 +4 -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 -3
- 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 +7 -0
- data/sig/generated/ruby_mod_kit/core_ext/load.rbs +10 -0
- data/sig/generated/ruby_mod_kit/corrector.rbs +5 -0
- data/sig/generated/ruby_mod_kit/corrector_manager.rbs +6 -0
- 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 +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/check/arguments.rbs +2 -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 +14 -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 +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/yard/type_return_mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/feature/type/yard.rbs +3 -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 +31 -34
- data/sig/generated/ruby_mod_kit/memo/def_parent_memo.rbs +6 -0
- data/sig/generated/ruby_mod_kit/memo/ivar_memo.rbs +16 -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 +6 -1
- data/sig/generated/ruby_mod_kit/memo_pad.rbs +19 -0
- data/sig/generated/ruby_mod_kit/mission.rbs +2 -0
- data/sig/generated/ruby_mod_kit/node/base_node.rbs +31 -2
- data/sig/generated/ruby_mod_kit/node/begin_node.rbs +4 -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 +5 -0
- 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 +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7d1688dd299feefd22167740d43d09a691ba4e01359edbdfdcb81462ec7c4d47
|
|
4
|
+
data.tar.gz: 1ea7711fddb58f15c1257fb8a63595d300a7c45483af595f4defc48c5a842466
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fa6c821537ec79c43ed5b092f2a0044126c0b925bff381c33971c2462a0578e92b0f681d313d3053c0fbc688f13907a6b10180738fa075bc192e1b582c843479
|
|
7
|
+
data.tar.gz: a84c961311ae15bc60b8db3594a1f412ca7b1a71d4922707d271c7d3eba9338e91338c69f2414a04907c1bc1e2b76581d1298a3effd22706913d4731fe93b084
|
data/.ruby_mod_kit.yml
CHANGED
data/.yardopts
ADDED
data/examples/user.rb
CHANGED
|
@@ -50,25 +50,13 @@ class Pos
|
|
|
50
50
|
# | (Integer) -> Pos
|
|
51
51
|
def *(*args)
|
|
52
52
|
case args
|
|
53
|
-
in [Pos]
|
|
54
|
-
|
|
55
|
-
in [Integer]
|
|
56
|
-
|
|
53
|
+
in [Pos => other]
|
|
54
|
+
(@x * other.x) + (@y * other.y) + (@z * other.z)
|
|
55
|
+
in [Integer => n]
|
|
56
|
+
Pos.new(@x * n, @y * n, @z * n)
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
# @rbs other: Pos
|
|
61
|
-
# @rbs return: Integer
|
|
62
|
-
def _mul__overload0(other)
|
|
63
|
-
(@x * other.x) + (@y * other.y) + (@z * other.z)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# @rbs n: Integer
|
|
67
|
-
# @rbs return: Pos
|
|
68
|
-
def _mul__overload1(n)
|
|
69
|
-
Pos.new(@x * n, @y * n, @z * n)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
60
|
# @rbs return: String
|
|
73
61
|
def to_s
|
|
74
62
|
"#<Pos: (#{@x}, #{@y}, #{@z})>"
|
data/lib/ruby_mod_kit/cli.rb
CHANGED
|
@@ -11,6 +11,8 @@ module RubyModKit
|
|
|
11
11
|
desc "exec", "execute rbm file"
|
|
12
12
|
# @rbs *args: String
|
|
13
13
|
# @rbs return: void
|
|
14
|
+
# @param args [String]
|
|
15
|
+
# @return [void]
|
|
14
16
|
def exec(*args)
|
|
15
17
|
RubyModKit.execute_file(*args, config: config)
|
|
16
18
|
end
|
|
@@ -19,6 +21,8 @@ module RubyModKit
|
|
|
19
21
|
method_option :output, type: :string
|
|
20
22
|
# @rbs *args: String
|
|
21
23
|
# @rbs return: void
|
|
24
|
+
# @param args [String]
|
|
25
|
+
# @return [void]
|
|
22
26
|
def transpile(*args)
|
|
23
27
|
output = case options[:output]
|
|
24
28
|
when nil, "-", "/dev/stdout"
|
|
@@ -37,6 +41,7 @@ module RubyModKit
|
|
|
37
41
|
private
|
|
38
42
|
|
|
39
43
|
# @rbs return: Config | nil
|
|
44
|
+
# @return [Config, nil]
|
|
40
45
|
def config
|
|
41
46
|
if options[:config]
|
|
42
47
|
config_path = options[:config]
|
data/lib/ruby_mod_kit/config.rb
CHANGED
|
@@ -15,6 +15,8 @@ module RubyModKit
|
|
|
15
15
|
|
|
16
16
|
# @rbs features: Array[String]
|
|
17
17
|
# @rbs return: void
|
|
18
|
+
# @param features [Array<String>]
|
|
19
|
+
# @return [void]
|
|
18
20
|
def initialize(features: DEFAULT_FEATURES)
|
|
19
21
|
@features = features.sort.map do |feature_name|
|
|
20
22
|
raise ArgumentError, "invalid feature: #{feature_name}" if feature_name.include?(".")
|
|
@@ -29,8 +31,11 @@ module RubyModKit
|
|
|
29
31
|
|
|
30
32
|
class << self
|
|
31
33
|
# @rbs path: String
|
|
32
|
-
# @rbs if_none:
|
|
34
|
+
# @rbs if_none: Symbol | nil
|
|
33
35
|
# @rbs return: Config | nil
|
|
36
|
+
# @param path [String]
|
|
37
|
+
# @param if_none [Symbol, nil]
|
|
38
|
+
# @return [Config, nil]
|
|
34
39
|
def load(path, if_none: nil)
|
|
35
40
|
return load(File.join(path, ".ruby_mod_kit.yml"), if_none: if_none) if File.directory?(path)
|
|
36
41
|
|
|
@@ -6,6 +6,7 @@ require "ruby_mod_kit"
|
|
|
6
6
|
|
|
7
7
|
# Define RubyMotKit.eval
|
|
8
8
|
module RubyModKit
|
|
9
|
+
# the namespace for language core extensions
|
|
9
10
|
module CoreExt
|
|
10
11
|
# the extension for eval
|
|
11
12
|
module Eval
|
|
@@ -17,6 +18,12 @@ module RubyModKit
|
|
|
17
18
|
# @rbs lineno: Integer
|
|
18
19
|
# @rbs transpile: bool
|
|
19
20
|
# @rbs return: Object
|
|
21
|
+
# @param expr [String]
|
|
22
|
+
# @param binding [Binding]
|
|
23
|
+
# @param fname [String]
|
|
24
|
+
# @param lineno [Integer]
|
|
25
|
+
# @param transpile [Boolean]
|
|
26
|
+
# @return [Object]
|
|
20
27
|
def eval(expr, binding = TOPLEVEL_BINDING, fname = "(eval)", lineno = 1, transpile: true)
|
|
21
28
|
expr = RubyModKit.transpile(expr, filename: fname) if transpile
|
|
22
29
|
|
|
@@ -17,6 +17,9 @@ module RubyModKit
|
|
|
17
17
|
# @rbs path: String
|
|
18
18
|
# @rbs wrap: bool
|
|
19
19
|
# @rbs return: bool
|
|
20
|
+
# @param path [String]
|
|
21
|
+
# @param wrap [Boolean]
|
|
22
|
+
# @return [Boolean]
|
|
20
23
|
def load(path, wrap = false) # rubocop:disable Style/OptionalBooleanParameter
|
|
21
24
|
return super unless path.end_with?(".rbm")
|
|
22
25
|
|
|
@@ -27,6 +30,8 @@ module RubyModKit
|
|
|
27
30
|
|
|
28
31
|
# @rbs path: String
|
|
29
32
|
# @rbs return: bool
|
|
33
|
+
# @param path [String]
|
|
34
|
+
# @return [Boolean]
|
|
30
35
|
def require(path)
|
|
31
36
|
require_path = Load.require_path(path)
|
|
32
37
|
return super unless require_path&.end_with?(".rbm")
|
|
@@ -39,11 +44,13 @@ module RubyModKit
|
|
|
39
44
|
|
|
40
45
|
class << self
|
|
41
46
|
# @rbs return: Array[String]
|
|
47
|
+
# @return [Array<String>]
|
|
42
48
|
def loaded_features
|
|
43
49
|
$LOADED_FEATURES
|
|
44
50
|
end
|
|
45
51
|
|
|
46
52
|
# @rbs return: Array[String]
|
|
53
|
+
# @return [Array<String>]
|
|
47
54
|
def load_path
|
|
48
55
|
$LOAD_PATH
|
|
49
56
|
end
|
|
@@ -51,6 +58,9 @@ module RubyModKit
|
|
|
51
58
|
# @rbs path: String
|
|
52
59
|
# @rbs expanded: bool
|
|
53
60
|
# @rbs return: String | nil
|
|
61
|
+
# @param path [String]
|
|
62
|
+
# @param expanded [Boolean]
|
|
63
|
+
# @return [String, nil]
|
|
54
64
|
def require_path(path, expanded: false)
|
|
55
65
|
if !expanded && !File.absolute_path?(path)
|
|
56
66
|
return load_path.each.lazy.map { require_path(File.join(_1, path), expanded: true) }.find(&:itself)
|
|
@@ -6,6 +6,7 @@ module RubyModKit
|
|
|
6
6
|
# the base class of corrector
|
|
7
7
|
class Corrector
|
|
8
8
|
# @rbs return: Array[Symbol]
|
|
9
|
+
# @return [Array<Symbol>]
|
|
9
10
|
def correctable_error_types
|
|
10
11
|
[]
|
|
11
12
|
end
|
|
@@ -13,11 +14,15 @@ module RubyModKit
|
|
|
13
14
|
# @rbs _parse_error: Prism::ParseError
|
|
14
15
|
# @rbs _generation: Generation
|
|
15
16
|
# @rbs return: void
|
|
17
|
+
# @param _parse_error [Prism::ParseError]
|
|
18
|
+
# @param _generation [Generation]
|
|
19
|
+
# @return [void]
|
|
16
20
|
def correct(_parse_error, _generation)
|
|
17
21
|
raise RubyModKit::Error, "Unexpected type #{self.class}"
|
|
18
22
|
end
|
|
19
23
|
|
|
20
24
|
# @rbs return: void
|
|
25
|
+
# @return [void]
|
|
21
26
|
def setup; end
|
|
22
27
|
end
|
|
23
28
|
end
|
|
@@ -10,6 +10,8 @@ module RubyModKit
|
|
|
10
10
|
|
|
11
11
|
# @rbs features: Array[Feature]
|
|
12
12
|
# @rbs return: void
|
|
13
|
+
# @param features [Array<Feature>]
|
|
14
|
+
# @return [void]
|
|
13
15
|
def initialize(features)
|
|
14
16
|
@previous_source = +""
|
|
15
17
|
@correctors_error_map = {}
|
|
@@ -24,6 +26,8 @@ module RubyModKit
|
|
|
24
26
|
|
|
25
27
|
# @rbs generation: Generation
|
|
26
28
|
# @rbs return: bool
|
|
29
|
+
# @param generation [Generation]
|
|
30
|
+
# @return [Boolean]
|
|
27
31
|
def perform(generation)
|
|
28
32
|
return true if generation.errors.empty?
|
|
29
33
|
|
|
@@ -46,6 +50,8 @@ module RubyModKit
|
|
|
46
50
|
|
|
47
51
|
# @rbs generation: Generation
|
|
48
52
|
# @rbs return: void
|
|
53
|
+
# @param generation [Generation]
|
|
54
|
+
# @return [void]
|
|
49
55
|
def check_prev_errors(generation)
|
|
50
56
|
return if @previous_source.empty?
|
|
51
57
|
return if generation.errors.empty?
|
data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_corrector.rb
CHANGED
|
@@ -8,6 +8,7 @@ module RubyModKit
|
|
|
8
8
|
# the class to correct `def foo(@bar) ...` -> `def foo(bar) ...`
|
|
9
9
|
class InstanceVariableParameterCorrector < Corrector
|
|
10
10
|
# @rbs return: Array[Symbol]
|
|
11
|
+
# @return [Array<Symbol>]
|
|
11
12
|
def correctable_error_types
|
|
12
13
|
%i[argument_formal_ivar]
|
|
13
14
|
end
|
|
@@ -15,6 +16,9 @@ module RubyModKit
|
|
|
15
16
|
# @rbs parse_error: Prism::ParseError
|
|
16
17
|
# @rbs generation: Generation
|
|
17
18
|
# @rbs return: void
|
|
19
|
+
# @param parse_error [Prism::ParseError]
|
|
20
|
+
# @param generation [Generation]
|
|
21
|
+
# @return [void]
|
|
18
22
|
def correct(parse_error, generation)
|
|
19
23
|
src_offset = parse_error.location.start_offset
|
|
20
24
|
|
data/lib/ruby_mod_kit/feature/instance_variable_parameter/instance_variable_parameter_mission.rb
CHANGED
|
@@ -9,6 +9,8 @@ module RubyModKit
|
|
|
9
9
|
class InstanceVariableParameterMission < Mission
|
|
10
10
|
# @rbs generation: Generation
|
|
11
11
|
# @rbs return: bool
|
|
12
|
+
# @param generation [Generation]
|
|
13
|
+
# @return [Boolean]
|
|
12
14
|
def perform(generation)
|
|
13
15
|
generation.memo_pad.each_parameter_memo do |parameter_memo|
|
|
14
16
|
next unless parameter_memo.ivar_parameter
|
|
@@ -7,6 +7,7 @@ module RubyModKit
|
|
|
7
7
|
# namespace for instance_variable parameter feature
|
|
8
8
|
class InstanceVariableParameter < Feature
|
|
9
9
|
# @rbs return: Array[Corrector]
|
|
10
|
+
# @return [Array<Corrector>]
|
|
10
11
|
def create_correctors
|
|
11
12
|
[
|
|
12
13
|
InstanceVariableParameterCorrector.new,
|
|
@@ -14,6 +15,7 @@ module RubyModKit
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
# @rbs return: Array[Mission]
|
|
18
|
+
# @return [Array<Mission>]
|
|
17
19
|
def create_missions
|
|
18
20
|
[
|
|
19
21
|
InstanceVariableParameterMission.new,
|
|
@@ -14,6 +14,7 @@ module RubyModKit
|
|
|
14
14
|
}.freeze #: Hash[Symbol, String]
|
|
15
15
|
|
|
16
16
|
# @rbs return: void
|
|
17
|
+
# @return [void]
|
|
17
18
|
def initialize
|
|
18
19
|
super
|
|
19
20
|
@modified = false
|
|
@@ -21,8 +22,19 @@ module RubyModKit
|
|
|
21
22
|
|
|
22
23
|
# @rbs generation: Generation
|
|
23
24
|
# @rbs return: bool
|
|
25
|
+
# @param generation [Generation]
|
|
26
|
+
# @return [Boolean]
|
|
24
27
|
def perform(generation)
|
|
25
|
-
|
|
28
|
+
if @modified
|
|
29
|
+
generation.memo_pad.overloads_memo.each_value do |overload_memo|
|
|
30
|
+
overload_memo.correct_offset(generation.root_node)
|
|
31
|
+
def_node = generation.root_node.def_node_at(overload_memo.offset)
|
|
32
|
+
raise RubyModKit::Error unless def_node.is_a?(Node::DefNode)
|
|
33
|
+
|
|
34
|
+
generation[def_node.end_offset, 0] = "\n" if def_node.parent.children[-1].offset > def_node.end_offset
|
|
35
|
+
end
|
|
36
|
+
return true
|
|
37
|
+
end
|
|
26
38
|
|
|
27
39
|
method_memo_groups = generation.memo_pad.methods_memo.each_value.group_by do |method_memo|
|
|
28
40
|
[generation.root_node.def_parent_node_at(method_memo.offset), method_memo.name]
|
|
@@ -50,18 +62,38 @@ module RubyModKit
|
|
|
50
62
|
end
|
|
51
63
|
|
|
52
64
|
script << "def #{name}(*args)\n case args\n"
|
|
53
|
-
|
|
54
|
-
method_memos.each_with_index do |method_memo, i|
|
|
55
|
-
overload_name = "#{overload_prefix}_overload#{i}"
|
|
65
|
+
method_memos.each do |method_memo|
|
|
56
66
|
def_node = generation.root_node.def_node_at(method_memo.offset)
|
|
57
|
-
|
|
67
|
+
body_node = def_node&.body_node
|
|
68
|
+
raise RubyModKit::Error unless def_node
|
|
69
|
+
|
|
70
|
+
def_start_offset = generation.line_offset(def_node) || raise(RubyModKit::Error)
|
|
71
|
+
def_end_offset = generation.end_line_offset(def_node) || raise(RubyModKit::Error)
|
|
72
|
+
def_end_offset += generation[def_end_offset..][/.*\n*/]&.size || 0
|
|
73
|
+
generation[def_start_offset, def_end_offset - def_start_offset] = ""
|
|
74
|
+
generation.memo_pad.delete(method_memo)
|
|
75
|
+
|
|
76
|
+
params = method_memo.parameters.map { |param| "#{param.type} => #{param.name}" }
|
|
77
|
+
script << " in [#{params.join(", ")}]\n"
|
|
78
|
+
|
|
79
|
+
body = nil
|
|
80
|
+
case body_node
|
|
81
|
+
when Node::StatementsNode
|
|
82
|
+
src_indent = generation.line_indent(body_node)
|
|
83
|
+
body = "#{src_indent}#{body_node.slice}\n".gsub(/^#{src_indent}/, " ")
|
|
84
|
+
when Node::BeginNode
|
|
85
|
+
src_indent = generation.line_indent(body_node)
|
|
86
|
+
src_line_offset = generation.line_offset(body_node.children[0]) || raise(RubyModKit::Error)
|
|
87
|
+
body = body_node.slice[(src_line_offset - body_node.offset)..]
|
|
88
|
+
body = "#{src_indent}begin\n#{body}\n".gsub(/^#{src_indent}/, " ")
|
|
89
|
+
when nil
|
|
90
|
+
body = ""
|
|
91
|
+
end
|
|
92
|
+
raise RubyModKit::Error unless body
|
|
58
93
|
|
|
59
|
-
|
|
60
|
-
generation[name_loc.start_offset, name_loc.length] = overload_name
|
|
61
|
-
script << " in [#{method_memo.parameters.map(&:type).join(", ")}]\n"
|
|
62
|
-
script << " #{overload_name}(*args)\n"
|
|
94
|
+
script << body
|
|
63
95
|
end
|
|
64
|
-
script << " end\nend\n
|
|
96
|
+
script << " end\nend\n"
|
|
65
97
|
|
|
66
98
|
script.gsub!(/^(?=.)/, indent)
|
|
67
99
|
generation[src_offset, 0] = script
|
|
@@ -10,6 +10,8 @@ module RubyModKit
|
|
|
10
10
|
class AddArgumentsCheckerMission < Mission
|
|
11
11
|
# @rbs generation: Generation
|
|
12
12
|
# @rbs return: bool
|
|
13
|
+
# @param generation [Generation]
|
|
14
|
+
# @return [Boolean]
|
|
13
15
|
def perform(generation)
|
|
14
16
|
# reload if line break is added
|
|
15
17
|
line_break_added = false
|
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
module RubyModKit
|
|
6
6
|
class Feature
|
|
7
7
|
class Type
|
|
8
|
+
# namespace for type checker
|
|
8
9
|
module Check
|
|
9
10
|
# namespace for arguments type checker
|
|
10
11
|
class Arguments < Feature
|
|
11
12
|
# @rbs return: Array[Mission]
|
|
13
|
+
# @return [Array<Mission>]
|
|
12
14
|
def create_missions
|
|
13
15
|
[
|
|
14
16
|
AddArgumentsCheckerMission.new,
|
|
@@ -12,6 +12,7 @@ module RubyModKit
|
|
|
12
12
|
REGEXP = /(\A\s*)(?:(#{VISIBILITIES.join("|")}) )?(?:(#{ATTR_PATTERNS.join("|")}) )?@(\w*)\s*:\s*(.*)\n(\n+)?/.freeze #: Regexp
|
|
13
13
|
|
|
14
14
|
# @rbs return: Array[Symbol]
|
|
15
|
+
# @return [Array<Symbol>]
|
|
15
16
|
def correctable_error_types
|
|
16
17
|
%i[unexpected_token_ignore]
|
|
17
18
|
end
|
|
@@ -19,6 +20,9 @@ module RubyModKit
|
|
|
19
20
|
# @rbs parse_error: Prism::ParseError
|
|
20
21
|
# @rbs generation: Generation
|
|
21
22
|
# @rbs return: void
|
|
23
|
+
# @param parse_error [Prism::ParseError]
|
|
24
|
+
# @param generation [Generation]
|
|
25
|
+
# @return [void]
|
|
22
26
|
def correct(parse_error, generation)
|
|
23
27
|
return if parse_error.location.slice != ":"
|
|
24
28
|
|
|
@@ -10,11 +10,13 @@ module RubyModKit
|
|
|
10
10
|
# @rbs @last_parameter_offsets: Set[Integer]
|
|
11
11
|
|
|
12
12
|
# @rbs return: Array[Symbol]
|
|
13
|
+
# @return [Array<Symbol>]
|
|
13
14
|
def correctable_error_types
|
|
14
15
|
%i[unexpected_token_ignore def_params_term_paren argument_formal_constant]
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
# @rbs return: void
|
|
19
|
+
# @return [void]
|
|
18
20
|
def setup
|
|
19
21
|
super
|
|
20
22
|
@last_parameter_offsets = Set.new
|
|
@@ -23,6 +25,9 @@ module RubyModKit
|
|
|
23
25
|
# @rbs parse_error: Prism::ParseError
|
|
24
26
|
# @rbs generation: Generation
|
|
25
27
|
# @rbs return: void
|
|
28
|
+
# @param parse_error [Prism::ParseError]
|
|
29
|
+
# @param generation [Generation]
|
|
30
|
+
# @return [void]
|
|
26
31
|
def correct(parse_error, generation)
|
|
27
32
|
case parse_error.type
|
|
28
33
|
when :unexpected_token_ignore
|
|
@@ -39,6 +44,9 @@ module RubyModKit
|
|
|
39
44
|
# @rbs parse_error: Prism::ParseError
|
|
40
45
|
# @rbs generation: Generation
|
|
41
46
|
# @rbs return: void
|
|
47
|
+
# @param parse_error [Prism::ParseError]
|
|
48
|
+
# @param generation [Generation]
|
|
49
|
+
# @return [void]
|
|
42
50
|
def remove_arrow_before_parameter(parse_error, generation)
|
|
43
51
|
def_node = generation.root_node.def_node_at(parse_error.location.start_offset) || return
|
|
44
52
|
def_parent_node = def_node.parent
|
|
@@ -71,6 +79,9 @@ module RubyModKit
|
|
|
71
79
|
# @rbs parse_error: Prism::ParseError
|
|
72
80
|
# @rbs generation: Generation
|
|
73
81
|
# @rbs return: void
|
|
82
|
+
# @param parse_error [Prism::ParseError]
|
|
83
|
+
# @param generation [Generation]
|
|
84
|
+
# @return [void]
|
|
74
85
|
def remove_arrow_after_quailifier(parse_error, generation)
|
|
75
86
|
column = parse_error.location.start_column - 1
|
|
76
87
|
return if column < 0
|
|
@@ -93,6 +104,9 @@ module RubyModKit
|
|
|
93
104
|
# @rbs parse_error: Prism::ParseError
|
|
94
105
|
# @rbs generation: Generation
|
|
95
106
|
# @rbs return: void
|
|
107
|
+
# @param parse_error [Prism::ParseError]
|
|
108
|
+
# @param generation [Generation]
|
|
109
|
+
# @return [void]
|
|
96
110
|
def wrap_parameter_type_for_next_parse(parse_error, generation)
|
|
97
111
|
line = generation.line(parse_error)
|
|
98
112
|
line = line[parse_error.location.start_column..] || return
|
|
@@ -11,6 +11,7 @@ module RubyModKit
|
|
|
11
11
|
# @rbs @reloaded: bool
|
|
12
12
|
|
|
13
13
|
# @rbs return: void
|
|
14
|
+
# @return [void]
|
|
14
15
|
def initialize
|
|
15
16
|
super
|
|
16
17
|
@reloaded = false
|
|
@@ -18,6 +19,8 @@ module RubyModKit
|
|
|
18
19
|
|
|
19
20
|
# @rbs generation: Generation
|
|
20
21
|
# @rbs return: bool
|
|
22
|
+
# @param generation [Generation]
|
|
23
|
+
# @return [Boolean]
|
|
21
24
|
def perform(generation)
|
|
22
25
|
return true unless generation.memo_pad.flags[:rbs_annotated]
|
|
23
26
|
|
|
@@ -10,6 +10,8 @@ module RubyModKit
|
|
|
10
10
|
class TypeAttrMission < Mission
|
|
11
11
|
# @rbs generation: Generation
|
|
12
12
|
# @rbs return: bool
|
|
13
|
+
# @param generation [Generation]
|
|
14
|
+
# @return [Boolean]
|
|
13
15
|
def perform(generation)
|
|
14
16
|
generation.memo_pad.def_parents_memo.each_value do |def_parent_memo|
|
|
15
17
|
ivars_memo = def_parent_memo.ivars_memo.dup
|
|
@@ -10,6 +10,8 @@ module RubyModKit
|
|
|
10
10
|
class TypeInstanceVariableMission < Mission
|
|
11
11
|
# @rbs generation: Generation
|
|
12
12
|
# @rbs return: bool
|
|
13
|
+
# @param generation [Generation]
|
|
14
|
+
# @return [Boolean]
|
|
13
15
|
def perform(generation)
|
|
14
16
|
generation.memo_pad.def_parents_memo.each_value do |def_parent_memo|
|
|
15
17
|
def_parent_memo.ivars_memo.each do |name, ivar_memo|
|
|
@@ -10,6 +10,8 @@ module RubyModKit
|
|
|
10
10
|
class TypeOverloadMission < Mission
|
|
11
11
|
# @rbs generation: Generation
|
|
12
12
|
# @rbs return: bool
|
|
13
|
+
# @param generation [Generation]
|
|
14
|
+
# @return [Boolean]
|
|
13
15
|
def perform(generation)
|
|
14
16
|
generation.memo_pad.overloads_memo.each_value do |overload_memo|
|
|
15
17
|
overload_memo.correct_offset(generation.root_node)
|
|
@@ -10,6 +10,8 @@ module RubyModKit
|
|
|
10
10
|
class TypeParameterMission < Mission
|
|
11
11
|
# @rbs generation: Generation
|
|
12
12
|
# @rbs return: bool
|
|
13
|
+
# @param generation [Generation]
|
|
14
|
+
# @return [Boolean]
|
|
13
15
|
def perform(generation)
|
|
14
16
|
generation.memo_pad.each_parameter_memo do |parameter_memo|
|
|
15
17
|
next if parameter_memo.untyped?
|
|
@@ -10,6 +10,8 @@ module RubyModKit
|
|
|
10
10
|
class TypeReturnMission < Mission
|
|
11
11
|
# @rbs generation: Generation
|
|
12
12
|
# @rbs return: bool
|
|
13
|
+
# @param generation [Generation]
|
|
14
|
+
# @return [Boolean]
|
|
13
15
|
def perform(generation)
|
|
14
16
|
generation.memo_pad.methods_memo.each do |offset, method_memo|
|
|
15
17
|
def_node = generation.root_node.def_node_at(offset)
|
|
@@ -8,6 +8,7 @@ module RubyModKit
|
|
|
8
8
|
# the class to correct `def foo: Some ...` -> `def foo ...`
|
|
9
9
|
class ReturnValueColonCorrector < Corrector
|
|
10
10
|
# @rbs return: Array[Symbol]
|
|
11
|
+
# @return [Array<Symbol>]
|
|
11
12
|
def correctable_error_types
|
|
12
13
|
%i[unexpected_token_ignore]
|
|
13
14
|
end
|
|
@@ -15,6 +16,9 @@ module RubyModKit
|
|
|
15
16
|
# @rbs parse_error: Prism::ParseError
|
|
16
17
|
# @rbs generation: Generation
|
|
17
18
|
# @rbs return: void
|
|
19
|
+
# @param parse_error [Prism::ParseError]
|
|
20
|
+
# @param generation [Generation]
|
|
21
|
+
# @return [void]
|
|
18
22
|
def correct(parse_error, generation)
|
|
19
23
|
return if parse_error.location.slice != ":"
|
|
20
24
|
|
|
@@ -10,6 +10,7 @@ module RubyModKit
|
|
|
10
10
|
# @rbs @modified: bool
|
|
11
11
|
|
|
12
12
|
# @rbs return: void
|
|
13
|
+
# @return [void]
|
|
13
14
|
def initialize
|
|
14
15
|
super
|
|
15
16
|
@modified = false
|
|
@@ -17,6 +18,8 @@ module RubyModKit
|
|
|
17
18
|
|
|
18
19
|
# @rbs generation: Generation
|
|
19
20
|
# @rbs return: bool
|
|
21
|
+
# @param generation [Generation]
|
|
22
|
+
# @return [Boolean]
|
|
20
23
|
def perform(generation)
|
|
21
24
|
return true if @modified
|
|
22
25
|
|
|
@@ -10,6 +10,8 @@ module RubyModKit
|
|
|
10
10
|
class TypeParameterMission < Mission
|
|
11
11
|
# @rbs generation: Generation
|
|
12
12
|
# @rbs return: bool
|
|
13
|
+
# @param generation [Generation]
|
|
14
|
+
# @return [Boolean]
|
|
13
15
|
def perform(generation)
|
|
14
16
|
generation.memo_pad.each_parameter_memo do |parameter_memo|
|
|
15
17
|
next if parameter_memo.untyped?
|
|
@@ -10,6 +10,8 @@ module RubyModKit
|
|
|
10
10
|
class TypeReturnMission < Mission
|
|
11
11
|
# @rbs generation: Generation
|
|
12
12
|
# @rbs return: bool
|
|
13
|
+
# @param generation [Generation]
|
|
14
|
+
# @return [Boolean]
|
|
13
15
|
def perform(generation)
|
|
14
16
|
generation.memo_pad.methods_memo.each do |offset, method_memo|
|
|
15
17
|
def_node = generation.root_node.def_node_at(offset)
|
|
@@ -8,6 +8,7 @@ module RubyModKit
|
|
|
8
8
|
# namespace for type with rbs-line feature
|
|
9
9
|
class Yard < Feature
|
|
10
10
|
# @rbs return: Array[Mission]
|
|
11
|
+
# @return [Array<Mission>]
|
|
11
12
|
def create_missions
|
|
12
13
|
[
|
|
13
14
|
TypeParameterMission.new,
|
|
@@ -18,6 +19,8 @@ module RubyModKit
|
|
|
18
19
|
class << self
|
|
19
20
|
# @rbs type: String
|
|
20
21
|
# @rbs return: String
|
|
22
|
+
# @param type [String]
|
|
23
|
+
# @return [String]
|
|
21
24
|
def rbs2yard(type)
|
|
22
25
|
type.gsub(/\s*\|\s*/, ", ").tr("[]", "<>").gsub(/(?<=^|\W)bool(?=$|\W)/, "Boolean")
|
|
23
26
|
end
|
|
@@ -7,6 +7,7 @@ module RubyModKit
|
|
|
7
7
|
# namespace for type feature
|
|
8
8
|
class Type < Feature
|
|
9
9
|
# @rbs return: Array[Corrector]
|
|
10
|
+
# @return [Array<Corrector>]
|
|
10
11
|
def create_correctors
|
|
11
12
|
[
|
|
12
13
|
InstanceVariableColonCorrector.new,
|
|
@@ -16,6 +17,7 @@ module RubyModKit
|
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
# @rbs return: Array[Mission]
|
|
20
|
+
# @return [Array<Mission>]
|
|
19
21
|
def create_missions
|
|
20
22
|
[
|
|
21
23
|
TypeAttrMission.new,
|
data/lib/ruby_mod_kit/feature.rb
CHANGED
|
@@ -6,11 +6,13 @@ module RubyModKit
|
|
|
6
6
|
# the base class of feature
|
|
7
7
|
class Feature
|
|
8
8
|
# @rbs return: Array[Corrector]
|
|
9
|
+
# @return [Array<Corrector>]
|
|
9
10
|
def create_correctors
|
|
10
11
|
[]
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
# @rbs return: Array[Mission]
|
|
15
|
+
# @return [Array<Mission>]
|
|
14
16
|
def create_missions
|
|
15
17
|
[]
|
|
16
18
|
end
|