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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -0
- data/README.md +18 -0
- data/doc/narrowing.md +1 -1
- data/doc/shape.md +176 -0
- data/guides/src/gem-rbs-collection/gem-rbs-collection.md +7 -24
- data/lib/steep/ast/types/factory.rb +27 -18
- data/lib/steep/ast/types/proc.rb +14 -9
- data/lib/steep/interface/block.rb +1 -1
- data/lib/steep/interface/builder.rb +1 -0
- data/lib/steep/interface/function.rb +14 -6
- data/lib/steep/interface/method_type.rb +15 -7
- data/lib/steep/project/pattern.rb +1 -2
- data/lib/steep/rake_task.rb +132 -0
- 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 +1 -1
- data/lib/steep/services/file_loader.rb +15 -20
- data/lib/steep/services/signature_help_provider.rb +11 -9
- data/lib/steep/signature/validator.rb +1 -1
- data/lib/steep/subtyping/check.rb +15 -6
- data/lib/steep/subtyping/variable_variance.rb +3 -3
- data/lib/steep/type_construction.rb +186 -149
- data/lib/steep/type_inference/block_params.rb +1 -1
- data/lib/steep/type_inference/logic_type_interpreter.rb +2 -1
- 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/steep.gemspec +5 -2
- metadata +7 -145
- data/.github/dependabot.yml +0 -28
- data/.github/workflows/ruby-windows.yml +0 -35
- data/.github/workflows/ruby.yml +0 -32
- data/.vscode/steep-shared.code-snippets +0 -41
- data/Gemfile +0 -14
- data/Gemfile.lock +0 -104
- data/Gemfile.steep +0 -0
- data/gemfile_steep/Gemfile +0 -3
- data/gemfile_steep/Gemfile.lock +0 -77
- data/rbs_collection.steep.lock.yaml +0 -108
- data/rbs_collection.steep.yaml +0 -23
- data/sig/shims/bundler.rbs +0 -3
- data/sig/shims/concurrent-ruby.rbs +0 -39
- data/sig/shims/exception.rbs +0 -4
- data/sig/shims/language-server_protocol.rbs +0 -450
- data/sig/shims/parser/comment.rbs +0 -33
- data/sig/shims/parser/nodes.rbs +0 -252
- data/sig/shims/parser/source/map.rbs +0 -146
- data/sig/shims/parser/source/range.rbs +0 -237
- data/sig/shims/parser.rbs +0 -69
- data/sig/shims/string.rbs +0 -4
- data/sig/shims/tagged_logging.rbs +0 -6
- data/sig/shims/yaml.rbs +0 -4
- data/sig/steep/annotation_parser.rbs +0 -60
- data/sig/steep/ast/annotation/collection.rbs +0 -78
- data/sig/steep/ast/annotation.rbs +0 -121
- data/sig/steep/ast/builtin.rbs +0 -69
- data/sig/steep/ast/ignore.rbs +0 -66
- data/sig/steep/ast/node/type_application.rbs +0 -31
- data/sig/steep/ast/node/type_assertion.rbs +0 -32
- data/sig/steep/ast/types/any.rbs +0 -29
- data/sig/steep/ast/types/boolean.rbs +0 -31
- data/sig/steep/ast/types/bot.rbs +0 -29
- data/sig/steep/ast/types/class.rbs +0 -33
- data/sig/steep/ast/types/factory.rbs +0 -110
- data/sig/steep/ast/types/helper.rbs +0 -24
- data/sig/steep/ast/types/instance.rbs +0 -33
- data/sig/steep/ast/types/intersection.rbs +0 -40
- data/sig/steep/ast/types/literal.rbs +0 -35
- data/sig/steep/ast/types/logic.rbs +0 -83
- data/sig/steep/ast/types/name.rbs +0 -84
- data/sig/steep/ast/types/nil.rbs +0 -31
- data/sig/steep/ast/types/proc.rbs +0 -53
- data/sig/steep/ast/types/record.rbs +0 -39
- data/sig/steep/ast/types/self.rbs +0 -33
- data/sig/steep/ast/types/top.rbs +0 -29
- data/sig/steep/ast/types/tuple.rbs +0 -37
- data/sig/steep/ast/types/union.rbs +0 -40
- data/sig/steep/ast/types/var.rbs +0 -42
- data/sig/steep/ast/types/void.rbs +0 -29
- data/sig/steep/ast/types.rbs +0 -16
- data/sig/steep/cli.rbs +0 -55
- data/sig/steep/diagnostic/deprecated/else_on_exhaustive_case.rbs +0 -13
- data/sig/steep/diagnostic/deprecated/unknown_constant_assigned.rbs +0 -15
- data/sig/steep/diagnostic/helper.rbs +0 -15
- data/sig/steep/diagnostic/lsp_formatter.rbs +0 -36
- data/sig/steep/diagnostic/ruby.rbs +0 -703
- data/sig/steep/diagnostic/signature.rbs +0 -252
- data/sig/steep/drivers/annotations.rbs +0 -17
- data/sig/steep/drivers/check.rbs +0 -33
- data/sig/steep/drivers/checkfile.rbs +0 -27
- data/sig/steep/drivers/diagnostic_printer.rbs +0 -25
- data/sig/steep/drivers/init.rbs +0 -19
- data/sig/steep/drivers/langserver.rbs +0 -36
- data/sig/steep/drivers/print_project.rbs +0 -15
- data/sig/steep/drivers/stats.rbs +0 -47
- data/sig/steep/drivers/utils/driver_helper.rbs +0 -25
- data/sig/steep/drivers/utils/jobs_option.rbs +0 -19
- data/sig/steep/drivers/validate.rbs +0 -15
- data/sig/steep/drivers/vendor.rbs +0 -19
- data/sig/steep/drivers/watch.rbs +0 -27
- data/sig/steep/drivers/worker.rbs +0 -29
- data/sig/steep/equatable.rbs +0 -11
- data/sig/steep/expectations.rbs +0 -72
- data/sig/steep/index/rbs_index.rbs +0 -141
- data/sig/steep/index/signature_symbol_provider.rbs +0 -41
- data/sig/steep/index/source_index.rbs +0 -63
- data/sig/steep/interface/block.rbs +0 -41
- data/sig/steep/interface/builder.rbs +0 -152
- data/sig/steep/interface/function.rbs +0 -270
- data/sig/steep/interface/method_type.rbs +0 -105
- data/sig/steep/interface/shape.rbs +0 -80
- data/sig/steep/interface/substitution.rbs +0 -51
- data/sig/steep/interface/type_param.rbs +0 -43
- data/sig/steep/method_name.rbs +0 -30
- data/sig/steep/module_helper.rbs +0 -16
- data/sig/steep/node_helper.rbs +0 -91
- data/sig/steep/path_helper.rbs +0 -15
- data/sig/steep/project/dsl.rbs +0 -108
- data/sig/steep/project/options.rbs +0 -47
- data/sig/steep/project/pattern.rbs +0 -47
- data/sig/steep/project/target.rbs +0 -25
- data/sig/steep/project.rbs +0 -26
- data/sig/steep/range_extension.rbs +0 -7
- data/sig/steep/server/base_worker.rbs +0 -49
- data/sig/steep/server/change_buffer.rbs +0 -38
- data/sig/steep/server/delay_queue.rbs +0 -37
- data/sig/steep/server/interaction_worker.rbs +0 -90
- data/sig/steep/server/lsp_formatter.rbs +0 -63
- data/sig/steep/server/master.rbs +0 -299
- data/sig/steep/server/type_check_worker.rbs +0 -141
- data/sig/steep/server/worker_process.rbs +0 -97
- data/sig/steep/services/completion_provider.rbs +0 -264
- data/sig/steep/services/content_change.rbs +0 -37
- data/sig/steep/services/file_loader.rbs +0 -21
- data/sig/steep/services/goto_service.rbs +0 -106
- data/sig/steep/services/hover_provider/rbs.rbs +0 -47
- data/sig/steep/services/hover_provider/ruby.rbs +0 -127
- data/sig/steep/services/hover_provider/singleton_methods.rbs +0 -11
- data/sig/steep/services/path_assignment.rbs +0 -21
- data/sig/steep/services/signature_help_provider.rbs +0 -51
- data/sig/steep/services/signature_service.rbs +0 -156
- data/sig/steep/services/stats_calculator.rbs +0 -41
- data/sig/steep/services/type_check_service.rbs +0 -112
- data/sig/steep/services/type_name_completion.rbs +0 -135
- data/sig/steep/signature/validator.rbs +0 -85
- data/sig/steep/source/ignore_ranges.rbs +0 -38
- data/sig/steep/source.rbs +0 -105
- data/sig/steep/subtyping/cache.rbs +0 -17
- data/sig/steep/subtyping/check.rbs +0 -131
- data/sig/steep/subtyping/constraints.rbs +0 -111
- data/sig/steep/subtyping/relation.rbs +0 -63
- data/sig/steep/subtyping/result.rbs +0 -179
- data/sig/steep/subtyping/variable_variance.rbs +0 -25
- data/sig/steep/thread_waiter.rbs +0 -13
- data/sig/steep/type_construction.rbs +0 -542
- data/sig/steep/type_inference/block_params.rbs +0 -170
- data/sig/steep/type_inference/case_when.rbs +0 -130
- data/sig/steep/type_inference/constant_env.rbs +0 -29
- data/sig/steep/type_inference/context.rbs +0 -216
- data/sig/steep/type_inference/context_array.rbs +0 -38
- data/sig/steep/type_inference/logic_type_interpreter.rbs +0 -108
- data/sig/steep/type_inference/method_call.rbs +0 -124
- data/sig/steep/type_inference/method_params.rbs +0 -127
- data/sig/steep/type_inference/multiple_assignment.rbs +0 -76
- data/sig/steep/type_inference/send_args.rbs +0 -243
- data/sig/steep/type_inference/type_env.rbs +0 -160
- data/sig/steep/type_inference/type_env_builder.rbs +0 -81
- data/sig/steep/typing.rbs +0 -75
- data/sig/steep.rbs +0 -45
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module TypeInference
|
|
3
|
-
module MethodCall
|
|
4
|
-
class MethodDecl
|
|
5
|
-
attr_reader method_name: method_name
|
|
6
|
-
|
|
7
|
-
attr_reader method_def: RBS::Definition::Method::TypeDef
|
|
8
|
-
|
|
9
|
-
def initialize: (method_name: method_name, method_def: RBS::Definition::Method::TypeDef) -> void
|
|
10
|
-
|
|
11
|
-
def hash: () -> Integer
|
|
12
|
-
|
|
13
|
-
def ==: (untyped other) -> bool
|
|
14
|
-
|
|
15
|
-
alias eql? ==
|
|
16
|
-
|
|
17
|
-
def method_type: () -> RBS::MethodType
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
class MethodContext
|
|
21
|
-
attr_reader method_name: method_name
|
|
22
|
-
|
|
23
|
-
def initialize: (method_name: method_name) -> void
|
|
24
|
-
|
|
25
|
-
def to_s: () -> String
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
class ModuleContext
|
|
29
|
-
attr_reader type_name: RBS::TypeName
|
|
30
|
-
|
|
31
|
-
def initialize: (type_name: RBS::TypeName) -> void
|
|
32
|
-
|
|
33
|
-
def to_s: () -> String
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
class TopLevelContext
|
|
37
|
-
def to_s: () -> String
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
class UnknownContext
|
|
41
|
-
def to_s: () -> String
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
type context = MethodContext | ModuleContext | TopLevelContext | UnknownContext
|
|
45
|
-
|
|
46
|
-
class Base
|
|
47
|
-
attr_reader node: Parser::AST::Node
|
|
48
|
-
|
|
49
|
-
attr_reader context: context
|
|
50
|
-
|
|
51
|
-
attr_reader method_name: Symbol
|
|
52
|
-
|
|
53
|
-
attr_reader return_type: AST::Types::t
|
|
54
|
-
|
|
55
|
-
attr_reader receiver_type: AST::Types::t
|
|
56
|
-
|
|
57
|
-
def initialize: (node: Parser::AST::Node, context: context, method_name: Symbol, receiver_type: AST::Types::t, return_type: AST::Types::t) -> void
|
|
58
|
-
|
|
59
|
-
def with_return_type: (AST::Types::t new_type) -> self
|
|
60
|
-
|
|
61
|
-
def ==: (untyped other) -> bool
|
|
62
|
-
|
|
63
|
-
alias eql? ==
|
|
64
|
-
|
|
65
|
-
def hash: () -> Integer
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
type t = Typed | Special | Untyped | NoMethodError | Error
|
|
69
|
-
|
|
70
|
-
class Typed < Base
|
|
71
|
-
attr_reader actual_method_type: Interface::MethodType
|
|
72
|
-
|
|
73
|
-
attr_reader method_decls: Set[MethodDecl]
|
|
74
|
-
|
|
75
|
-
def initialize: (node: Parser::AST::Node, context: context, method_name: Symbol, receiver_type: AST::Types::t, actual_method_type: Interface::MethodType, method_decls: Set[MethodDecl], return_type: AST::Types::t) -> void
|
|
76
|
-
|
|
77
|
-
def update: (?node: Parser::AST::Node, ?return_type: AST::Types::t) -> self
|
|
78
|
-
|
|
79
|
-
def pure?: () -> bool
|
|
80
|
-
|
|
81
|
-
def ==: (untyped other) -> bool
|
|
82
|
-
|
|
83
|
-
alias eql? ==
|
|
84
|
-
|
|
85
|
-
def hash: () -> Integer
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
class Special < Typed
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
class Untyped < Base
|
|
92
|
-
def initialize: (node: Parser::AST::Node, context: context, method_name: Symbol) -> void
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
class NoMethodError < Base
|
|
96
|
-
attr_reader error: Diagnostic::Ruby::NoMethod
|
|
97
|
-
|
|
98
|
-
def initialize: (
|
|
99
|
-
node: Parser::AST::Node,
|
|
100
|
-
context: context,
|
|
101
|
-
method_name: Symbol,
|
|
102
|
-
receiver_type: AST::Types::t,
|
|
103
|
-
error: Diagnostic::Ruby::NoMethod
|
|
104
|
-
) -> void
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
class Error < Base
|
|
108
|
-
attr_reader errors: Array[Diagnostic::Ruby::Base]
|
|
109
|
-
|
|
110
|
-
attr_reader method_decls: Set[MethodDecl]
|
|
111
|
-
|
|
112
|
-
def initialize: (
|
|
113
|
-
node: Parser::AST::Node,
|
|
114
|
-
context: context,
|
|
115
|
-
method_name: Symbol,
|
|
116
|
-
receiver_type: AST::Types::t,
|
|
117
|
-
errors: Array[Diagnostic::Ruby::Base],
|
|
118
|
-
?method_decls: Set[MethodDecl],
|
|
119
|
-
?return_type: AST::Types::t
|
|
120
|
-
) -> void
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
end
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
use Parser::AST::Node, Steep::Interface::MethodType
|
|
2
|
-
use Steep::Interface::Function::Params, Steep::Interface::Block
|
|
3
|
-
|
|
4
|
-
module Steep
|
|
5
|
-
module TypeInference
|
|
6
|
-
# A MethodParams object provides the information of parameters from MethodType and nodes
|
|
7
|
-
#
|
|
8
|
-
# It primarly provides a mapping from a local variable (method parameter) to its type.
|
|
9
|
-
#
|
|
10
|
-
class MethodParams
|
|
11
|
-
class BaseParameter
|
|
12
|
-
attr_reader name: Symbol
|
|
13
|
-
|
|
14
|
-
attr_reader type: AST::Types::t?
|
|
15
|
-
|
|
16
|
-
attr_reader node: Node
|
|
17
|
-
|
|
18
|
-
def initialize: (name: Symbol, type: AST::Types::t?, node: Node) -> void
|
|
19
|
-
|
|
20
|
-
def optional?: () -> bool
|
|
21
|
-
|
|
22
|
-
def value: () -> Node?
|
|
23
|
-
|
|
24
|
-
def var_type: () -> AST::Types::t
|
|
25
|
-
|
|
26
|
-
def untyped?: () -> bool
|
|
27
|
-
|
|
28
|
-
def ==: (untyped other) -> bool
|
|
29
|
-
|
|
30
|
-
alias eql? ==
|
|
31
|
-
|
|
32
|
-
def hash: () -> Integer
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
class PositionalParameter < BaseParameter
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
class KeywordParameter < BaseParameter
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
class BaseRestParameter
|
|
42
|
-
attr_reader name: Symbol
|
|
43
|
-
|
|
44
|
-
attr_reader type: AST::Types::t?
|
|
45
|
-
|
|
46
|
-
attr_reader node: Node
|
|
47
|
-
|
|
48
|
-
def initialize: (name: Symbol, type: AST::Types::t?, node: Node) -> void
|
|
49
|
-
|
|
50
|
-
def ==: (untyped other) -> bool
|
|
51
|
-
|
|
52
|
-
alias eql? ==
|
|
53
|
-
|
|
54
|
-
def hash: () -> Integer
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
class PositionalRestParameter < BaseRestParameter
|
|
58
|
-
def var_type: () -> AST::Types::Name::Instance
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
class KeywordRestParameter < BaseRestParameter
|
|
62
|
-
def var_type: () -> AST::Types::Name::Instance
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
class BlockParameter
|
|
66
|
-
attr_reader name: Symbol
|
|
67
|
-
|
|
68
|
-
attr_reader type: Interface::Function?
|
|
69
|
-
|
|
70
|
-
attr_reader node: Node
|
|
71
|
-
|
|
72
|
-
attr_reader self_type: AST::Types::t?
|
|
73
|
-
|
|
74
|
-
def initialize: (name: Symbol, type: Interface::Function?, node: Node, optional: boolish, self_type: AST::Types::t?) -> void
|
|
75
|
-
|
|
76
|
-
@optional: boolish
|
|
77
|
-
|
|
78
|
-
def optional?: () -> bool
|
|
79
|
-
|
|
80
|
-
def var_type: () -> AST::Types::t
|
|
81
|
-
|
|
82
|
-
def ==: (untyped other) -> bool
|
|
83
|
-
|
|
84
|
-
alias eql? ==
|
|
85
|
-
|
|
86
|
-
def hash: () -> Integer
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
type param = PositionalParameter | KeywordParameter | PositionalRestParameter | KeywordRestParameter | BlockParameter
|
|
90
|
-
|
|
91
|
-
# The children of `:args` node
|
|
92
|
-
attr_reader args: Array[Node]
|
|
93
|
-
|
|
94
|
-
attr_reader method_type: MethodType?
|
|
95
|
-
|
|
96
|
-
# Mapping from the name of parameter to parameter object
|
|
97
|
-
attr_reader params: Hash[Symbol, param]
|
|
98
|
-
|
|
99
|
-
attr_reader errors: Array[Diagnostic::Ruby::Base]
|
|
100
|
-
|
|
101
|
-
# The type of `...`
|
|
102
|
-
#
|
|
103
|
-
# `nil` if the node doesn't have it.
|
|
104
|
-
#
|
|
105
|
-
attr_reader forward_arg_type: [Params, Block?]?
|
|
106
|
-
|
|
107
|
-
def initialize: (args: Array[Node], method_type: MethodType?, forward_arg_type: [Params, Block?]?) -> void
|
|
108
|
-
|
|
109
|
-
def []: (Symbol name) -> param
|
|
110
|
-
|
|
111
|
-
def param?: (Symbol) -> bool
|
|
112
|
-
|
|
113
|
-
def size: () -> Integer
|
|
114
|
-
|
|
115
|
-
def each_param: () { (param) -> void } -> void
|
|
116
|
-
| () -> Enumerator[param, void]
|
|
117
|
-
|
|
118
|
-
def each: () { (Symbol, AST::Types::t) -> void } -> void
|
|
119
|
-
|
|
120
|
-
def update: (?forward_arg_type: [Params, Block?]?) -> MethodParams
|
|
121
|
-
|
|
122
|
-
def self.empty: (node: Node) -> MethodParams
|
|
123
|
-
|
|
124
|
-
def self.build: (node: Node, method_type: MethodType) -> MethodParams
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
end
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module TypeInference
|
|
3
|
-
# This class provides an abstraction for multiple assignments.
|
|
4
|
-
#
|
|
5
|
-
class MultipleAssignment
|
|
6
|
-
type node_type_pair = [Parser::AST::Node, AST::Types::t]
|
|
7
|
-
|
|
8
|
-
# Encapsulate assignments included in one `masgn` node
|
|
9
|
-
#
|
|
10
|
-
# ```ruby
|
|
11
|
-
# a, *b, c = rhs
|
|
12
|
-
# # ^ Leading assignments
|
|
13
|
-
# # ^^ Splat assignment
|
|
14
|
-
# # ^ Trailing assignments
|
|
15
|
-
# ```
|
|
16
|
-
#
|
|
17
|
-
class Assignments
|
|
18
|
-
attr_reader rhs_type: AST::Types::t
|
|
19
|
-
|
|
20
|
-
attr_reader optional: bool
|
|
21
|
-
|
|
22
|
-
# Assignments before `*` assignment
|
|
23
|
-
attr_reader leading_assignments: Array[node_type_pair]
|
|
24
|
-
|
|
25
|
-
# Assignments after `*` assignment
|
|
26
|
-
#
|
|
27
|
-
# Empty if there is no splat assignment.
|
|
28
|
-
#
|
|
29
|
-
attr_reader trailing_assignments: Array[node_type_pair]
|
|
30
|
-
|
|
31
|
-
# Splat assignment if present
|
|
32
|
-
attr_reader splat_assignment: node_type_pair?
|
|
33
|
-
|
|
34
|
-
def initialize: (
|
|
35
|
-
rhs_type: AST::Types::t,
|
|
36
|
-
optional: bool,
|
|
37
|
-
leading_assignments: Array[node_type_pair],
|
|
38
|
-
trailing_assignments: Array[node_type_pair],
|
|
39
|
-
splat_assignment: node_type_pair?
|
|
40
|
-
) -> void
|
|
41
|
-
|
|
42
|
-
def each: () { (node_type_pair) -> void } -> void
|
|
43
|
-
| () -> Enumerator[node_type_pair, void]
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def initialize: () -> void
|
|
47
|
-
|
|
48
|
-
# Receives multiple assignment left hand side, right hand side type, and `optional` flag, and returns Assignments object
|
|
49
|
-
#
|
|
50
|
-
# This implements a case analysis on `rhs_type`:
|
|
51
|
-
#
|
|
52
|
-
# 1. If `rhs_type` is tuple, it returns an Assignments object with corresponding assignments
|
|
53
|
-
# 2. If `rhs_type` is an array, it returns an Assignments object with corresponding assignments
|
|
54
|
-
# 3. If `rhs_type` is `untyped`, it returns an Assignments with `untyped` type
|
|
55
|
-
# 4. It returns `nil` otherwise
|
|
56
|
-
#
|
|
57
|
-
def expand: (Parser::AST::Node mlhs, AST::Types::t rhs_type, bool optional) -> Assignments?
|
|
58
|
-
|
|
59
|
-
# Returns a type hint for multiple assignment right hand side
|
|
60
|
-
#
|
|
61
|
-
# It constructs a structure of tuple types, based on the assignment lhs, and variable types.
|
|
62
|
-
#
|
|
63
|
-
def hint_for_mlhs: (Parser::AST::Node mlhs, TypeEnv env) -> AST::Types::t?
|
|
64
|
-
|
|
65
|
-
private
|
|
66
|
-
|
|
67
|
-
def expand_tuple: (Array[Parser::AST::Node] assignments, AST::Types::t rhs_type, Array[AST::Types::t] types, bool optional) -> Assignments
|
|
68
|
-
|
|
69
|
-
def expand_array: (Array[Parser::AST::Node] assignments, AST::Types::Name::Instance rhs_type, bool optional) -> Assignments
|
|
70
|
-
|
|
71
|
-
def expand_any: (Array[Parser::AST::Node] assignments, AST::Types::t rhs_type, AST::Types::t element_type, bool optional) -> Assignments
|
|
72
|
-
|
|
73
|
-
def expand_else: (Array[Parser::AST::Node] assignments, AST::Types::t rhs_type, bool optional) -> Assignments
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module TypeInference
|
|
3
|
-
class SendArgs
|
|
4
|
-
class PositionalArgs
|
|
5
|
-
class NodeParamPair
|
|
6
|
-
attr_reader node: Parser::AST::Node
|
|
7
|
-
|
|
8
|
-
attr_reader param: Interface::Function::Params::PositionalParams::param
|
|
9
|
-
|
|
10
|
-
def initialize: (node: Parser::AST::Node, param: Interface::Function::Params::PositionalParams::param) -> void
|
|
11
|
-
|
|
12
|
-
include Equatable
|
|
13
|
-
|
|
14
|
-
def to_ary: () -> [Parser::AST::Node, Interface::Function::Params::t]
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
class NodeTypePair
|
|
18
|
-
attr_reader node: Parser::AST::Node
|
|
19
|
-
|
|
20
|
-
attr_reader type: AST::Types::t
|
|
21
|
-
|
|
22
|
-
def initialize: (node: Parser::AST::Node, type: AST::Types::t) -> void
|
|
23
|
-
|
|
24
|
-
include Equatable
|
|
25
|
-
|
|
26
|
-
def node_type: () -> AST::Types::t
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
class SplatArg
|
|
30
|
-
attr_reader node: Parser::AST::Node
|
|
31
|
-
|
|
32
|
-
attr_accessor type: AST::Types::t?
|
|
33
|
-
|
|
34
|
-
def initialize: (node: Parser::AST::Node) -> void
|
|
35
|
-
|
|
36
|
-
include Equatable
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
class UnexpectedArg
|
|
40
|
-
attr_reader node: Parser::AST::Node
|
|
41
|
-
|
|
42
|
-
def initialize: (node: Parser::AST::Node) -> void
|
|
43
|
-
|
|
44
|
-
include Equatable
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
class MissingArg
|
|
48
|
-
attr_reader params: Interface::Function::Params::PositionalParams?
|
|
49
|
-
|
|
50
|
-
def initialize: (params: Interface::Function::Params::PositionalParams?) -> void
|
|
51
|
-
|
|
52
|
-
include Equatable
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
type arg = NodeParamPair | NodeTypePair | SplatArg | error_arg
|
|
56
|
-
|
|
57
|
-
type error_arg = UnexpectedArg | MissingArg
|
|
58
|
-
|
|
59
|
-
attr_reader args: Array[Parser::AST::Node]
|
|
60
|
-
|
|
61
|
-
attr_reader index: Integer
|
|
62
|
-
|
|
63
|
-
attr_reader positional_params: Interface::Function::Params::PositionalParams?
|
|
64
|
-
|
|
65
|
-
attr_reader uniform: bool
|
|
66
|
-
|
|
67
|
-
def initialize: (args: Array[Parser::AST::Node], index: Integer, positional_params: Interface::Function::Params::PositionalParams?, ?uniform: bool) -> void
|
|
68
|
-
|
|
69
|
-
%a{pure} def node: () -> Parser::AST::Node?
|
|
70
|
-
|
|
71
|
-
def following_args: () -> Array[Parser::AST::Node]
|
|
72
|
-
|
|
73
|
-
%a{pure} def param: () -> Interface::Function::Params::PositionalParams::param?
|
|
74
|
-
|
|
75
|
-
def update: (?index: Integer, ?positional_params: Interface::Function::Params::PositionalParams?, ?uniform: bool) -> PositionalArgs
|
|
76
|
-
|
|
77
|
-
def next: () -> [arg, PositionalArgs]?
|
|
78
|
-
|
|
79
|
-
def uniform_type: () -> AST::Types::t?
|
|
80
|
-
|
|
81
|
-
def consume: (Integer n, node: Parser::AST::Node) -> [
|
|
82
|
-
UnexpectedArg | Array[Interface::Function::Params::PositionalParams::param] | nil,
|
|
83
|
-
PositionalArgs
|
|
84
|
-
]
|
|
85
|
-
|
|
86
|
-
def consume0: (
|
|
87
|
-
Integer n,
|
|
88
|
-
node: Parser::AST::Node,
|
|
89
|
-
params: Interface::Function::Params::PositionalParams?,
|
|
90
|
-
ps: Array[Interface::Function::Params::PositionalParams::param]
|
|
91
|
-
) -> (Interface::Function::Params::PositionalParams | UnexpectedArg | nil)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
class KeywordArgs
|
|
95
|
-
class ArgTypePairs
|
|
96
|
-
attr_reader pairs: Array[untyped]
|
|
97
|
-
|
|
98
|
-
def initialize: (pairs: Array[untyped]) -> void
|
|
99
|
-
|
|
100
|
-
include Equatable
|
|
101
|
-
|
|
102
|
-
def []: (Integer index) -> untyped
|
|
103
|
-
|
|
104
|
-
def size: () -> Integer
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
class SplatArg
|
|
108
|
-
attr_reader node: Parser::AST::Node
|
|
109
|
-
|
|
110
|
-
attr_accessor type: AST::Types::t?
|
|
111
|
-
|
|
112
|
-
def initialize: (node: Parser::AST::Node) -> void
|
|
113
|
-
|
|
114
|
-
include Equatable
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
class UnexpectedKeyword
|
|
118
|
-
attr_reader keyword: Symbol?
|
|
119
|
-
|
|
120
|
-
attr_reader node: Parser::AST::Node
|
|
121
|
-
|
|
122
|
-
include Equatable
|
|
123
|
-
|
|
124
|
-
def initialize: (keyword: Symbol?, node: Parser::AST::Node) -> void
|
|
125
|
-
|
|
126
|
-
def key_node: () -> Parser::AST::Node?
|
|
127
|
-
|
|
128
|
-
def value_node: () -> Parser::AST::Node?
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
class MissingKeyword
|
|
132
|
-
attr_reader keywords: Set[Symbol]
|
|
133
|
-
|
|
134
|
-
include Equatable
|
|
135
|
-
|
|
136
|
-
def initialize: (keywords: Set[Symbol]) -> void
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
type arg = ArgTypePairs | SplatArg | error_arg
|
|
140
|
-
|
|
141
|
-
type error_arg = UnexpectedKeyword | MissingKeyword
|
|
142
|
-
|
|
143
|
-
attr_reader kwarg_nodes: Array[Parser::AST::Node]
|
|
144
|
-
|
|
145
|
-
attr_reader keyword_params: Interface::Function::Params::KeywordParams
|
|
146
|
-
|
|
147
|
-
attr_reader index: Integer
|
|
148
|
-
|
|
149
|
-
attr_reader consumed_keywords: Set[Symbol]
|
|
150
|
-
|
|
151
|
-
def initialize: (
|
|
152
|
-
kwarg_nodes: Array[Parser::AST::Node],
|
|
153
|
-
keyword_params: Interface::Function::Params::KeywordParams,
|
|
154
|
-
?index: ::Integer,
|
|
155
|
-
?consumed_keywords: Set[Symbol]
|
|
156
|
-
) -> void
|
|
157
|
-
|
|
158
|
-
def update: (?index: Integer, ?consumed_keywords: Set[Symbol]) -> KeywordArgs
|
|
159
|
-
|
|
160
|
-
def keyword_pair: () -> Parser::AST::Node?
|
|
161
|
-
|
|
162
|
-
def required_keywords: () -> Hash[Symbol, AST::Types::t]
|
|
163
|
-
|
|
164
|
-
def optional_keywords: () -> Hash[Symbol, AST::Types::t]
|
|
165
|
-
|
|
166
|
-
%a{pure} def rest_type: () -> AST::Types::t?
|
|
167
|
-
|
|
168
|
-
def keyword_type: (Symbol key) -> AST::Types::t?
|
|
169
|
-
|
|
170
|
-
def all_keys: () -> Array[Symbol]
|
|
171
|
-
|
|
172
|
-
def all_values: () -> Array[AST::Types::t]
|
|
173
|
-
|
|
174
|
-
def possible_key_type: () -> AST::Types::t
|
|
175
|
-
|
|
176
|
-
def possible_value_type: () -> AST::Types::t
|
|
177
|
-
|
|
178
|
-
def next: () -> [arg, KeywordArgs]?
|
|
179
|
-
|
|
180
|
-
def consume_keys: (Array[Symbol] keys, node: Parser::AST::Node) -> [UnexpectedKeyword | Array[AST::Types::t], KeywordArgs]
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
class BlockPassArg
|
|
184
|
-
attr_reader node: Parser::AST::Node?
|
|
185
|
-
|
|
186
|
-
attr_reader block: Interface::Block?
|
|
187
|
-
|
|
188
|
-
def initialize: (node: Parser::AST::Node?, block: Interface::Block?) -> void
|
|
189
|
-
|
|
190
|
-
include Equatable
|
|
191
|
-
|
|
192
|
-
def no_block?: () -> bool
|
|
193
|
-
|
|
194
|
-
def compatible?: () -> bool
|
|
195
|
-
|
|
196
|
-
def block_missing?: () -> boolish
|
|
197
|
-
|
|
198
|
-
def unexpected_block?: () -> boolish
|
|
199
|
-
|
|
200
|
-
def pair: () -> [Parser::AST::Node, Interface::Function]?
|
|
201
|
-
|
|
202
|
-
def node_type: () -> AST::Types::t
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
class ForwardedArgs
|
|
206
|
-
attr_reader node: Parser::AST::Node
|
|
207
|
-
|
|
208
|
-
attr_reader params: Interface::Function::Params
|
|
209
|
-
|
|
210
|
-
def initialize: (node: Parser::AST::Node, params: Interface::Function::Params) -> void
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
attr_reader node: Parser::AST::Node
|
|
214
|
-
|
|
215
|
-
attr_reader arguments: Array[Parser::AST::Node]
|
|
216
|
-
|
|
217
|
-
attr_reader type: Interface::MethodType | AST::Types::Proc
|
|
218
|
-
|
|
219
|
-
def initialize: (node: Parser::AST::Node, arguments: Array[Parser::AST::Node], type: Interface::MethodType | AST::Types::Proc) -> void
|
|
220
|
-
|
|
221
|
-
attr_reader params (): Interface::Function::Params
|
|
222
|
-
|
|
223
|
-
attr_reader block (): Interface::Block?
|
|
224
|
-
|
|
225
|
-
def positional_params: () -> Interface::Function::Params::PositionalParams?
|
|
226
|
-
|
|
227
|
-
def keyword_params: () -> Interface::Function::Params::KeywordParams
|
|
228
|
-
|
|
229
|
-
def kwargs_node: () -> Parser::AST::Node?
|
|
230
|
-
|
|
231
|
-
def forwarded_args_node: () -> Parser::AST::Node?
|
|
232
|
-
|
|
233
|
-
def positional_arg: () -> PositionalArgs
|
|
234
|
-
|
|
235
|
-
def keyword_args: () -> KeywordArgs
|
|
236
|
-
|
|
237
|
-
def block_pass_arg: () -> BlockPassArg
|
|
238
|
-
|
|
239
|
-
def each: () { (PositionalArgs::arg | KeywordArgs::arg) -> void } -> [ForwardedArgs?, Array[Diagnostic::Ruby::Base]]
|
|
240
|
-
| () -> Enumerator[PositionalArgs::arg | KeywordArgs::arg, [ForwardedArgs?, Array[Diagnostic::Ruby::Base]]]
|
|
241
|
-
end
|
|
242
|
-
end
|
|
243
|
-
end
|