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,131 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Subtyping
|
|
3
|
-
class Check
|
|
4
|
-
ABORT_LIMIT: Integer
|
|
5
|
-
|
|
6
|
-
attr_reader builder: Interface::Builder
|
|
7
|
-
|
|
8
|
-
attr_reader cache: Cache
|
|
9
|
-
|
|
10
|
-
@assumptions: Set[Relation[untyped]]?
|
|
11
|
-
|
|
12
|
-
@bounds: Array[Hash[Symbol, AST::Types::t?]]
|
|
13
|
-
|
|
14
|
-
@self_type: AST::Types::t?
|
|
15
|
-
|
|
16
|
-
@instance_type: AST::Types::t?
|
|
17
|
-
|
|
18
|
-
@class_type: AST::Types::t?
|
|
19
|
-
|
|
20
|
-
@constraints: Constraints?
|
|
21
|
-
|
|
22
|
-
def initialize: (builder: Interface::Builder) -> void
|
|
23
|
-
|
|
24
|
-
def factory: () -> AST::Types::Factory
|
|
25
|
-
|
|
26
|
-
def with_context: [A] (self_type: AST::Types::t?, instance_type: AST::Types::t?, class_type: AST::Types::t?, constraints: Constraints?) { () -> A } -> A
|
|
27
|
-
|
|
28
|
-
def self_type: () -> AST::Types::t
|
|
29
|
-
|
|
30
|
-
def instance_type: () -> AST::Types::t
|
|
31
|
-
|
|
32
|
-
def class_type: () -> AST::Types::t
|
|
33
|
-
|
|
34
|
-
def constraints: () -> Constraints
|
|
35
|
-
|
|
36
|
-
def push_variable_bounds: [A] (Array[Interface::TypeParam] | Hash[Symbol, AST::Types::t?] params) { () -> A } -> A
|
|
37
|
-
|
|
38
|
-
def variable_upper_bound: (Symbol name) -> AST::Types::t?
|
|
39
|
-
|
|
40
|
-
def variable_upper_bounds: () -> Hash[Symbol, AST::Types::t?]
|
|
41
|
-
|
|
42
|
-
def push_assumption: [A] (Relation[untyped] relation) { () -> A } -> A
|
|
43
|
-
|
|
44
|
-
def assumptions: () -> Set[Relation[untyped]]
|
|
45
|
-
|
|
46
|
-
def each_ancestor: (RBS::DefinitionBuilder::AncestorBuilder::OneAncestors ancestors) { (RBS::Definition::Ancestor::t) -> void } -> void
|
|
47
|
-
| (RBS::DefinitionBuilder::AncestorBuilder::OneAncestors ancestors) -> Enumerator[RBS::Definition::Ancestor::t, void]
|
|
48
|
-
|
|
49
|
-
type super_type = AST::Types::Name::Instance | AST::Types::Name::Interface | AST::Types::Name::Singleton
|
|
50
|
-
|
|
51
|
-
def instance_super_types: (RBS::TypeName type_name, args: Array[AST::Types::t]) -> Array[super_type]
|
|
52
|
-
|
|
53
|
-
def singleton_super_types: (RBS::TypeName type_name) -> Array[super_type]
|
|
54
|
-
|
|
55
|
-
def check: (Relation[AST::Types::t] relation, constraints: Constraints, self_type: AST::Types::t?, instance_type: AST::Types::t?, class_type: AST::Types::t?) -> Result::t
|
|
56
|
-
|
|
57
|
-
def check_type: (Relation[AST::Types::t] relation) -> Result::t
|
|
58
|
-
|
|
59
|
-
def cache_bounds: (Relation[AST::Types::t] relation) -> Hash[Symbol, AST::Types::t?]
|
|
60
|
-
|
|
61
|
-
def alias?: (AST::Types::t `type`) -> bool
|
|
62
|
-
|
|
63
|
-
def cacheable?: (Relation[AST::Types::t] relation) -> bool
|
|
64
|
-
|
|
65
|
-
def true_type?: (AST::Types::t `type`) -> bool
|
|
66
|
-
|
|
67
|
-
def false_type?: (AST::Types::t `type`) -> bool
|
|
68
|
-
|
|
69
|
-
include Result::Helper
|
|
70
|
-
|
|
71
|
-
def check_type0: (Relation[AST::Types::t] relation) -> Result::t
|
|
72
|
-
|
|
73
|
-
def definition_for_type: (AST::Types::t `type`) -> RBS::Definition
|
|
74
|
-
|
|
75
|
-
# Returns true if given `type` is with one or more type arguments.
|
|
76
|
-
#
|
|
77
|
-
def arg_type?: (AST::Types::t `type`) -> bool
|
|
78
|
-
|
|
79
|
-
type application_type = AST::Types::Name::Instance | AST::Types::Name::Interface | AST::Types::Name::Alias
|
|
80
|
-
|
|
81
|
-
def check_type_arg: (Relation[application_type] relation) -> untyped
|
|
82
|
-
|
|
83
|
-
def same_type?: (Relation[AST::Types::t] relation) -> bool
|
|
84
|
-
|
|
85
|
-
def check_interface: (Relation[Interface::Shape] relation) -> Result::t
|
|
86
|
-
|
|
87
|
-
def check_method: (Symbol name, Relation[Interface::Shape::Entry] relation) -> Result::t
|
|
88
|
-
|
|
89
|
-
def check_generic_method_type: (Symbol name, Relation[Interface::MethodType] relation) -> Result::t
|
|
90
|
-
|
|
91
|
-
def check_constraints: (Relation[untyped] relation, variables: Enumerable[Symbol], variance: VariableVariance) -> Result::t
|
|
92
|
-
|
|
93
|
-
def check_method_type: (Symbol name, Relation[Interface::MethodType] relation) -> Result::t
|
|
94
|
-
|
|
95
|
-
# Receives subtyping relation of blocks `b <: b'` where `b` and `b'` are expanded from
|
|
96
|
-
# subtyping relation of two method types `(...) _b_ -> T <: (...) _b'_ -> S`.
|
|
97
|
-
#
|
|
98
|
-
# Returns `true` is the relation is satisfied immediately.
|
|
99
|
-
# Returns a Relation when the given relation can be expanded to relation between Interface::Block.
|
|
100
|
-
# Returns a failure otherwise.
|
|
101
|
-
#
|
|
102
|
-
def expand_block_given: (Symbol name, Relation[Interface::Block?] relation) -> (Relation[Interface::Block] | true | Result::Failure)
|
|
103
|
-
|
|
104
|
-
# Receives a subtyping relation between self bindings `S <: S'` that is included in procs or blocks as:
|
|
105
|
-
#
|
|
106
|
-
# * `^() [self: S] -> T <: ^() [self: S'] -> T` (proc)
|
|
107
|
-
# * `() { () [self: S'] -> T } -> T <: () { () [self: S] -> T } -> T` (block in method type)
|
|
108
|
-
#
|
|
109
|
-
def check_self_type_binding: (Relation[untyped], AST::Types::t? sub_self, AST::Types::t? super_self) -> Result::t?
|
|
110
|
-
|
|
111
|
-
def check_function: (Symbol name, Relation[Interface::Function] relation) -> Result::t
|
|
112
|
-
|
|
113
|
-
def check_method_params: (Symbol name, Relation[Interface::Function::Params] relation) -> Result::t
|
|
114
|
-
|
|
115
|
-
# Returns `nil` when given two method_types are structually comparable.
|
|
116
|
-
# Returns a failure otherwise.
|
|
117
|
-
#
|
|
118
|
-
def match_method_type_fails?: (Symbol name, Interface::MethodType method_type1, Interface::MethodType method_type2) -> (nil | Result::t)
|
|
119
|
-
|
|
120
|
-
def match_params: (Symbol name, Relation[Interface::Function::Params] relation) -> (Array[[AST::Types::t, AST::Types::t]] | Result::t)
|
|
121
|
-
|
|
122
|
-
def expand_alias: (AST::Types::t `type`) -> AST::Types::t
|
|
123
|
-
|
|
124
|
-
# Returns the shortest type paths for one of the _unknown_ type variables.
|
|
125
|
-
# Returns nil if there is no path.
|
|
126
|
-
def hole_path: (AST::Types::t `type`, ?Array[AST::Types::t] path) -> Array[AST::Types::t]?
|
|
127
|
-
|
|
128
|
-
def Relation: [T < Relation::_Subject] (T sub, T sup) -> Relation[T]
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Subtyping
|
|
3
|
-
class Constraints
|
|
4
|
-
class UnsatisfiedInvariantError < StandardError
|
|
5
|
-
attr_reader constraints: untyped
|
|
6
|
-
|
|
7
|
-
attr_reader reason: untyped
|
|
8
|
-
|
|
9
|
-
def initialize: (reason: untyped, constraints: untyped) -> void
|
|
10
|
-
|
|
11
|
-
class VariablesUnknownsNotDisjoint
|
|
12
|
-
attr_reader vars: untyped
|
|
13
|
-
|
|
14
|
-
def initialize: (vars: untyped) -> void
|
|
15
|
-
|
|
16
|
-
def message: () -> ::String
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
class VariablesFreeVariablesNotDisjoint
|
|
20
|
-
attr_reader var: untyped
|
|
21
|
-
|
|
22
|
-
attr_reader lower_bound: untyped
|
|
23
|
-
|
|
24
|
-
attr_reader upper_bound: untyped
|
|
25
|
-
|
|
26
|
-
def initialize: (?var: untyped?, ?lower_bound: untyped?, ?upper_bound: untyped?) -> void
|
|
27
|
-
|
|
28
|
-
def message: () -> ::String
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
class UnknownsFreeVariableNotDisjoint
|
|
32
|
-
attr_reader var: untyped
|
|
33
|
-
|
|
34
|
-
attr_reader upper_bound: untyped
|
|
35
|
-
|
|
36
|
-
attr_reader lower_bound: untyped
|
|
37
|
-
|
|
38
|
-
def initialize: (var: untyped, lower_bound: untyped, upper_bound: untyped) -> void
|
|
39
|
-
|
|
40
|
-
def message: () -> ::String
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
class UnsatisfiableConstraint < StandardError
|
|
45
|
-
attr_reader var: untyped
|
|
46
|
-
|
|
47
|
-
attr_reader sub_type: untyped
|
|
48
|
-
|
|
49
|
-
attr_reader super_type: untyped
|
|
50
|
-
|
|
51
|
-
attr_reader result: untyped
|
|
52
|
-
|
|
53
|
-
def initialize: (var: untyped, sub_type: untyped, super_type: untyped, result: untyped) -> void
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
class Context
|
|
57
|
-
attr_reader variance: untyped
|
|
58
|
-
|
|
59
|
-
attr_reader self_type: AST::Types::t
|
|
60
|
-
|
|
61
|
-
attr_reader instance_type: AST::Types::t
|
|
62
|
-
|
|
63
|
-
attr_reader class_type: AST::Types::t
|
|
64
|
-
|
|
65
|
-
def initialize: (variance: untyped, self_type: AST::Types::t, instance_type: AST::Types::t, class_type: AST::Types::t) -> void
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
attr_reader dictionary: Hash[Symbol, [Set[AST::Types::t], Set[AST::Types::t], Set[AST::Types::t]]]
|
|
69
|
-
|
|
70
|
-
attr_reader vars: Set[Symbol]
|
|
71
|
-
|
|
72
|
-
def initialize: (unknowns: _Each[Symbol]) -> void
|
|
73
|
-
|
|
74
|
-
def self.empty: () -> Constraints
|
|
75
|
-
|
|
76
|
-
def add_var: (*Symbol vars) -> void
|
|
77
|
-
|
|
78
|
-
def add: (Symbol var, ?sub_type: untyped?, ?super_type: untyped?, ?skip: bool) -> untyped
|
|
79
|
-
|
|
80
|
-
def eliminate_variable: (AST::Types::t `type`, to: AST::Types::t) -> AST::Types::t
|
|
81
|
-
|
|
82
|
-
def unknown?: (Symbol var) -> bool
|
|
83
|
-
|
|
84
|
-
def unknowns: () -> Set[Symbol]
|
|
85
|
-
|
|
86
|
-
def unknown!: (Symbol var) -> void
|
|
87
|
-
|
|
88
|
-
def empty?: () -> bool
|
|
89
|
-
|
|
90
|
-
def upper_bound: (Symbol var, ?skip: bool) -> AST::Types::t
|
|
91
|
-
|
|
92
|
-
def lower_bound: (Symbol var, ?skip: bool) -> AST::Types::t
|
|
93
|
-
|
|
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
|
-
|
|
97
|
-
def has_constraint?: (Symbol var) -> bool
|
|
98
|
-
|
|
99
|
-
def each: () { ([Symbol, AST::Types::t, AST::Types::t]) -> void } -> void
|
|
100
|
-
| () -> Enumerator[[Symbol, AST::Types::t, AST::Types::t], void]
|
|
101
|
-
|
|
102
|
-
def to_s: () -> ::String
|
|
103
|
-
|
|
104
|
-
private
|
|
105
|
-
|
|
106
|
-
def lower_bound_types: (Symbol var_name) -> Set[AST::Types::t]
|
|
107
|
-
|
|
108
|
-
def upper_bound_types: (Symbol var_name) -> Set[AST::Types::t]
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
end
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Subtyping
|
|
3
|
-
class Relation[out Subject < _Subject]
|
|
4
|
-
interface _Subject
|
|
5
|
-
def hash: () -> Integer
|
|
6
|
-
|
|
7
|
-
def is_a?: (Module) -> bool
|
|
8
|
-
|
|
9
|
-
def class: () -> Class
|
|
10
|
-
|
|
11
|
-
def !: () -> bool
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
attr_reader sub_type: Subject
|
|
15
|
-
|
|
16
|
-
attr_reader super_type: Subject
|
|
17
|
-
|
|
18
|
-
def initialize: (sub_type: Subject, super_type: Subject) -> void
|
|
19
|
-
|
|
20
|
-
def hash: () -> Integer
|
|
21
|
-
|
|
22
|
-
def ==: (untyped other) -> bool
|
|
23
|
-
|
|
24
|
-
alias eql? ==
|
|
25
|
-
|
|
26
|
-
def to_s: () -> ::String
|
|
27
|
-
|
|
28
|
-
def to_ary: () -> [Subject, Subject]
|
|
29
|
-
|
|
30
|
-
def type?: () -> bool
|
|
31
|
-
|
|
32
|
-
def interface?: () -> bool
|
|
33
|
-
|
|
34
|
-
def method?: () -> bool
|
|
35
|
-
|
|
36
|
-
def function?: () -> bool
|
|
37
|
-
|
|
38
|
-
def params?: () -> bool
|
|
39
|
-
|
|
40
|
-
def block?: () -> bool
|
|
41
|
-
|
|
42
|
-
type relation_type = :type | :interface | :method | :function | :params | :block
|
|
43
|
-
|
|
44
|
-
def assert_type: (relation_type `type`) -> void
|
|
45
|
-
|
|
46
|
-
def type!: () -> void
|
|
47
|
-
|
|
48
|
-
def interface!: () -> void
|
|
49
|
-
|
|
50
|
-
def method!: () -> void
|
|
51
|
-
|
|
52
|
-
def function!: () -> void
|
|
53
|
-
|
|
54
|
-
def params!: () -> void
|
|
55
|
-
|
|
56
|
-
def block!: () -> void
|
|
57
|
-
|
|
58
|
-
def map: [T < Object] () { (Subject) -> T } -> Relation[T]
|
|
59
|
-
|
|
60
|
-
def flip: () -> Relation[Subject]
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Subtyping
|
|
3
|
-
module Result
|
|
4
|
-
type t = Skip | Expand | All | Any | Success | Failure
|
|
5
|
-
|
|
6
|
-
class Base
|
|
7
|
-
attr_reader relation: Relation[untyped]
|
|
8
|
-
|
|
9
|
-
def initialize: (Relation[untyped] relation) -> void
|
|
10
|
-
|
|
11
|
-
def failure?: () -> bool
|
|
12
|
-
|
|
13
|
-
def success?: () -> bool
|
|
14
|
-
|
|
15
|
-
def then: () { (self) -> void } -> self
|
|
16
|
-
|
|
17
|
-
def else: () { (self) -> void } -> self
|
|
18
|
-
|
|
19
|
-
def failure_path: (?Array[t] path) -> Array[t]?
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
class Skip < Base
|
|
23
|
-
def success?: () -> false
|
|
24
|
-
|
|
25
|
-
def failure?: () -> false
|
|
26
|
-
|
|
27
|
-
def failure_path: (?untyped path) -> untyped
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
class Expand < Base
|
|
31
|
-
attr_reader child: t
|
|
32
|
-
|
|
33
|
-
def initialize: (Relation[untyped] relation) { (Relation[untyped]) -> t } -> void
|
|
34
|
-
|
|
35
|
-
def success?: () -> bool
|
|
36
|
-
|
|
37
|
-
def failure_path: (?Array[t] path) -> Array[t]?
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
class All < Base
|
|
41
|
-
attr_reader branches: Array[t]
|
|
42
|
-
|
|
43
|
-
def initialize: (Relation[untyped] relation) -> void
|
|
44
|
-
|
|
45
|
-
@failure: bool
|
|
46
|
-
|
|
47
|
-
# Returns `false` if no future `#add` changes the result.
|
|
48
|
-
def add: [T < Relation::_Subject] (*Relation[T] relations) { (Relation[T]) -> t? } -> bool
|
|
49
|
-
|
|
50
|
-
# Returns `false` if no future `#add` changes the result.
|
|
51
|
-
def add_result: (t?) -> bool
|
|
52
|
-
|
|
53
|
-
def success?: () -> bool
|
|
54
|
-
|
|
55
|
-
def failure?: () -> bool
|
|
56
|
-
|
|
57
|
-
def failure_path: (?Array[t] path) -> Array[t]?
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
class Any < Base
|
|
61
|
-
attr_reader branches: Array[t]
|
|
62
|
-
|
|
63
|
-
def initialize: (Relation[untyped] relation) -> void
|
|
64
|
-
|
|
65
|
-
@success: bool
|
|
66
|
-
|
|
67
|
-
# Returns `false` if no future `#add` changes the result.
|
|
68
|
-
def add: [T < Object] (*Relation[T] relations) { (Relation[T]) -> t } -> bool
|
|
69
|
-
|
|
70
|
-
def success?: () -> bool
|
|
71
|
-
|
|
72
|
-
def failure_path: (?Array[t] path) -> Array[t]?
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
class Success < Base
|
|
76
|
-
def success?: () -> true
|
|
77
|
-
|
|
78
|
-
def failure_path: (?Array[t] path) -> Array[t]?
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
class Failure < Base
|
|
82
|
-
type error = MethodMissingError | BlockMismatchError | ParameterMismatchError
|
|
83
|
-
| UnknownPairError | PolyMethodSubtyping | UnsatisfiedConstraints
|
|
84
|
-
| SelfBindingMismatch | LoopAbort
|
|
85
|
-
|
|
86
|
-
class MethodMissingError
|
|
87
|
-
attr_reader name: untyped
|
|
88
|
-
|
|
89
|
-
def initialize: (name: untyped) -> void
|
|
90
|
-
|
|
91
|
-
def message: () -> ::String
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
class BlockMismatchError
|
|
95
|
-
attr_reader name: untyped
|
|
96
|
-
|
|
97
|
-
def initialize: (name: untyped) -> void
|
|
98
|
-
|
|
99
|
-
def message: () -> ::String
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
class ParameterMismatchError
|
|
103
|
-
attr_reader name: untyped
|
|
104
|
-
|
|
105
|
-
def initialize: (name: untyped) -> void
|
|
106
|
-
|
|
107
|
-
def message: () -> ::String
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
class UnknownPairError
|
|
111
|
-
attr_reader relation: untyped
|
|
112
|
-
|
|
113
|
-
def initialize: (relation: untyped) -> void
|
|
114
|
-
|
|
115
|
-
def message: () -> ::String
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
class PolyMethodSubtyping
|
|
119
|
-
attr_reader name: untyped
|
|
120
|
-
|
|
121
|
-
def initialize: (name: untyped) -> void
|
|
122
|
-
|
|
123
|
-
def message: () -> ::String
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
class UnsatisfiedConstraints
|
|
127
|
-
attr_reader error: untyped
|
|
128
|
-
|
|
129
|
-
def initialize: (untyped error) -> void
|
|
130
|
-
|
|
131
|
-
def var: () -> untyped
|
|
132
|
-
|
|
133
|
-
def sub_type: () -> untyped
|
|
134
|
-
|
|
135
|
-
def super_type: () -> untyped
|
|
136
|
-
|
|
137
|
-
def result: () -> untyped
|
|
138
|
-
|
|
139
|
-
def message: () -> ::String
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
class SelfBindingMismatch
|
|
143
|
-
def initialize: () -> void
|
|
144
|
-
|
|
145
|
-
def message: () -> String
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
class LoopAbort
|
|
149
|
-
def message: () -> String
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
attr_reader error: error
|
|
153
|
-
|
|
154
|
-
def initialize: (Relation[untyped] relation, error error) -> void
|
|
155
|
-
|
|
156
|
-
def success?: () -> false
|
|
157
|
-
|
|
158
|
-
def failure_path: (?Array[t] path) -> Array[t]?
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
module Helper
|
|
162
|
-
def Skip: (Relation[untyped] relation) -> Skip
|
|
163
|
-
|
|
164
|
-
def Expand: [T < Object] (Relation[T] relation) { (Relation[T]) -> t } -> Expand
|
|
165
|
-
|
|
166
|
-
def All: (Relation[untyped] relation) { (All) -> void } -> All
|
|
167
|
-
|
|
168
|
-
def Any: (Relation[untyped] relation) { (Any) -> void } -> Any
|
|
169
|
-
|
|
170
|
-
def Success: (Relation[untyped] relation) -> Success
|
|
171
|
-
|
|
172
|
-
alias success Success
|
|
173
|
-
|
|
174
|
-
def Failure: (Relation[untyped] relation, Failure::error) -> Failure
|
|
175
|
-
| (Relation[untyped]) { () -> Failure::error } -> Failure
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
end
|
|
179
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Subtyping
|
|
3
|
-
class VariableVariance
|
|
4
|
-
attr_reader covariants: Set[Symbol]
|
|
5
|
-
|
|
6
|
-
attr_reader contravariants: Set[Symbol]
|
|
7
|
-
|
|
8
|
-
def initialize: (covariants: Set[Symbol], contravariants: Set[Symbol]) -> void
|
|
9
|
-
|
|
10
|
-
def covariant?: (Symbol var) -> bool
|
|
11
|
-
|
|
12
|
-
def contravariant?: (Symbol var) -> bool
|
|
13
|
-
|
|
14
|
-
def invariant?: (Symbol var) -> bool
|
|
15
|
-
|
|
16
|
-
def self.from_type: (AST::Types::t) -> VariableVariance
|
|
17
|
-
|
|
18
|
-
def self.from_method_type: (Interface::MethodType method_type) -> VariableVariance
|
|
19
|
-
|
|
20
|
-
def self.add_params: (Interface::Function::Params params, block: bool, covariants: Set[Symbol], contravariants: Set[Symbol]) -> void
|
|
21
|
-
|
|
22
|
-
def self.add_type: (AST::Types::t `type`, variance: :covariant | :contravariant | :invariant, covariants: Set[Symbol], contravariants: Set[Symbol]) -> void
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
data/sig/steep/thread_waiter.rbs
DELETED