steep 1.7.0.dev.2 → 1.7.0.dev.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +17 -19
- data/doc/narrowing.md +1 -1
- data/doc/shape.md +176 -0
- data/gemfile_steep/Gemfile.lock +10 -12
- data/lib/steep/ast/types/factory.rb +27 -18
- data/lib/steep/ast/types/helper.rb +4 -0
- data/lib/steep/ast/types/intersection.rb +7 -0
- data/lib/steep/ast/types/proc.rb +14 -9
- 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/block.rb +1 -1
- data/lib/steep/interface/builder.rb +337 -360
- data/lib/steep/interface/function.rb +82 -11
- data/lib/steep/interface/method_type.rb +18 -10
- 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/project/pattern.rb +1 -2
- data/lib/steep/server/interaction_worker.rb +6 -0
- data/lib/steep/server/lsp_formatter.rb +2 -0
- data/lib/steep/services/completion_provider.rb +20 -18
- data/lib/steep/services/file_loader.rb +15 -20
- data/lib/steep/services/signature_help_provider.rb +17 -18
- data/lib/steep/signature/validator.rb +1 -1
- data/lib/steep/subtyping/check.rb +19 -22
- data/lib/steep/subtyping/variable_variance.rb +3 -3
- data/lib/steep/test.rb +9 -0
- data/lib/steep/type_construction.rb +198 -158
- data/lib/steep/type_inference/block_params.rb +12 -4
- data/lib/steep/type_inference/context.rb +1 -1
- data/lib/steep/type_inference/logic_type_interpreter.rb +3 -2
- data/lib/steep/type_inference/method_params.rb +16 -0
- data/lib/steep/type_inference/send_args.rb +5 -2
- data/lib/steep/version.rb +1 -1
- data/lib/steep.rb +11 -7
- data/sig/steep/ast/types/factory.rbs +2 -2
- 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 +54 -109
- data/sig/steep/interface/function.rbs +38 -32
- 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 +3 -1
- data/sig/steep/subtyping/constraints.rbs +2 -2
- data/sig/steep/subtyping/variable_variance.rbs +1 -1
- data/sig/steep/type_construction.rbs +1 -1
- data/sig/steep/type_inference/block_params.rbs +3 -3
- data/sig/steep/type_inference/context.rbs +2 -0
- data/sig/steep/type_inference/method_params.rbs +3 -3
- data/sig/steep.rbs +1 -1
- data/steep.gemspec +1 -1
- metadata +6 -4
@@ -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,106 @@ 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
|
18
|
-
|
19
|
-
# Resolves `self` types included in shape members
|
20
|
-
#
|
21
|
-
# * `false` only when the type expression is `self`
|
22
|
-
#
|
23
|
-
attr_reader resolve_self: bool
|
24
|
-
|
25
|
-
# Resolves `class` types included in shape members
|
26
|
-
#
|
27
|
-
# * `false` only when the type expression is `class`
|
28
|
-
#
|
29
|
-
attr_reader resolve_class: bool
|
30
|
-
|
31
|
-
# Resolves `instance` types included in shape members
|
32
|
-
#
|
33
|
-
# * `false` only when the type expression is `instance`
|
34
|
-
#
|
35
|
-
attr_reader resolve_instance: bool
|
17
|
+
attr_reader instance_type: AST::Types::t?
|
36
18
|
|
19
|
+
# Upper bounds of type variables
|
37
20
|
attr_reader variable_bounds: Hash[Symbol, AST::Types::t?]
|
38
21
|
|
39
|
-
def initialize: (
|
40
|
-
|
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
|
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
|
48
24
|
|
49
|
-
def
|
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
|
25
|
+
def subst: () -> Substitution?
|
58
26
|
|
59
|
-
|
60
|
-
def no_resolve: () -> self
|
27
|
+
def self.empty: () -> Config
|
61
28
|
|
62
|
-
def
|
29
|
+
def upper_bound: (Symbol) -> AST::Types::t?
|
63
30
|
|
64
|
-
|
31
|
+
private
|
65
32
|
|
66
|
-
|
33
|
+
def validate: () -> self
|
67
34
|
|
68
|
-
def
|
69
|
-
|
70
|
-
@subst: Substitution
|
71
|
-
|
72
|
-
# Substitution for immediate type expressions
|
73
|
-
def subst: () -> Substitution
|
74
|
-
|
75
|
-
# Returns `self_type`, or `nil` when it is `Types::Self`
|
76
|
-
#
|
77
|
-
def self_type?: () -> AST::Types::t?
|
78
|
-
|
79
|
-
# Returns `class_type`, or `nil` when it is `Types::Class`
|
80
|
-
#
|
81
|
-
def class_type?: () -> AST::Types::t?
|
82
|
-
|
83
|
-
# Returns `instanc_type`, or `nil` when it is `Types::Instance`
|
84
|
-
#
|
85
|
-
def instance_type?: () -> AST::Types::t?
|
35
|
+
def validate_fvs: (Symbol name, AST::Types::t?) -> void
|
86
36
|
end
|
87
37
|
|
88
38
|
attr_reader factory: AST::Types::Factory
|
89
39
|
|
90
|
-
type
|
91
|
-
|
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?]
|
40
|
+
# # No type application (if generic), no self-instance-module resolution
|
41
|
+
attr_reader object_shape_cache: Hash[TypeName, Shape?]
|
100
42
|
|
101
|
-
|
102
|
-
attr_reader raw_instance_object_shape_cache: Hash[[TypeName, bool], Shape]
|
43
|
+
attr_reader union_shape_cache: Hash[AST::Types::Union, Shape?]
|
103
44
|
|
104
|
-
attr_reader
|
105
|
-
|
106
|
-
attr_reader raw_interface_object_shape_cache: Hash[[TypeName, bool], Shape]
|
45
|
+
attr_reader singleton_shape_cache: Hash[TypeName, Shape?]
|
107
46
|
|
108
47
|
def initialize: (AST::Types::Factory) -> void
|
109
48
|
|
110
|
-
#
|
111
|
-
#
|
112
|
-
# Returns `nil` if a type that cannot calculate Shape is given.
|
49
|
+
# Returns a shape of given type with respect to Config
|
113
50
|
#
|
114
|
-
# * `
|
51
|
+
# * If `self` occurs in the given type, it returns types with `self`
|
52
|
+
# * If `self` doesn't occur in the given type, it returns type withohut `self`, that is resolved to `config.self_type`
|
115
53
|
#
|
116
|
-
def shape: (AST::Types::t,
|
54
|
+
def shape: (AST::Types::t, Config) -> Shape?
|
117
55
|
|
118
56
|
private
|
119
57
|
|
120
|
-
|
58
|
+
def fetch_cache: [KEY] (Hash[KEY, Shape?], KEY) { () -> Shape? } -> Shape?
|
121
59
|
|
122
|
-
|
60
|
+
# Returns a shape of given type with respect to Config
|
61
|
+
#
|
62
|
+
# The `self` types included in the returned Shape is the `self` type in the top level
|
63
|
+
#
|
64
|
+
# * `raw_shape(<self>)` -> may return a shape with `self`
|
65
|
+
# * `raw_shape(<Array[self]>) -> returns a shape that returns `self` from `#first` method
|
66
|
+
#
|
67
|
+
def raw_shape: (AST::Types::t, Config) -> Shape?
|
68
|
+
|
69
|
+
def self_shape: (AST::Types::t, Config) -> Shape?
|
123
70
|
|
124
|
-
#
|
71
|
+
# Returns a shape of instance type and interface type
|
125
72
|
#
|
126
|
-
#
|
73
|
+
# The `self` types included in the shape is the `self` types in the definition.
|
127
74
|
#
|
128
|
-
|
129
|
-
|
75
|
+
def object_shape: (RBS::TypeName) -> Shape
|
76
|
+
|
77
|
+
# Returns a shape of singleton type
|
78
|
+
#
|
79
|
+
# The `self` types included in the shape is the `self` types in the definition.
|
130
80
|
#
|
131
|
-
def
|
81
|
+
def singleton_shape: (RBS::TypeName) -> Shape
|
132
82
|
|
133
|
-
def
|
83
|
+
def union_shape: (AST::Types::t, Array[Shape]) -> Shape?
|
134
84
|
|
135
|
-
def
|
85
|
+
def intersection_shape: (AST::Types::t, Array[Shape]) -> Shape?
|
136
86
|
|
137
|
-
def
|
138
|
-
AST::Types::Name::Instance | AST::Types::Name::Singleton | AST::Types::Name::Interface,
|
139
|
-
bool public_only,
|
140
|
-
boolish keep_self,
|
141
|
-
boolish keep_instance,
|
142
|
-
boolish keep_singleton
|
143
|
-
) -> Shape
|
87
|
+
def proc_shape: (AST::Types::Proc, Shape) -> Shape
|
144
88
|
|
145
|
-
def
|
146
|
-
AST::Types::Name::Instance | AST::Types::Name::Singleton | AST::Types::Name::Interface,
|
147
|
-
bool public_only,
|
148
|
-
Substitution subst
|
149
|
-
) -> Shape
|
89
|
+
def tuple_shape: (AST::Types::Tuple) { (AST::Types::Name::Instance) -> Shape? } -> Shape?
|
150
90
|
|
151
|
-
def
|
91
|
+
def record_shape: (AST::Types::Record) { (AST::Types::Name::Instance) -> Shape? } -> Shape?
|
152
92
|
|
153
|
-
|
93
|
+
# Substitution for `self`/`instance`/`class` types, built from the name of given type
|
94
|
+
#
|
95
|
+
def class_subst: (AST::Types::Name::Instance | AST::Types::Name::Singleton) -> Substitution
|
154
96
|
|
155
|
-
def
|
97
|
+
def interface_subst: (AST::Types::Name::Interface) -> Substitution
|
156
98
|
|
157
|
-
|
99
|
+
# Substitution for type application of class instance, type alias, or interface types
|
100
|
+
def app_subst: (AST::Types::Name::Instance | AST::Types::Name::Alias | AST::Types::Name::Interface) -> Substitution
|
158
101
|
|
159
|
-
def
|
102
|
+
def method_name_for: (RBS::Definition::Method::TypeDef, Symbol name) -> method_name
|
160
103
|
|
161
104
|
def replace_primitive_method: (method_name, RBS::Definition::Method::TypeDef, MethodType) -> MethodType
|
162
105
|
|
163
|
-
|
106
|
+
@subtyping: Subtyping::Check?
|
107
|
+
|
108
|
+
def subtyping: () -> Subtyping::Check
|
164
109
|
end
|
165
110
|
end
|
166
111
|
end
|
@@ -27,6 +27,7 @@ module Steep
|
|
27
27
|
def var_type: () -> AST::Types::t
|
28
28
|
|
29
29
|
def map_type: () { (AST::Types::t) -> AST::Types::t } -> self
|
30
|
+
| () -> Enumerator[AST::Types::t, void]
|
30
31
|
end
|
31
32
|
|
32
33
|
class Required < Base
|
@@ -57,6 +58,7 @@ module Steep
|
|
57
58
|
def map: () { (param) -> param } -> PositionalParams
|
58
59
|
|
59
60
|
def map_type: () { (AST::Types::t) -> AST::Types::t } -> PositionalParams
|
61
|
+
| () -> Enumerator[AST::Types::t, void]
|
60
62
|
|
61
63
|
def subst: (Substitution s) -> PositionalParams
|
62
64
|
|
@@ -74,13 +76,13 @@ module Steep
|
|
74
76
|
|
75
77
|
def size: () -> Integer
|
76
78
|
|
77
|
-
def self.build: (required: Array[AST::Types::t], optional: Array[AST::Types::t], rest: AST::Types::t?) -> PositionalParams
|
79
|
+
def self.build: (required: Array[AST::Types::t], optional: Array[AST::Types::t], rest: AST::Types::t?) -> PositionalParams?
|
78
80
|
|
79
81
|
extend Utils
|
80
82
|
|
81
83
|
# Calculates xs + ys.
|
82
84
|
# Never fails.
|
83
|
-
def self.merge_for_overload: (PositionalParams? xs, PositionalParams? ys) -> PositionalParams
|
85
|
+
def self.merge_for_overload: (PositionalParams? xs, PositionalParams? ys) -> PositionalParams?
|
84
86
|
|
85
87
|
# xs | ys
|
86
88
|
def self.merge_for_union: (PositionalParams? xs, PositionalParams? ys) -> PositionalParams?
|
@@ -98,15 +100,15 @@ module Steep
|
|
98
100
|
|
99
101
|
attr_reader rest: AST::Types::t?
|
100
102
|
|
101
|
-
def initialize: (?requireds: ::Hash[
|
103
|
+
def initialize: (?requireds: ::Hash[Symbol, AST::Types::t], ?optionals: ::Hash[Symbol, AST::Types::t], ?rest: AST::Types::t?) -> void
|
102
104
|
|
103
|
-
def ==: (untyped other) ->
|
105
|
+
def ==: (untyped other) -> bool
|
104
106
|
|
105
107
|
alias eql? ==
|
106
108
|
|
107
|
-
def hash: () ->
|
109
|
+
def hash: () -> Integer
|
108
110
|
|
109
|
-
def update: (?requireds:
|
111
|
+
def update: (?requireds: Hash[Symbol, AST::Types::t], ?optionals: Hash[Symbol, AST::Types::t], ?rest: AST::Types::t?) -> KeywordParams
|
110
112
|
|
111
113
|
def empty?: () -> bool
|
112
114
|
|
@@ -117,6 +119,7 @@ module Steep
|
|
117
119
|
| () -> Enumerator[AST::Types::t, void]
|
118
120
|
|
119
121
|
def map_type: () { (AST::Types::t) -> AST::Types::t } -> KeywordParams
|
122
|
+
| () -> Enumerator[AST::Types::t, KeywordParams]
|
120
123
|
|
121
124
|
def subst: (Substitution s) -> KeywordParams
|
122
125
|
|
@@ -127,13 +130,13 @@ module Steep
|
|
127
130
|
include Utils
|
128
131
|
|
129
132
|
# For overloading
|
130
|
-
def +: (
|
133
|
+
def +: (KeywordParams other) -> KeywordParams
|
131
134
|
|
132
135
|
# For union
|
133
|
-
def |: (
|
136
|
+
def |: (KeywordParams other) -> KeywordParams
|
134
137
|
|
135
138
|
# For intersection
|
136
|
-
def &: (
|
139
|
+
def &: (KeywordParams other) -> KeywordParams?
|
137
140
|
end
|
138
141
|
|
139
142
|
def required: () -> Array[AST::Types::t]
|
@@ -146,54 +149,55 @@ module Steep
|
|
146
149
|
|
147
150
|
attr_reader keyword_params: KeywordParams
|
148
151
|
|
149
|
-
def self.build: (?required:
|
152
|
+
def self.build: (?required: Array[AST::Types::t], ?optional: Array[AST::Types::t], ?rest: AST::Types::t?, ?required_keywords: ::Hash[Symbol, AST::Types::t], ?optional_keywords: ::Hash[Symbol, AST::Types::t], ?rest_keywords: AST::Types::t?) -> Params
|
150
153
|
|
151
|
-
def initialize: (positional_params:
|
154
|
+
def initialize: (positional_params: PositionalParams?, keyword_params: KeywordParams) -> void
|
152
155
|
|
153
|
-
def update: (?positional_params:
|
156
|
+
def update: (?positional_params: PositionalParams?, ?keyword_params: KeywordParams) -> Params
|
154
157
|
|
155
|
-
def first_param: () ->
|
158
|
+
def first_param: () -> PositionalParams::param?
|
156
159
|
|
157
|
-
def with_first_param: (
|
160
|
+
def with_first_param: (PositionalParams::param) -> Params
|
158
161
|
|
159
|
-
def has_positional?: () ->
|
162
|
+
def has_positional?: () -> bool
|
160
163
|
|
161
|
-
def self.empty: () ->
|
164
|
+
def self.empty: () -> Params
|
162
165
|
|
163
|
-
def ==: (untyped other) ->
|
166
|
+
def ==: (untyped other) -> bool
|
164
167
|
|
165
168
|
alias eql? ==
|
166
169
|
|
167
|
-
def hash: () ->
|
170
|
+
def hash: () -> Integer
|
168
171
|
|
169
172
|
def flat_unnamed_params: () -> Array[[:required | :optional, AST::Types::t]]
|
170
173
|
|
171
|
-
def flat_keywords: () ->
|
174
|
+
def flat_keywords: () -> Hash[Symbol, AST::Types::t]
|
172
175
|
|
173
|
-
def required_keywords: () ->
|
176
|
+
def required_keywords: () -> Hash[Symbol, AST::Types::t]
|
174
177
|
|
175
|
-
def optional_keywords: () ->
|
178
|
+
def optional_keywords: () -> Hash[Symbol, AST::Types::t]
|
176
179
|
|
177
|
-
def rest_keywords: () ->
|
180
|
+
%a{pure} def rest_keywords: () -> AST::Types::t?
|
178
181
|
|
179
|
-
def has_keywords?: () ->
|
182
|
+
def has_keywords?: () -> bool
|
180
183
|
|
181
184
|
def each_positional_param: () { (PositionalParams::Base) -> void } -> void
|
182
185
|
|
183
|
-
def without_keywords: () ->
|
186
|
+
def without_keywords: () -> Params
|
184
187
|
|
185
|
-
def drop_first: () ->
|
188
|
+
def drop_first: () -> Params
|
186
189
|
|
187
190
|
def each_type: () { (AST::Types::t) -> void } -> void
|
188
191
|
| () -> Enumerator[AST::Types::t, void]
|
189
192
|
|
190
|
-
|
193
|
+
@fvs: Set[AST::Types::variable]?
|
194
|
+
def free_variables: () -> Set[AST::Types::variable]
|
191
195
|
|
192
|
-
def closed?: () ->
|
196
|
+
def closed?: () -> bool
|
193
197
|
|
194
198
|
def subst: (Substitution s) -> Params
|
195
199
|
|
196
|
-
def size: () ->
|
200
|
+
def size: () -> Integer
|
197
201
|
|
198
202
|
def to_s: () -> ::String
|
199
203
|
|
@@ -230,13 +234,14 @@ module Steep
|
|
230
234
|
|
231
235
|
type location = RBS::Location[untyped, untyped]
|
232
236
|
|
233
|
-
|
237
|
+
# Returns `nil` for `RBS::Types::UntypedFunction`
|
238
|
+
attr_reader params: Params?
|
234
239
|
|
235
240
|
attr_reader return_type: AST::Types::t
|
236
241
|
|
237
242
|
attr_reader location: location?
|
238
243
|
|
239
|
-
def initialize: (params: Params
|
244
|
+
def initialize: (params: Params?, return_type: AST::Types::t, location: location?) -> void
|
240
245
|
|
241
246
|
def ==: (untyped other) -> bool
|
242
247
|
|
@@ -244,7 +249,8 @@ module Steep
|
|
244
249
|
|
245
250
|
def hash: () -> Integer
|
246
251
|
|
247
|
-
|
252
|
+
@fvs: Set[AST::Types::variable]?
|
253
|
+
def free_variables: () -> Set[AST::Types::variable]
|
248
254
|
|
249
255
|
def subst: (Substitution s) -> Function
|
250
256
|
|
@@ -255,7 +261,7 @@ module Steep
|
|
255
261
|
|
256
262
|
def map_type: () { (AST::Types::t) -> AST::Types::t } -> Function
|
257
263
|
|
258
|
-
def with: (?params: Params
|
264
|
+
def with: (?params: Params?, ?return_type: AST::Types::t) -> Function
|
259
265
|
|
260
266
|
def to_s: () -> ::String
|
261
267
|
|
@@ -2,11 +2,26 @@ module Steep
|
|
2
2
|
module Interface
|
3
3
|
class Shape
|
4
4
|
class Entry
|
5
|
-
|
5
|
+
@private_method: bool
|
6
6
|
|
7
|
-
|
7
|
+
@method_types: Array[MethodType]?
|
8
|
+
|
9
|
+
@generator: (^() -> Array[MethodType]?)?
|
10
|
+
|
11
|
+
def initialize: (method_types: Array[MethodType], private_method: bool) -> void
|
12
|
+
| (private_method: bool) { () -> Array[MethodType]? } -> void
|
13
|
+
|
14
|
+
def has_method_type?: () -> bool
|
8
15
|
|
9
16
|
def to_s: () -> String
|
17
|
+
|
18
|
+
def private_method?: () -> bool
|
19
|
+
|
20
|
+
def public_method?: () -> bool
|
21
|
+
|
22
|
+
def method_types: () -> Array[MethodType]
|
23
|
+
|
24
|
+
def force: () -> void
|
10
25
|
end
|
11
26
|
|
12
27
|
class Methods
|
@@ -36,9 +51,9 @@ module Steep
|
|
36
51
|
|
37
52
|
def push_substitution: (Substitution) -> Methods
|
38
53
|
|
39
|
-
def merge!: (Methods other) -> void
|
54
|
+
def merge!: (Methods other) ?{ (Symbol name, Entry old_entry, Entry new_entry) -> Entry } -> void
|
40
55
|
|
41
|
-
|
56
|
+
def public_methods: () -> Methods
|
42
57
|
end
|
43
58
|
|
44
59
|
attr_reader type: AST::Types::t
|
@@ -56,6 +71,10 @@ module Steep
|
|
56
71
|
def public?: () -> bool
|
57
72
|
|
58
73
|
def subst: (Substitution, ?type: AST::Types::t?) -> Shape
|
74
|
+
|
75
|
+
def public_shape: () -> Shape
|
76
|
+
|
77
|
+
@public_shape: Shape?
|
59
78
|
end
|
60
79
|
end
|
61
80
|
end
|
@@ -41,6 +41,8 @@ module Steep
|
|
41
41
|
|
42
42
|
def merge: (Substitution s) -> Substitution
|
43
43
|
|
44
|
+
def update: (?self_type: AST::Types::t?, ?instance_type: AST::Types::t?, ?module_type: AST::Types::t?) -> Substitution
|
45
|
+
|
44
46
|
def apply?: (AST::Types::t) -> bool
|
45
47
|
|
46
48
|
def add!: (Symbol v, AST::Types::t ty) -> self
|
data/sig/steep/node_helper.rbs
CHANGED
@@ -66,6 +66,17 @@ module Steep
|
|
66
66
|
|
67
67
|
def test_send_node: (Node) { (Node?, Symbol, Array[Node], send_loc) -> bool } -> bool
|
68
68
|
|
69
|
+
# Returns if given node allows calling private method
|
70
|
+
#
|
71
|
+
# The node must be:
|
72
|
+
#
|
73
|
+
# * A `send` node,
|
74
|
+
# * A `csend` node,
|
75
|
+
# * A `block` node, or
|
76
|
+
# * A `nblock` node
|
77
|
+
#
|
78
|
+
def private_send?: (Node) -> bool
|
79
|
+
|
69
80
|
# Deconstruct sendish node and it's associated block node
|
70
81
|
#
|
71
82
|
# Receives a sequence of node tree where the leaf node comes first.
|
@@ -14,9 +14,11 @@ module Steep
|
|
14
14
|
|
15
15
|
def initialize: (RBS::MethodType, RBS::AST::Comment?, Integer?) -> void
|
16
16
|
|
17
|
-
def parameters: () -> Array[String]
|
17
|
+
def parameters: () -> Array[String]?
|
18
18
|
end
|
19
19
|
|
20
|
+
include Steep::NodeHelper
|
21
|
+
|
20
22
|
attr_reader source: Source
|
21
23
|
|
22
24
|
attr_reader path: Pathname
|
@@ -91,8 +91,8 @@ module Steep
|
|
91
91
|
|
92
92
|
def lower_bound: (Symbol var, ?skip: bool) -> AST::Types::t
|
93
93
|
|
94
|
-
def solution: (Check checker, variables: Enumerable[
|
95
|
-
| (Check checker, variables: Enumerable[
|
94
|
+
def solution: (Check checker, variables: Enumerable[AST::Types::variable], variance: VariableVariance, self_type: AST::Types::t, instance_type: AST::Types::t, class_type: AST::Types::t) -> Interface::Substitution
|
95
|
+
| (Check checker, variables: Enumerable[AST::Types::variable], context: Context) -> Interface::Substitution
|
96
96
|
|
97
97
|
def has_constraint?: (Symbol var) -> bool
|
98
98
|
|
@@ -17,7 +17,7 @@ module Steep
|
|
17
17
|
|
18
18
|
def self.from_method_type: (Interface::MethodType method_type) -> VariableVariance
|
19
19
|
|
20
|
-
def self.add_params: (Interface::Function::Params params, block: bool, covariants: Set[Symbol], contravariants: Set[Symbol]) -> void
|
20
|
+
def self.add_params: (Interface::Function::Params? params, block: bool, covariants: Set[Symbol], contravariants: Set[Symbol]) -> void
|
21
21
|
|
22
22
|
def self.add_type: (AST::Types::t `type`, variance: :covariant | :contravariant | :invariant, covariants: Set[Symbol], contravariants: Set[Symbol]) -> void
|
23
23
|
end
|
@@ -325,7 +325,7 @@ module Steep
|
|
325
325
|
def set_up_block_mlhs_params_env: (
|
326
326
|
Parser::AST::Node mlhs_node,
|
327
327
|
AST::Types::t type,
|
328
|
-
Hash[Symbol
|
328
|
+
Hash[Symbol?, AST::Types::t]
|
329
329
|
) { (Parser::AST::Node error_mlhs_node, AST::Types::t type) -> void } -> void
|
330
330
|
|
331
331
|
# Returns a Pair of
|
@@ -37,7 +37,7 @@ module Steep
|
|
37
37
|
# * `node` is the node of the parameter
|
38
38
|
#
|
39
39
|
class Param
|
40
|
-
attr_reader var: Symbol
|
40
|
+
attr_reader var: Symbol?
|
41
41
|
|
42
42
|
attr_reader type: AST::Types::t?
|
43
43
|
|
@@ -45,7 +45,7 @@ module Steep
|
|
45
45
|
|
46
46
|
attr_reader node: Parser::AST::Node
|
47
47
|
|
48
|
-
def initialize: (var: Symbol
|
48
|
+
def initialize: (var: Symbol?, type: AST::Types::t?, value: Parser::AST::Node?, node: Parser::AST::Node) -> void
|
49
49
|
|
50
50
|
def ==: (untyped other) -> bool
|
51
51
|
|
@@ -127,7 +127,7 @@ module Steep
|
|
127
127
|
| (hint: Interface::Function::Params?) -> Interface::Function::Params?
|
128
128
|
|
129
129
|
def zip: (
|
130
|
-
Interface::Function::Params params_type,
|
130
|
+
Interface::Function::Params? params_type,
|
131
131
|
Interface::Block? block,
|
132
132
|
factory: AST::Types::Factory
|
133
133
|
) -> Array[[Param | MultipleParam, AST::Types::t]]
|
@@ -147,6 +147,8 @@ module Steep
|
|
147
147
|
# Returns the upper bound of a type variable
|
148
148
|
def []: (Symbol name) -> AST::Types::t?
|
149
149
|
|
150
|
+
@upper_bounds: Hash[Symbol, AST::Types::t]?
|
151
|
+
|
150
152
|
def upper_bounds: () -> Hash[Symbol, AST::Types::t]
|
151
153
|
|
152
154
|
def self.empty: () -> TypeVariableContext
|