ruby_mod_kit 0.0.5 → 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/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
|