steep 1.7.0.dev.3 → 1.7.0

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.
Files changed (170) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +43 -0
  3. data/README.md +18 -0
  4. data/doc/narrowing.md +1 -1
  5. data/doc/shape.md +176 -0
  6. data/guides/src/gem-rbs-collection/gem-rbs-collection.md +7 -24
  7. data/lib/steep/ast/types/factory.rb +27 -18
  8. data/lib/steep/ast/types/proc.rb +14 -9
  9. data/lib/steep/interface/block.rb +1 -1
  10. data/lib/steep/interface/builder.rb +1 -0
  11. data/lib/steep/interface/function.rb +14 -6
  12. data/lib/steep/interface/method_type.rb +15 -7
  13. data/lib/steep/project/pattern.rb +1 -2
  14. data/lib/steep/rake_task.rb +132 -0
  15. data/lib/steep/server/interaction_worker.rb +6 -0
  16. data/lib/steep/server/lsp_formatter.rb +2 -0
  17. data/lib/steep/services/completion_provider.rb +1 -1
  18. data/lib/steep/services/file_loader.rb +15 -20
  19. data/lib/steep/services/signature_help_provider.rb +11 -9
  20. data/lib/steep/signature/validator.rb +1 -1
  21. data/lib/steep/subtyping/check.rb +15 -6
  22. data/lib/steep/subtyping/variable_variance.rb +3 -3
  23. data/lib/steep/type_construction.rb +186 -149
  24. data/lib/steep/type_inference/block_params.rb +1 -1
  25. data/lib/steep/type_inference/logic_type_interpreter.rb +2 -1
  26. data/lib/steep/type_inference/method_params.rb +16 -0
  27. data/lib/steep/type_inference/send_args.rb +5 -2
  28. data/lib/steep/version.rb +1 -1
  29. data/steep.gemspec +5 -2
  30. metadata +7 -145
  31. data/.github/dependabot.yml +0 -28
  32. data/.github/workflows/ruby-windows.yml +0 -35
  33. data/.github/workflows/ruby.yml +0 -32
  34. data/.vscode/steep-shared.code-snippets +0 -41
  35. data/Gemfile +0 -14
  36. data/Gemfile.lock +0 -104
  37. data/Gemfile.steep +0 -0
  38. data/gemfile_steep/Gemfile +0 -3
  39. data/gemfile_steep/Gemfile.lock +0 -77
  40. data/rbs_collection.steep.lock.yaml +0 -108
  41. data/rbs_collection.steep.yaml +0 -23
  42. data/sig/shims/bundler.rbs +0 -3
  43. data/sig/shims/concurrent-ruby.rbs +0 -39
  44. data/sig/shims/exception.rbs +0 -4
  45. data/sig/shims/language-server_protocol.rbs +0 -450
  46. data/sig/shims/parser/comment.rbs +0 -33
  47. data/sig/shims/parser/nodes.rbs +0 -252
  48. data/sig/shims/parser/source/map.rbs +0 -146
  49. data/sig/shims/parser/source/range.rbs +0 -237
  50. data/sig/shims/parser.rbs +0 -69
  51. data/sig/shims/string.rbs +0 -4
  52. data/sig/shims/tagged_logging.rbs +0 -6
  53. data/sig/shims/yaml.rbs +0 -4
  54. data/sig/steep/annotation_parser.rbs +0 -60
  55. data/sig/steep/ast/annotation/collection.rbs +0 -78
  56. data/sig/steep/ast/annotation.rbs +0 -121
  57. data/sig/steep/ast/builtin.rbs +0 -69
  58. data/sig/steep/ast/ignore.rbs +0 -66
  59. data/sig/steep/ast/node/type_application.rbs +0 -31
  60. data/sig/steep/ast/node/type_assertion.rbs +0 -32
  61. data/sig/steep/ast/types/any.rbs +0 -29
  62. data/sig/steep/ast/types/boolean.rbs +0 -31
  63. data/sig/steep/ast/types/bot.rbs +0 -29
  64. data/sig/steep/ast/types/class.rbs +0 -33
  65. data/sig/steep/ast/types/factory.rbs +0 -110
  66. data/sig/steep/ast/types/helper.rbs +0 -24
  67. data/sig/steep/ast/types/instance.rbs +0 -33
  68. data/sig/steep/ast/types/intersection.rbs +0 -40
  69. data/sig/steep/ast/types/literal.rbs +0 -35
  70. data/sig/steep/ast/types/logic.rbs +0 -83
  71. data/sig/steep/ast/types/name.rbs +0 -84
  72. data/sig/steep/ast/types/nil.rbs +0 -31
  73. data/sig/steep/ast/types/proc.rbs +0 -53
  74. data/sig/steep/ast/types/record.rbs +0 -39
  75. data/sig/steep/ast/types/self.rbs +0 -33
  76. data/sig/steep/ast/types/top.rbs +0 -29
  77. data/sig/steep/ast/types/tuple.rbs +0 -37
  78. data/sig/steep/ast/types/union.rbs +0 -40
  79. data/sig/steep/ast/types/var.rbs +0 -42
  80. data/sig/steep/ast/types/void.rbs +0 -29
  81. data/sig/steep/ast/types.rbs +0 -16
  82. data/sig/steep/cli.rbs +0 -55
  83. data/sig/steep/diagnostic/deprecated/else_on_exhaustive_case.rbs +0 -13
  84. data/sig/steep/diagnostic/deprecated/unknown_constant_assigned.rbs +0 -15
  85. data/sig/steep/diagnostic/helper.rbs +0 -15
  86. data/sig/steep/diagnostic/lsp_formatter.rbs +0 -36
  87. data/sig/steep/diagnostic/ruby.rbs +0 -703
  88. data/sig/steep/diagnostic/signature.rbs +0 -252
  89. data/sig/steep/drivers/annotations.rbs +0 -17
  90. data/sig/steep/drivers/check.rbs +0 -33
  91. data/sig/steep/drivers/checkfile.rbs +0 -27
  92. data/sig/steep/drivers/diagnostic_printer.rbs +0 -25
  93. data/sig/steep/drivers/init.rbs +0 -19
  94. data/sig/steep/drivers/langserver.rbs +0 -36
  95. data/sig/steep/drivers/print_project.rbs +0 -15
  96. data/sig/steep/drivers/stats.rbs +0 -47
  97. data/sig/steep/drivers/utils/driver_helper.rbs +0 -25
  98. data/sig/steep/drivers/utils/jobs_option.rbs +0 -19
  99. data/sig/steep/drivers/validate.rbs +0 -15
  100. data/sig/steep/drivers/vendor.rbs +0 -19
  101. data/sig/steep/drivers/watch.rbs +0 -27
  102. data/sig/steep/drivers/worker.rbs +0 -29
  103. data/sig/steep/equatable.rbs +0 -11
  104. data/sig/steep/expectations.rbs +0 -72
  105. data/sig/steep/index/rbs_index.rbs +0 -141
  106. data/sig/steep/index/signature_symbol_provider.rbs +0 -41
  107. data/sig/steep/index/source_index.rbs +0 -63
  108. data/sig/steep/interface/block.rbs +0 -41
  109. data/sig/steep/interface/builder.rbs +0 -152
  110. data/sig/steep/interface/function.rbs +0 -270
  111. data/sig/steep/interface/method_type.rbs +0 -105
  112. data/sig/steep/interface/shape.rbs +0 -80
  113. data/sig/steep/interface/substitution.rbs +0 -51
  114. data/sig/steep/interface/type_param.rbs +0 -43
  115. data/sig/steep/method_name.rbs +0 -30
  116. data/sig/steep/module_helper.rbs +0 -16
  117. data/sig/steep/node_helper.rbs +0 -91
  118. data/sig/steep/path_helper.rbs +0 -15
  119. data/sig/steep/project/dsl.rbs +0 -108
  120. data/sig/steep/project/options.rbs +0 -47
  121. data/sig/steep/project/pattern.rbs +0 -47
  122. data/sig/steep/project/target.rbs +0 -25
  123. data/sig/steep/project.rbs +0 -26
  124. data/sig/steep/range_extension.rbs +0 -7
  125. data/sig/steep/server/base_worker.rbs +0 -49
  126. data/sig/steep/server/change_buffer.rbs +0 -38
  127. data/sig/steep/server/delay_queue.rbs +0 -37
  128. data/sig/steep/server/interaction_worker.rbs +0 -90
  129. data/sig/steep/server/lsp_formatter.rbs +0 -63
  130. data/sig/steep/server/master.rbs +0 -299
  131. data/sig/steep/server/type_check_worker.rbs +0 -141
  132. data/sig/steep/server/worker_process.rbs +0 -97
  133. data/sig/steep/services/completion_provider.rbs +0 -264
  134. data/sig/steep/services/content_change.rbs +0 -37
  135. data/sig/steep/services/file_loader.rbs +0 -21
  136. data/sig/steep/services/goto_service.rbs +0 -106
  137. data/sig/steep/services/hover_provider/rbs.rbs +0 -47
  138. data/sig/steep/services/hover_provider/ruby.rbs +0 -127
  139. data/sig/steep/services/hover_provider/singleton_methods.rbs +0 -11
  140. data/sig/steep/services/path_assignment.rbs +0 -21
  141. data/sig/steep/services/signature_help_provider.rbs +0 -51
  142. data/sig/steep/services/signature_service.rbs +0 -156
  143. data/sig/steep/services/stats_calculator.rbs +0 -41
  144. data/sig/steep/services/type_check_service.rbs +0 -112
  145. data/sig/steep/services/type_name_completion.rbs +0 -135
  146. data/sig/steep/signature/validator.rbs +0 -85
  147. data/sig/steep/source/ignore_ranges.rbs +0 -38
  148. data/sig/steep/source.rbs +0 -105
  149. data/sig/steep/subtyping/cache.rbs +0 -17
  150. data/sig/steep/subtyping/check.rbs +0 -131
  151. data/sig/steep/subtyping/constraints.rbs +0 -111
  152. data/sig/steep/subtyping/relation.rbs +0 -63
  153. data/sig/steep/subtyping/result.rbs +0 -179
  154. data/sig/steep/subtyping/variable_variance.rbs +0 -25
  155. data/sig/steep/thread_waiter.rbs +0 -13
  156. data/sig/steep/type_construction.rbs +0 -542
  157. data/sig/steep/type_inference/block_params.rbs +0 -170
  158. data/sig/steep/type_inference/case_when.rbs +0 -130
  159. data/sig/steep/type_inference/constant_env.rbs +0 -29
  160. data/sig/steep/type_inference/context.rbs +0 -216
  161. data/sig/steep/type_inference/context_array.rbs +0 -38
  162. data/sig/steep/type_inference/logic_type_interpreter.rbs +0 -108
  163. data/sig/steep/type_inference/method_call.rbs +0 -124
  164. data/sig/steep/type_inference/method_params.rbs +0 -127
  165. data/sig/steep/type_inference/multiple_assignment.rbs +0 -76
  166. data/sig/steep/type_inference/send_args.rbs +0 -243
  167. data/sig/steep/type_inference/type_env.rbs +0 -160
  168. data/sig/steep/type_inference/type_env_builder.rbs +0 -81
  169. data/sig/steep/typing.rbs +0 -75
  170. data/sig/steep.rbs +0 -45
