steep 1.7.0.dev.1 → 1.7.0.dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +13 -15
- data/Rakefile +5 -0
- data/gemfile_steep/Gemfile +1 -1
- data/gemfile_steep/Gemfile.lock +11 -13
- data/lib/steep/ast/types/helper.rb +4 -0
- data/lib/steep/ast/types/intersection.rb +7 -0
- data/lib/steep/ast/types/record.rb +7 -0
- data/lib/steep/ast/types/tuple.rb +7 -0
- data/lib/steep/ast/types/union.rb +7 -0
- data/lib/steep/drivers/stats.rb +2 -2
- data/lib/steep/drivers/validate.rb +4 -2
- data/lib/steep/expectations.rb +2 -2
- data/lib/steep/interface/builder.rb +336 -360
- data/lib/steep/interface/function.rb +69 -6
- data/lib/steep/interface/method_type.rb +3 -3
- data/lib/steep/interface/shape.rb +69 -18
- data/lib/steep/interface/substitution.rb +4 -0
- data/lib/steep/node_helper.rb +18 -1
- data/lib/steep/services/completion_provider.rb +19 -17
- data/lib/steep/services/signature_help_provider.rb +19 -20
- data/lib/steep/subtyping/check.rb +10 -16
- data/lib/steep/subtyping/result.rb +6 -0
- data/lib/steep/test.rb +9 -0
- data/lib/steep/type_construction.rb +13 -13
- data/lib/steep/type_inference/block_params.rb +11 -3
- data/lib/steep/type_inference/context.rb +1 -1
- data/lib/steep/type_inference/logic_type_interpreter.rb +1 -1
- data/lib/steep/version.rb +1 -1
- data/lib/steep.rb +11 -7
- data/sig/steep/ast/types/helper.rbs +2 -0
- data/sig/steep/ast/types/intersection.rbs +2 -0
- data/sig/steep/ast/types/name.rbs +4 -0
- data/sig/steep/ast/types/record.rbs +2 -0
- data/sig/steep/ast/types/tuple.rbs +2 -0
- data/sig/steep/ast/types/union.rbs +2 -0
- data/sig/steep/expectations.rbs +1 -1
- data/sig/steep/interface/block.rbs +2 -2
- data/sig/steep/interface/builder.rbs +94 -108
- data/sig/steep/interface/function.rbs +34 -29
- data/sig/steep/interface/shape.rbs +23 -4
- data/sig/steep/interface/substitution.rbs +2 -0
- data/sig/steep/node_helper.rbs +11 -0
- data/sig/steep/services/signature_help_provider.rbs +2 -0
- data/sig/steep/subtyping/check.rbs +2 -0
- data/sig/steep/subtyping/constraints.rbs +2 -2
- data/sig/steep/subtyping/result.rbs +5 -1
- data/sig/steep/type_construction.rbs +1 -1
- data/sig/steep/type_inference/block_params.rbs +2 -2
- data/sig/steep/type_inference/context.rbs +2 -0
- data/sig/steep.rbs +1 -1
- metadata +3 -3
- data/sig/steep/type_inference/branch.rbs +0 -15
@@ -878,6 +878,7 @@ module Steep
|
|
878
878
|
if self_type && method_context!.method
|
879
879
|
if super_def = method_context!.super_method
|
880
880
|
super_method = Interface::Shape::Entry.new(
|
881
|
+
private_method: true,
|
881
882
|
method_types: super_def.defs.map {|type_def|
|
882
883
|
decl = TypeInference::MethodCall::MethodDecl.new(
|
883
884
|
method_name: InstanceMethodName.new(
|
@@ -1812,7 +1813,7 @@ module Steep
|
|
1812
1813
|
.for_branch(right_node)
|
1813
1814
|
.synthesize(right_node, hint: left_truthy.type, condition: true).to_ary
|
1814
1815
|
|
1815
|
-
right_truthy, right_falsy = interpreter.eval(env:
|
1816
|
+
right_truthy, right_falsy = interpreter.eval(env: right_context.type_env, node: right_node)
|
1816
1817
|
|
1817
1818
|
case
|
1818
1819
|
when left_falsy.unreachable
|
@@ -2611,6 +2612,7 @@ module Steep
|
|
2611
2612
|
end
|
2612
2613
|
end
|
2613
2614
|
rescue RBS::BaseError => exn
|
2615
|
+
Steep.logger.warn("hello")
|
2614
2616
|
Steep.logger.warn { "Unexpected RBS error: #{exn.message}" }
|
2615
2617
|
exn.backtrace&.each {|loc| Steep.logger.warn " #{loc}" }
|
2616
2618
|
typing.add_error(Diagnostic::Ruby::UnexpectedError.new(node: node, error: exn))
|
@@ -3431,16 +3433,16 @@ module Steep
|
|
3431
3433
|
self_type: self_type,
|
3432
3434
|
class_type: module_context.module_type,
|
3433
3435
|
instance_type: module_context.instance_type,
|
3434
|
-
variable_bounds: variable_context.upper_bounds
|
3436
|
+
variable_bounds: context.variable_context.upper_bounds
|
3435
3437
|
)
|
3436
3438
|
end
|
3437
3439
|
|
3438
3440
|
def calculate_interface(type, method_name = nil, private:)
|
3439
|
-
shape = checker.builder.shape(
|
3440
|
-
|
3441
|
-
|
3442
|
-
|
3443
|
-
|
3441
|
+
shape = checker.builder.shape(type, builder_config)
|
3442
|
+
|
3443
|
+
unless private
|
3444
|
+
shape = shape&.public_shape
|
3445
|
+
end
|
3444
3446
|
|
3445
3447
|
if method_name
|
3446
3448
|
if shape
|
@@ -3622,10 +3624,6 @@ module Steep
|
|
3622
3624
|
end
|
3623
3625
|
end
|
3624
3626
|
|
3625
|
-
def inspect
|
3626
|
-
"#<#{self.class}>"
|
3627
|
-
end
|
3628
|
-
|
3629
3627
|
def with_child_typing(range:)
|
3630
3628
|
constr = with_new_typing(typing.new_child(range))
|
3631
3629
|
|
@@ -4353,7 +4351,7 @@ module Steep
|
|
4353
4351
|
def for_block(body_node, block_params:, block_param_hint:, block_type_hint:, block_block_hint:, block_annotations:, node_type_hint:, block_self_hint:)
|
4354
4352
|
block_param_pairs = block_param_hint && block_params.zip(block_param_hint, block_block_hint, factory: checker.factory)
|
4355
4353
|
|
4356
|
-
# @type var param_types_hash: Hash[Symbol
|
4354
|
+
# @type var param_types_hash: Hash[Symbol?, AST::Types::t]
|
4357
4355
|
param_types_hash = {}
|
4358
4356
|
if block_param_pairs
|
4359
4357
|
block_param_pairs.each do |param, type|
|
@@ -4388,10 +4386,12 @@ module Steep
|
|
4388
4386
|
end
|
4389
4387
|
end
|
4390
4388
|
|
4391
|
-
param_types_hash.delete_if {|name, _| SPECIAL_LVAR_NAMES.include?(name) }
|
4389
|
+
param_types_hash.delete_if {|name, _| name && SPECIAL_LVAR_NAMES.include?(name) }
|
4392
4390
|
|
4393
4391
|
param_types = param_types_hash.each.with_object({}) do |pair, hash| #$ Hash[Symbol, [AST::Types::t, AST::Types::t?]]
|
4394
4392
|
name, type = pair
|
4393
|
+
# skip unamed arguments `*`, `**` and `&`
|
4394
|
+
next if name.nil?
|
4395
4395
|
hash[name] = [type, nil]
|
4396
4396
|
end
|
4397
4397
|
|
@@ -57,8 +57,9 @@ module Steep
|
|
57
57
|
|
58
58
|
def variable_types
|
59
59
|
each_param.with_object({}) do |param, hash|
|
60
|
+
var_name = param.var || next
|
60
61
|
# @type var hash: Hash[Symbol, AST::Types::t?]
|
61
|
-
hash[
|
62
|
+
hash[var_name] = param.type
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
@@ -133,10 +134,17 @@ module Steep
|
|
133
134
|
else
|
134
135
|
var = arg.children[0]
|
135
136
|
type = annotations.var_type(lvar: var)
|
136
|
-
|
137
137
|
case arg.type
|
138
|
-
when :arg
|
138
|
+
when :arg
|
139
139
|
default_params << Param.new(var: var, type: type, value: nil, node: arg)
|
140
|
+
when :procarg0
|
141
|
+
var = arg.children[0]
|
142
|
+
if var.is_a?(Symbol)
|
143
|
+
default_params << Param.new(var: var, type: type, value: nil, node: arg)
|
144
|
+
else
|
145
|
+
var = var.children[0]
|
146
|
+
default_params << Param.new(var: var, type: type, value: nil, node: arg)
|
147
|
+
end
|
140
148
|
when :optarg
|
141
149
|
default_params = trailing_params
|
142
150
|
optional_params << Param.new(var: var, type: type, value: arg.children.last, node: arg)
|
@@ -125,7 +125,7 @@ module Steep
|
|
125
125
|
end
|
126
126
|
|
127
127
|
def upper_bounds
|
128
|
-
table.each_value.with_object({}) do |type_param, bounds|
|
128
|
+
@upper_bounds ||= table.each_value.with_object({}) do |type_param, bounds|
|
129
129
|
if type_param.upper_bound
|
130
130
|
bounds[type_param.name] = type_param.upper_bound
|
131
131
|
end
|
@@ -593,7 +593,7 @@ module Steep
|
|
593
593
|
end
|
594
594
|
|
595
595
|
def try_convert(type, method)
|
596
|
-
if shape = subtyping.builder.shape(type,
|
596
|
+
if shape = subtyping.builder.shape(type, config)
|
597
597
|
if entry = shape.methods[method]
|
598
598
|
method_type = entry.method_types.find do |method_type|
|
599
599
|
method_type.type.params.optional?
|
data/lib/steep/version.rb
CHANGED
data/lib/steep.rb
CHANGED
@@ -186,15 +186,19 @@ module Steep
|
|
186
186
|
@ui_logger = nil
|
187
187
|
self.log_output = STDERR
|
188
188
|
|
189
|
-
def self.measure(message, level: :warn)
|
189
|
+
def self.measure(message, level: :warn, threshold: 0.0)
|
190
190
|
start = Time.now
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
level
|
191
|
+
begin
|
192
|
+
yield
|
193
|
+
ensure
|
194
|
+
time = Time.now - start
|
195
|
+
if level.is_a?(Symbol)
|
196
|
+
level = Logger.const_get(level.to_s.upcase)
|
197
|
+
end
|
198
|
+
if time > threshold
|
199
|
+
self.logger.log(level) { "#{message} took #{time} seconds" }
|
200
|
+
end
|
196
201
|
end
|
197
|
-
self.logger.log(level) { "#{message} took #{time} seconds" }
|
198
202
|
end
|
199
203
|
|
200
204
|
def self.log_error(exn, message: "Unexpected error: #{exn.inspect}")
|
@@ -51,6 +51,7 @@ module Steep
|
|
51
51
|
def map_type: () { (t) -> t } -> self
|
52
52
|
end
|
53
53
|
|
54
|
+
# Singleton of a class/module
|
54
55
|
class Singleton < Base
|
55
56
|
def ==: (untyped other) -> bool
|
56
57
|
|
@@ -65,13 +66,16 @@ module Steep
|
|
65
66
|
include Helper::NoChild
|
66
67
|
end
|
67
68
|
|
69
|
+
# An instance of a class/module
|
68
70
|
class Instance < Applying
|
69
71
|
def to_module: () -> Singleton
|
70
72
|
end
|
71
73
|
|
74
|
+
# An interface type
|
72
75
|
class Interface < Applying
|
73
76
|
end
|
74
77
|
|
78
|
+
# Type alias
|
75
79
|
class Alias < Applying
|
76
80
|
end
|
77
81
|
end
|
data/sig/steep/expectations.rbs
CHANGED
@@ -19,7 +19,7 @@ module Steep
|
|
19
19
|
|
20
20
|
def initialize: (start_position: position, end_position: position, severity: Steep::Diagnostic::LSPFormatter::severity, message: String, code: String) -> void
|
21
21
|
|
22
|
-
def self.from_hash: (untyped) ->
|
22
|
+
def self.from_hash: (untyped) -> Diagnostic
|
23
23
|
|
24
24
|
def self.from_lsp: (untyped) -> Diagnostic
|
25
25
|
|
@@ -6,161 +6,147 @@ module Steep
|
|
6
6
|
class Config
|
7
7
|
# Type of `self` type included immediately in the type expression
|
8
8
|
#
|
9
|
-
attr_reader self_type: AST::Types::t
|
9
|
+
attr_reader self_type: AST::Types::t?
|
10
10
|
|
11
11
|
# Type of `class` type included immediately in the type expression
|
12
12
|
#
|
13
|
-
attr_reader class_type: AST::Types::t
|
13
|
+
attr_reader class_type: AST::Types::t?
|
14
14
|
|
15
15
|
# Type of `instance` type included immediately in the type expression
|
16
16
|
#
|
17
|
-
attr_reader instance_type: AST::Types::t
|
17
|
+
attr_reader instance_type: AST::Types::t?
|
18
18
|
|
19
|
-
#
|
20
|
-
|
21
|
-
# * `false` only when the type expression is `self`
|
22
|
-
#
|
23
|
-
attr_reader resolve_self: bool
|
19
|
+
# Upper bounds of type variables
|
20
|
+
attr_reader variable_bounds: Hash[Symbol, AST::Types::t?]
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
# * `false` only when the type expression is `class`
|
28
|
-
#
|
29
|
-
attr_reader resolve_class: bool
|
22
|
+
def initialize: (self_type: AST::Types::t?, variable_bounds: Hash[Symbol, AST::Types::t?]) -> void
|
23
|
+
| (self_type: AST::Types::t?, class_type: AST::Types::t, instance_type: AST::Types::t, variable_bounds: Hash[Symbol, AST::Types::t?]) -> void
|
30
24
|
|
31
|
-
|
32
|
-
#
|
33
|
-
# * `false` only when the type expression is `instance`
|
34
|
-
#
|
35
|
-
attr_reader resolve_instance: bool
|
25
|
+
def subst: () -> Substitution?
|
36
26
|
|
37
|
-
|
27
|
+
def self.empty: () -> Config
|
38
28
|
|
39
|
-
def
|
40
|
-
self_type: AST::Types::t,
|
41
|
-
class_type: AST::Types::t | nil,
|
42
|
-
instance_type: AST::Types::t | nil,
|
43
|
-
?resolve_self: bool,
|
44
|
-
?resolve_class: bool,
|
45
|
-
?resolve_instance: bool,
|
46
|
-
variable_bounds: Hash[Symbol, AST::Types::t?]
|
47
|
-
) -> void
|
29
|
+
def upper_bound: (Symbol) -> AST::Types::t?
|
48
30
|
|
49
|
-
|
50
|
-
?self_type: AST::Types::t,
|
51
|
-
?class_type: AST::Types::t | nil,
|
52
|
-
?instance_type: AST::Types::t | nil,
|
53
|
-
?resolve_self: bool,
|
54
|
-
?resolve_class: bool,
|
55
|
-
?resolve_instance: bool,
|
56
|
-
?variable_bounds: Hash[Symbol, AST::Types::t?]
|
57
|
-
) -> self
|
31
|
+
private
|
58
32
|
|
59
|
-
|
60
|
-
def no_resolve: () -> self
|
33
|
+
def validate: () -> self
|
61
34
|
|
62
|
-
def
|
35
|
+
def validate_fvs: (Symbol name, AST::Types::t?) -> void
|
36
|
+
end
|
63
37
|
|
64
|
-
|
38
|
+
attr_reader factory: AST::Types::Factory
|
65
39
|
|
66
|
-
|
40
|
+
# # No type application (if generic), no self-instance-module resolution
|
41
|
+
attr_reader object_shape_cache: Hash[TypeName, Shape?]
|
67
42
|
|
68
|
-
|
43
|
+
attr_reader union_shape_cache: Hash[AST::Types::Union, Shape?]
|
69
44
|
|
70
|
-
|
45
|
+
attr_reader singleton_shape_cache: Hash[TypeName, Shape?]
|
71
46
|
|
72
|
-
|
73
|
-
def subst: () -> Substitution
|
47
|
+
def initialize: (AST::Types::Factory) -> void
|
74
48
|
|
75
|
-
|
76
|
-
#
|
77
|
-
def self_type?: () -> AST::Types::t?
|
49
|
+
def fetch_cache: [KEY] (Hash[KEY, Shape?], KEY) { () -> Shape? } -> Shape?
|
78
50
|
|
79
|
-
|
80
|
-
|
81
|
-
|
51
|
+
# Returns a shape of given type with respect to Config
|
52
|
+
#
|
53
|
+
# * If `self` occurs in the given type, it returns types with `self`
|
54
|
+
# * If `self` doesn't occur in the given type, it returns type withohut `self`, that is resolved to `config.self_type`
|
55
|
+
#
|
56
|
+
def shape: (AST::Types::t, Config) -> Shape?
|
82
57
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
58
|
+
# Returns a shape of given type with respect to Config
|
59
|
+
#
|
60
|
+
# The `self` types included in the returned Shape is the `self` type in the top level
|
61
|
+
#
|
62
|
+
# * `raw_shape(<self>)` -> may return a shape with `self`
|
63
|
+
# * `raw_shape(<Array[self]>) -> returns a shape that returns `self` from `#first` method
|
64
|
+
#
|
65
|
+
def raw_shape: (AST::Types::t, Config) -> Shape?
|
87
66
|
|
88
|
-
|
67
|
+
def self_shape: (AST::Types::t, Config) -> Shape?
|
89
68
|
|
90
|
-
|
91
|
-
AST::Types::t, # type
|
92
|
-
bool, # public_only
|
93
|
-
AST::Types::t | nil, # self_type
|
94
|
-
AST::Types::t | nil, # class_type
|
95
|
-
AST::Types::t | nil, # instance_type
|
96
|
-
bool, bool, bool, # resolve_self, resolve_class, resolve_instance
|
97
|
-
Hash[Symbol, AST::Types::t?]? # variable_bounds
|
98
|
-
]
|
99
|
-
attr_reader cache: Hash[cache_key, Shape?]
|
69
|
+
private
|
100
70
|
|
101
|
-
|
102
|
-
attr_reader raw_instance_object_shape_cache: Hash[[TypeName, bool], Shape]
|
71
|
+
def object_shape: (RBS::TypeName) -> Shape
|
103
72
|
|
104
|
-
|
73
|
+
def singleton_shape: (RBS::TypeName) -> Shape
|
105
74
|
|
106
|
-
|
75
|
+
def union_shape: (AST::Types::t, Array[Shape]) -> Shape?
|
107
76
|
|
108
|
-
def
|
77
|
+
def intersection_shape: (AST::Types::t, Array[Shape]) -> Shape?
|
109
78
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
79
|
+
def proc_shape: (AST::Types::Proc, Shape) -> Shape
|
80
|
+
|
81
|
+
def tuple_shape: (AST::Types::Tuple) { (AST::Types::Name::Instance) -> Shape? } -> Shape?
|
82
|
+
|
83
|
+
def record_shape: (AST::Types::Record) { (AST::Types::Name::Instance) -> Shape? } -> Shape?
|
84
|
+
|
85
|
+
# Substitution for `self`/`instance`/`class` types, built from the name of given type
|
115
86
|
#
|
116
|
-
def
|
87
|
+
def class_subst: (AST::Types::Name::Instance | AST::Types::Name::Singleton) -> Substitution
|
117
88
|
|
118
|
-
|
89
|
+
def interface_subst: (AST::Types::Name::Interface) -> Substitution
|
90
|
+
|
91
|
+
# Substitution for type application of class instance, type alias, or interface types
|
92
|
+
def app_subst: (AST::Types::Name::Instance | AST::Types::Name::Alias | AST::Types::Name::Interface) -> Substitution
|
93
|
+
|
94
|
+
def method_name_for: (RBS::Definition::Method::TypeDef, Symbol name) -> method_name
|
95
|
+
|
96
|
+
def replace_primitive_method: (method_name, RBS::Definition::Method::TypeDef, MethodType) -> MethodType
|
97
|
+
|
98
|
+
# # Calculates the shape of given class, based on `public_only` and Config
|
99
|
+
# #
|
100
|
+
# # Returns `nil` if a type that cannot calculate Shape is given.
|
101
|
+
# #
|
102
|
+
# # * `public_only`: If false, returns a shape with private methods.
|
103
|
+
# #
|
104
|
+
# def shape: (AST::Types::t, public_only: bool, config: Config) -> Shape?
|
105
|
+
|
106
|
+
# private
|
119
107
|
|
120
108
|
@subtyping: Subtyping::Check?
|
121
109
|
|
122
110
|
def subtyping: () -> Subtyping::Check
|
123
111
|
|
124
|
-
# Fetch and update cache
|
125
|
-
#
|
126
|
-
# Cache if given type is cacheable:
|
127
|
-
#
|
128
|
-
# * `self`, `instance`, `class` is not cacheable
|
129
|
-
# * Type variables are not cacheable
|
130
|
-
#
|
131
|
-
def fetch_cache: (AST::Types::t, bool public_only, Config) { () -> Shape? } -> Shape?
|
112
|
+
# # Fetch and update cache
|
113
|
+
# #
|
114
|
+
# # Cache if given type is cacheable:
|
115
|
+
# #
|
116
|
+
# # * `self`, `instance`, `class` is not cacheable
|
117
|
+
# # * Type variables are not cacheable
|
118
|
+
# #
|
119
|
+
# def fetch_cache: (AST::Types::t, bool public_only, Config) { () -> Shape? } -> Shape?
|
132
120
|
|
133
|
-
def include_self?: (AST::Types::t) -> bool
|
121
|
+
# def include_self?: (AST::Types::t) -> bool
|
134
122
|
|
135
|
-
def definition_builder: () -> RBS::DefinitionBuilder
|
123
|
+
# def definition_builder: () -> RBS::DefinitionBuilder
|
136
124
|
|
137
|
-
def object_shape: (
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
) -> Shape
|
125
|
+
# def object_shape: (
|
126
|
+
# AST::Types::Name::Instance | AST::Types::Name::Singleton | AST::Types::Name::Interface,
|
127
|
+
# bool public_only,
|
128
|
+
# boolish keep_self,
|
129
|
+
# boolish keep_instance,
|
130
|
+
# boolish keep_singleton
|
131
|
+
# ) -> Shape
|
144
132
|
|
145
|
-
def raw_object_shape: (
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
) -> Shape
|
133
|
+
# def raw_object_shape: (
|
134
|
+
# AST::Types::Name::Instance | AST::Types::Name::Singleton | AST::Types::Name::Interface,
|
135
|
+
# bool public_only,
|
136
|
+
# Substitution subst
|
137
|
+
# ) -> Shape
|
150
138
|
|
151
|
-
def union_shape: (AST::Types::t, Array[Shape], bool public_only) -> Shape
|
139
|
+
# def union_shape: (AST::Types::t, Array[Shape], bool public_only) -> Shape
|
152
140
|
|
153
|
-
def intersection_shape: (AST::Types::t, Array[Shape], bool public_only) -> Shape
|
141
|
+
# def intersection_shape: (AST::Types::t, Array[Shape], bool public_only) -> Shape
|
154
142
|
|
155
|
-
def tuple_shape: (AST::Types::Tuple, bool public_only, Config) -> Shape
|
143
|
+
# def tuple_shape: (AST::Types::Tuple, bool public_only, Config) -> Shape
|
156
144
|
|
157
|
-
def record_shape: (AST::Types::Record, bool public_only, Config) -> Shape?
|
145
|
+
# def record_shape: (AST::Types::Record, bool public_only, Config) -> Shape?
|
158
146
|
|
159
|
-
def proc_shape: (AST::Types::Proc, bool public_only, Config) -> Shape?
|
147
|
+
# def proc_shape: (AST::Types::Proc, bool public_only, Config) -> Shape?
|
160
148
|
|
161
|
-
def replace_primitive_method: (method_name, RBS::Definition::Method::TypeDef, MethodType) -> MethodType
|
162
149
|
|
163
|
-
def method_name_for: (RBS::Definition::Method::TypeDef, Symbol name) -> method_name
|
164
150
|
end
|
165
151
|
end
|
166
152
|
end
|