@@ -1,542 +0,0 @@
1
- use Steep::AST::Types
2
-
3
- module Steep
4
- class TypeConstruction
5
- class Pair
6
- attr_reader type: AST::Types::t
7
-
8
- attr_reader constr: TypeConstruction
9
-
10
- def initialize: (type: AST::Types::t, constr: TypeConstruction) -> void
11
-
12
- def with: (?type: AST::Types::t, ?constr: TypeConstruction) -> Pair
13
-
14
- def +: (Pair other) -> Pair
15
-
16
- def context: () -> TypeInference::Context
17
-
18
- def to_ary: () -> [AST::Types::t, TypeConstruction, TypeInference::Context]
19
- end
20
-
21
- SPECIAL_LVAR_NAMES: Set[Symbol]
22
-
23
- include NodeHelper
24
-
25
- include ModuleHelper
26
-
27
- attr_reader checker: Subtyping::Check
28
-
29
- attr_reader source: Source
30
-
31
- attr_reader annotations: AST::Annotation::Collection
32
-
33
- attr_reader typing: Typing
34
-
35
- attr_reader context: TypeInference::Context
36
-
37
- %a{pure} def module_context: () -> TypeInference::Context::ModuleContext
38
-
39
- # `method_context` is `nil` outside of any `def` syntax
40
- #
41
- %a{pure} def method_context: () -> TypeInference::Context::MethodContext?
42
-
43
- def method_context!: () -> TypeInference::Context::MethodContext
44
-
45
- %a{pure} def block_context: () -> TypeInference::Context::BlockContext?
46
-
47
- def block_context!: () -> TypeInference::Context::BlockContext
48
-
49
- %a{pure} def break_context: () -> TypeInference::Context::BreakContext?
50
-
51
- %a{pure} def self_type: () -> AST::Types::t
52
-
53
- %a{pure} def variable_context: () -> TypeInference::Context::TypeVariableContext
54
-
55
- def initialize: (checker: untyped, source: untyped, annotations: untyped, typing: untyped, context: untyped) -> void
56
-
57
- def with_new_typing: (Typing typing) -> TypeConstruction
58
-
59
- def with_updated_context: (?type_env: TypeInference::TypeEnv) -> TypeConstruction
60
-
61
- def with: (?annotations: untyped, ?context: TypeInference::Context, ?typing: untyped) -> TypeConstruction
62
-
63
- def update_context: () { (TypeInference::Context) -> TypeInference::Context } -> TypeConstruction
64
-
65
- def update_type_env: () { (TypeInference::TypeEnv) -> TypeInference::TypeEnv } -> TypeConstruction
66
-
67
- def check_relation: (sub_type: AST::Types::t, super_type: AST::Types::t, ?constraints: Subtyping::Constraints) -> Subtyping::Result::t
68
-
69
- # This is a variation of `#check_relation` method.
70
- # It checks if given subtyping relation `sub_type <: super_type` holds or not, and returns truthy when *doesn't* hold.
71
- #
72
- # * Returns `nil` if holds
73
- # * Returns subclass of `Result::Base` if the subtyping doesn't hold
74
- #
75
- # This allow you writing a subtyping check as:
76
- #
77
- # ```ruby
78
- # if relation = no_subtyping?(sub_type: type1, super_type: type2)
79
- # # Implement error reporting
80
- # end
81
- # ```
82
- #
83
- def no_subtyping?: (sub_type: AST::Types::t, super_type: AST::Types::t, ?constraints: Subtyping::Constraints) -> Subtyping::Result::Base?
84
-
85
- def for_new_method: (Symbol method_name, Parser::AST::Node node, args: Array[Parser::AST::Node], self_type: untyped, definition: RBS::Definition?) -> TypeConstruction
86
-
87
- def with_method_constr: (untyped method_name, untyped node, args: untyped, self_type: untyped, definition: untyped) { (untyped) -> untyped } -> untyped
88
-
89
- def implement_module: (module_name: RBS::TypeName, annotations: AST::Annotation::Collection, ?super_name: RBS::TypeName?) -> AST::Annotation::Implements::Module?
90
-
91
- def default_module_context: (AST::Annotation::Implements::Module? implement_module_name, nesting: RBS::Resolver::context) -> TypeInference::Context::ModuleContext
92
-
93
- def for_module: (untyped node, untyped new_module_name) -> untyped
94
-
95
- def with_module_constr: (untyped node, untyped module_name) { (untyped) -> untyped } -> untyped
96
-
97
- def for_class: (untyped node, untyped new_class_name, untyped super_class_name) -> untyped
98
-
99
- def with_class_constr: (untyped node, untyped new_class_name, untyped super_class_name) { (untyped) -> untyped } -> untyped
100
-
101
- def with_sclass_constr: [A] (Parser::AST::Node node, AST::Types::t `type`) { (TypeConstruction?) -> A } -> A
102
-
103
- # Returns one-level _meta_ type from given type
104
- #
105
- # * Returns singleton type of the type name if instance type is given
106
- # * Returns `::Class` if singleton type is given
107
- # * Returns `nil` otherwise
108
- #
109
- def meta_type: (AST::Types::t) -> AST::Types::t?
110
-
111
- def for_sclass: (Parser::AST::Node node, AST::Types::t `type`) -> TypeConstruction?
112
-
113
- def for_branch: (Parser::AST::Node node, ?break_context: TypeInference::Context::BreakContext?) -> TypeConstruction
114
-
115
- def add_typing: (Parser::AST::Node node, type: AST::Types::t, ?constr: TypeConstruction) -> Pair
116
-
117
- def add_call: (untyped call) -> untyped
118
-
119
- def synthesize: (Parser::AST::Node node, ?hint: AST::Types::t?, ?condition: bool) -> Pair
120
-
121
- def check: (Parser::AST::Node node, AST::Types::t `type`, ?constraints: Subtyping::Constraints) { (AST::Types::t, AST::Types::t, Subtyping::Result::t) -> void } -> Pair
122
-
123
- def masgn_lhs?: (untyped lhs) -> untyped
124
-
125
- def lvasgn: (Parser::AST::Node node, AST::Types::t) -> Pair
126
-
127
- def ivasgn: (Parser::AST::Node node, AST::Types::t rhs_type) -> Pair
128
-
129
- def gvasgn: (Parser::AST::Node node, AST::Types::t rhs_type) -> Pair
130
-
131
- def type_masgn: (Parser::AST::Node node) -> Pair
132
-
133
- def type_masgn_type: (Parser::AST::Node mlhs_node, AST::Types::t? rhs_type, masgn: TypeInference::MultipleAssignment, optional: bool) -> TypeConstruction?
134
-
135
- def constant_typename: (Parser::AST::Node parent, Symbol name) -> RBS::TypeName?
136
-
137
- # Synthesize a constant declaration -- :cdecl, :class, or :module
138
- #
139
- # * `node` is the node that references a constant
140
- # * `parent_node` is the parent (namespace) of a constant reference
141
- # * `constant_name` is the name of constant
142
- #
143
- # Yields a block that is expected to add an error, or it reports Diagnostic::Ruby::UnknownConstant if not given.
144
- #
145
- # Returns a tuple of
146
- #
147
- # * The type of the constant
148
- # * TypeConstruction instance after the evaluation
149
- # * The full name of the constant
150
- #
151
- def synthesize_constant_decl: (Parser::AST::Node? node, Parser::AST::Node? parent_node, Symbol constant_name) ?{ () -> void } -> [AST::Types::t, TypeConstruction, RBS::TypeName?]
152
-
153
- # Synthesize a constant reference
154
- #
155
- # * `node` is the node that references a constant
156
- # * `parent_node` is the parent (namespace) of a constant reference
157
- # * `constant_name` is the name of constant
158
- #
159
- # Yields a block that is expected to add an error, or it reports Diagnostic::Ruby::UnknownConstant if not given.
160
- #
161
- # Returns a tuple of
162
- #
163
- # * The type of the constant
164
- # * TypeConstruction instance after the evaluation
165
- # * The full name of the constant
166
- #
167
- def synthesize_constant: (Parser::AST::Node? node, Parser::AST::Node? parent_node, Symbol constant_name) ?{ () -> void } -> [AST::Types::t, TypeConstruction, RBS::TypeName?]
168
-
169
- # Returns a proc type if given type is a two clause union with the proc type and `nil`
170
- #
171
- def optional_proc?: (AST::Types::t) -> AST::Types::Proc?
172
-
173
- def type_lambda: (Parser::AST::Node & Parser::AST::_BlockNode node, params_node: Parser::AST::Node, body_node: Parser::AST::Node?, type_hint: AST::Types::t?) -> Pair
174
-
175
- def synthesize_children: (Parser::AST::Node node, ?skips: Array[Parser::AST::Node?]) -> TypeConstruction
176
-
177
- # Synthesize `:send`, `:csend`, `:block`, and `:numblock` node
178
- #
179
- def synthesize_sendish: (Parser::AST::Node sendish, hint: AST::Types::t?, tapp: AST::Node::TypeApplication?) -> Pair
180
-
181
- # The entrypoint to type check method calls, which may be with blocks
182
- #
183
- # * `send_node` can be `:send`, `:super`, or `:zsuper`
184
- # * `node` can be `:send`, `:block`, `:super`, or `:zsuper`
185
- # * Specify `unwrap` keyword `true` to type check safe-navigation-operator, that unwraps the type of reeiver automatically and make the return type optional
186
- #
187
- def type_send: (
188
- Parser::AST::Node node,
189
- send_node: Parser::AST::Node,
190
- block_params: Parser::AST::Node?,
191
- block_body: Parser::AST::Node?,
192
- ?unwrap: bool,
193
- tapp: AST::Node::TypeApplication?,
194
- hint: Types::t?
195
- ) -> Pair
196
-
197
- # The second step to type check method calls, which handles type refinements on *pure* calls
198
- #
199
- # * It receives `interface` keyword, that is the shape of the receiver type
200
- # * It receives `arguments` keyword, that is an array of argument nodes
201
- #
202
- def type_send_interface: (
203
- Parser::AST::Node node,
204
- interface: Interface::Shape,
205
- receiver: Parser::AST::Node?,
206
- receiver_type: AST::Types::t,
207
- method_name: Symbol,
208
- arguments: Array[Parser::AST::Node],
209
- block_params: Parser::AST::Node?,
210
- block_body: Parser::AST::Node?,
211
- tapp: AST::Node::TypeApplication?,
212
- hint: Types::t?
213
- ) -> Pair
214
-
215
- # The third step to type check method calls, which tries all of the overlods defined for the method
216
- #
217
- # * It receives the `Shape::Entry` object that represents an method entry of a shape
218
- # * Returns `nil` when it cannot find suitable one from more than one overloads
219
- # * It means the type checker can report only *no suitable overlod detected for this args* 😫
220
- #
221
- def type_method_call: (
222
- Parser::AST::Node node,
223
- method_name: Symbol,
224
- receiver_type: AST::Types::t,
225
- method: Interface::Shape::Entry,
226
- arguments: Array[Parser::AST::Node],
227
- block_params: Parser::AST::Node?,
228
- block_body: Parser::AST::Node?,
229
- tapp: AST::Node::TypeApplication?,
230
- hint: Types::t?
231
- ) -> [TypeInference::MethodCall::t, TypeConstruction]?
232
-
233
- # The core to type check method calls, which implements type checking arguments including blocks and type inference
234
- #
235
- # * `receiver_type` and `method_name` are only used for error reporting
236
- #
237
- def try_method_type: (
238
- Parser::AST::Node node,
239
- receiver_type: AST::Types::t,
240
- method_name: Symbol,
241
- method_type: Interface::MethodType,
242
- arguments: Array[Parser::AST::Node],
243
- block_params: Parser::AST::Node?,
244
- block_body: Parser::AST::Node?,
245
- tapp: AST::Node::TypeApplication?,
246
- hint: Types::t?
247
- ) -> [TypeInference::MethodCall::t, TypeConstruction]
248
-
249
- # Extra step to type check method calls, which implements custom typing rules based on the methods
250
- #
251
- # * Returns `nil` if the `method_type` object is not associated to a method with custom typing rules
252
- #
253
- def try_special_method: (
254
- Parser::AST::Node node,
255
- receiver_type: AST::Types::t,
256
- method_name: Symbol,
257
- method_type: Interface::MethodType,
258
- arguments: Array[Parser::AST::Node],
259
- block_params: Parser::AST::Node?,
260
- block_body: Parser::AST::Node?,
261
- hint: Types::t?
262
- ) -> [TypeInference::MethodCall::t, TypeConstruction]?
263
-
264
- def builder_config: () -> Interface::Builder::Config
265
-
266
- # Calculates the shape (interface) of an type
267
- #
268
- # * Returns `nil` if the type cannot be translated to a shape
269
- # * Returns Shape::Entry instead of Shape when `method_name` is given
270
- #
271
- def calculate_interface: (AST::Types::t `type`, private: bool) -> Interface::Shape?
272
- | (AST::Types::t `type`, Symbol method_name, private: bool) -> Interface::Shape::Entry?
273
-
274
- def expand_self: (AST::Types::t `type`) -> AST::Types::t
275
-
276
- SPECIAL_METHOD_NAMES: Hash[Symbol, Set[method_name]]
277
-
278
- KNOWN_PURE_METHODS: Set[method_name]
279
-
280
- def inspect: () -> ::String
281
-
282
- def with_child_typing: [A] (range: Range[Integer]) { (TypeConstruction) -> A } -> A
283
- | (range: Range[Integer]) -> TypeConstruction
284
-
285
- # Bypass :splat and :kwsplat
286
- def bypass_splat: (untyped node) { (untyped) -> untyped } -> untyped
287
-
288
- # Solve a constraint in the block and return a substitution if succeeds.
289
- #
290
- # * When the constraint has a solution, `#apply_solution` returns a tuple of substituted `MethodType`, `true`, and the substitution.
291
- # * When the constraint doesn't have a solution, `#apply_solution` returns a tuple of the original `MethodType`, `false`, and empty substitution.
292
- #
293
- def apply_solution: (
294
- Array[Diagnostic::Ruby::Base] errors,
295
- node: Parser::AST::Node,
296
- method_type: Interface::MethodType
297
- ) {
298
- () -> Interface::Substitution
299
- } -> [Interface::MethodType, bool, Interface::Substitution]
300
-
301
- def eliminate_vars: (untyped `type`, untyped variables, ?to: untyped) -> untyped
302
-
303
- # Type check arguments
304
- #
305
- # * Receives the `method_name` of a method that is being called
306
- # * `method_name` is `nil` if it type checks arguments of block or proc
307
- #
308
- def type_check_args: (
309
- Symbol | nil,
310
- TypeInference::SendArgs,
311
- Subtyping::Constraints,
312
- Array[Diagnostic::Ruby::Base]
313
- ) -> TypeConstruction
314
-
315
- # Type check arguments without known method type
316
- #
317
- # This handles `:splat` nodes and `:kwargs` node that appears as an argument.
318
- #
319
- def type_check_untyped_args: (Array[Parser::AST::Node] arguments) -> TypeConstruction
320
-
321
- def type_check_argument: (Parser::AST::Node node, type: AST::Types::t, constraints: Subtyping::Constraints, errors: Array[Diagnostic::Ruby::Base], ?report_node: Parser::AST::Node) -> Pair
322
-
323
- def type_block_without_hint: (node: Parser::AST::Node & Parser::AST::_BlockNode, block_annotations: AST::Annotation::Collection, block_params: TypeInference::BlockParams?, block_body: Parser::AST::Node?) ?{ (Diagnostic::Ruby::Base) -> void } -> void
324
-
325
- def set_up_block_mlhs_params_env: (
326
- Parser::AST::Node mlhs_node,
327
- AST::Types::t type,
328
- Hash[Symbol?, AST::Types::t]
329
- ) { (Parser::AST::Node error_mlhs_node, AST::Types::t type) -> void } -> void
330
-
331
- # Returns a Pair of
332
- #
333
- # * TypeConstruction to type check the block, and
334
- # * Set of local variable names to unpin after type checking the block
335
- #
336
- # ### Arguments
337
- #
338
- # * `body_node` Block body node
339
- # * `block_params` BlockParams object
340
- # * `block_param_hint` Type hint of the block parameters
341
- # * `block_type_hint` Type hint of the block body
342
- # * `block_block_hint` Type hint of the block that will be given to the block
343
- # * `block_annotations` Annotations given to the block body
344
- # * `node_type_hint` Type hint of block call node
345
- #
346
- def for_block: (
347
- Parser::AST::Node? body_node,
348
- block_params: TypeInference::BlockParams,
349
- block_param_hint: Interface::Function::Params?,
350
- block_type_hint: AST::Types::t?,
351
- block_block_hint: Interface::Block?,
352
- block_annotations: AST::Annotation::Collection,
353
- node_type_hint: AST::Types::t?,
354
- block_self_hint: AST::Types::t?
355
- ) -> TypeConstruction
356
-
357
- # Synthesize the block body and returns the type of the body
358
- #
359
- # The constructor can be safely discarded because it cannot change anything outer than block.
360
- #
361
- def synthesize_block: (
362
- node: Parser::AST::Node & Parser::AST::_BlockNode,
363
- block_type_hint: AST::Types::t?,
364
- block_body: Parser::AST::Node?
365
- ) -> AST::Types::t
366
-
367
- %a{pure} def nesting: () -> RBS::Resolver::context
368
-
369
- def absolute_name: (untyped name) -> untyped
370
-
371
- def union_type: (*AST::Types::t? types) -> AST::Types::t
372
-
373
- # Returns union type of given types
374
- #
375
- # If one of the types is a subtype of another type, the _subtype_ will be ignored.
376
- #
377
- # ```ruby
378
- # union_type(`String`, `Object`) # => `Object`
379
- # union_type(`String`, `Integer`) # => `String | Integer`
380
- # ```
381
- #
382
- def union_type_unify: (*AST::Types::t types) -> AST::Types::t
383
-
384
- # Translate a union of tuple types to a tuple of union types
385
- #
386
- # * ([A, B] | [C, D, E]) => [A | C, B | D, E?]
387
- #
388
- # Returns `nil` if the translation cannot apply.
389
- #
390
- def union_of_tuple_to_tuple_of_union: (AST::Types::Union) -> AST::Types::Tuple?
391
-
392
- def validate_method_definitions: (Parser::AST::Node node, AST::Annotation::Implements::Module module_name) -> void
393
-
394
- def fallback_to_any: (Parser::AST::Node node) ?{ () -> Diagnostic::Ruby::Base } -> Pair
395
-
396
- # Return `true` if `node` is `self.class`
397
- def self_class?: (Parser::AST::Node node) -> bool
398
-
399
- # Returns `true` if the given `node` is a `class` or `module` declaration that only contains module/class definitions
400
- #
401
- def namespace_module?: (Parser::AST::Node node) -> bool
402
-
403
- def type_any_rec: (Parser::AST::Node node, ?only_children: bool) -> Pair
404
-
405
- def unwrap: (AST::Types::t `type`) -> AST::Types::t
406
-
407
- # Returns `nil` if `type` is recursive
408
- #
409
- # See `Factory#deep_expand_alias`.
410
- #
411
- def deep_expand_alias: (AST::Types::t `type`) -> AST::Types::t?
412
-
413
- # `A | B | ... | Z` => `[A, B, ..., Z]`
414
- def flatten_union: (AST::Types::t) -> Array[AST::Types::t]
415
-
416
- def select_flatten_types: (AST::Types::t) { (AST::Types::t) -> boolish } -> Array[AST::Types::t]
417
-
418
- def partition_flatten_types: (AST::Types::t) { (AST::Types::t) -> boolish } -> [Array[AST::Types::t], Array[AST::Types::t]]
419
-
420
- def flatten_array_elements: (AST::Types::t) -> Array[AST::Types::t]
421
-
422
- def expand_alias: (AST::Types::t `type`) -> AST::Types::t
423
- | [A] (AST::Types::t) { (AST::Types::t) -> A } -> A
424
-
425
- def test_literal_type: (untyped literal, untyped hint) -> (untyped | nil)
426
-
427
- def to_instance_type: (untyped `type`, ?args: untyped?) -> untyped
428
-
429
- # Synthesize the type of a node, assuming it has tuple type when possible
430
- #
431
- # * Try `#try_tuple_type` if applicable, or
432
- # * Run the normal `#synthesize` else
433
- #
434
- def try_tuple_type!: (Parser::AST::Node node, ?hint: AST::Types::t?) -> Pair
435
-
436
- # Try to give `array_node` a tuple type
437
- #
438
- # * If `hint` is given, the array element would receive a hint of element of `hint` type.
439
- # * If `hint` it not given, `array_node` is assumed to have a tuple type, but no assumption on element types.
440
- #
441
- # Returns `nil` when `array_node` includes `*` (splat) node.
442
- #
443
- # ```ruby
444
- # try_tuple_type(`[1, 2]`, nil) # => `[Integer, Integer, Integer]`
445
- # try_tuple_type(`[1]`, `[Integer, Integer]`) # => `[Integer]`
446
- # try_tuple_type(`[1, 2]`, `[Integer]`) # => `[Integer, Integer]`
447
- # try_tuple_type(`[1, *]`, `[Integer]`) # => nil
448
- # ```
449
- #
450
- # Note that `typing` will be updated even when it returns `nil`.
451
- # You probably should try `with_new_typing` to make the result _atomic_.
452
- #
453
- def try_tuple_type: (Parser::AST::Node array_node, AST::Types::Tuple? hint) -> Pair?
454
-
455
- # Try to convert an object of `type` with zero-arity method `method`.
456
- #
457
- # Returns `nil` when
458
- #
459
- # 1. The `type` cannot be converted to an interface, or
460
- # 2. There is no that `conversion` method defined
461
- #
462
- # ```ruby
463
- # try_convert(`::Object`, :to_s) # Returns `::String`
464
- # try_convert(`::String`, :to_ary) # Returns nil
465
- # ```
466
- #
467
- def try_convert: (AST::Types::t `type`, Symbol method) -> AST::Types::t?
468
-
469
- # Try to convert an object of `type` to an Array-ish
470
- #
471
- # * `untyped` is arrayish
472
- #
473
- def try_convert_to_array: (AST::Types::t) -> AST::Types::t?
474
-
475
- # Returns a type if given type is arrayish
476
- #
477
- # * Aliases will be unfolded to arrayish type
478
- # * Returns `nil` if given type is not arrayish
479
- # * `untyped` is arrayish if `untyped_is:` is `true` (defaults to `false`)
480
- #
481
- def arrayish_type?: (AST::Types::t, ?untyped_is: bool) -> AST::Types::t?
482
-
483
- # Returns the type is given type is a subtype of Array
484
- def semantically_arrayish_type?: (AST::Types::t) -> AST::Types::t?
485
-
486
- # Give an array node a type with hint
487
- #
488
- def try_array_type: (Parser::AST::Node node, AST::Types::Name::Instance? hint) -> Pair
489
-
490
- # Returns a record type if `hash_node` can have a record type.
491
- #
492
- # You can give a hint through `record_type` by passing a `AST::Types::Record` object.
493
- # If you pass `nil`, then we know the type is expected to be a record, but the detail is not given.
494
- #
495
- # Returns `nil` when the `hash_node` cannot have a record type.
496
- #
497
- def type_hash_record: (Parser::AST::Node hash_node, AST::Types::Record? record_type) -> Pair?
498
-
499
- # Give hash_node a type based on hint.
500
- #
501
- # * When hint is Record type, it may have record type.
502
- # * When hint is union type, it tries recursively with the union cases.
503
- # * Otherwise, it tries to be a hash instance.
504
- #
505
- def type_hash: (Parser::AST::Node hash_node, hint: AST::Types::t?) -> Pair
506
-
507
- # Returns the first one from elements of `types` that returns a type `t` where `t <: hint`.
508
- #
509
- def pick_one_of: (Array[AST::Types::t] types, range: untyped) { (AST::Types::t hint, TypeConstruction) -> Pair? } -> Pair?
510
-
511
- # *Commit* the transaction (current typing) and returns a `TypeConstruction` with saved typing
512
- #
513
- # ```ruby
514
- # transaction = typing.new_child(range) {|child| constr.with_new_typing(child) }
515
- #
516
- # # Do something that may fail
517
- #
518
- # if succeeded
519
- # # Commit the may-fail operation
520
- # constr = transaction.save_typing()
521
- # else
522
- # # Abort the transaction
523
- # end
524
- # ```
525
- def save_typing: () -> TypeConstruction
526
-
527
- # Returns `true` if a method call can be identified as _pure_:
528
- #
529
- # * The `node` is not a call with block,
530
- # * It always calls _pure_ method,
531
- # * The `receiver` is _pure_, and
532
- # * All of the arguments are _pure_
533
- #
534
- def pure_send?: (TypeInference::MethodCall::Typed call, Parser::AST::Node? receiver, Array[Parser::AST::Node] arguments) -> bool
535
-
536
- def type_name: (AST::Types::t) -> RBS::TypeName?
537
-
538
- def singleton_type: (AST::Types::t) -> AST::Types::t?
539
-
540
- def instance_type: (AST::Types::t) -> AST::Types::t?
541
- end
542
- end