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,170 +0,0 @@
1
- module Steep
2
- module TypeInference
3
- # Block parameters have the following differences from method parameters:
4
- #
5
- # * Allows arity mismatch
6
- # * Distributing array-ish argument to parameters
7
- # * Allows _multiple_ parameter assignments
8
- #
9
- # ### Allows arity mismatch
10
- #
11
- # (TBD)
12
- #
13
- # ### Distributing array-ish argument to parameters
14
- #
15
- # A block can receive an array(-ish) argument as follows:
16
- # Assume `yield [1,2,3]` evaluates to call the block.
17
- #
18
- # 1. With one parameter `{|x| ... }` (`x` is `[1, 2, 3]`)
19
- # 2. With several parameters (splatting) `{|x, y, z| ... }` (`x` is `1`, ...)
20
- #
21
- # The splatting applies only when one argument that is an array-ish is yielded.
22
- #
23
- # Because we have another rule which allows parameter omission, Ruby has another rule to avoid ambiguity.
24
- #
25
- # 3. One parameter with trailing comma splats `{|x,| ... }` (`x` is `1`)
26
- #
27
- # The parser has `:procarg0` node for case 1 and `arg` nodes for other cases.
28
- #
29
- # ### Allows _multiple_ parameter assignments
30
- #
31
- class BlockParams
32
- # Param object represents a block parameter
33
- #
34
- # * `var` is name of the parameter
35
- # * `type` is the type of the parameter, if given through inline annotation
36
- # * `value` is the default value node
37
- # * `node` is the node of the parameter
38
- #
39
- class Param
40
- attr_reader var: Symbol?
41
-
42
- attr_reader type: AST::Types::t?
43
-
44
- attr_reader value: Parser::AST::Node?
45
-
46
- attr_reader node: Parser::AST::Node
47
-
48
- def initialize: (var: Symbol?, type: AST::Types::t?, value: Parser::AST::Node?, node: Parser::AST::Node) -> void
49
-
50
- def ==: (untyped other) -> bool
51
-
52
- alias eql? ==
53
-
54
- def hash: () -> Integer
55
-
56
- def each_param: () { (Param) -> void } -> void
57
- | () -> Enumerator[Param, void]
58
- end
59
-
60
- # MultipleParam object represents a _multiple_ block parameter
61
- #
62
- # ```ruby
63
- # foo do |(x, y)|
64
- # # ^^^^^^ This is the multiple block parameter
65
- # end
66
- # ```
67
- #
68
- # * `#node` is `:mlhs` node or `:procarg0` node
69
- # * Param objects in `#params` don't have `value` because of Ruby syntax rule
70
- #
71
- class MultipleParam
72
- attr_reader node: Parser::AST::Node
73
-
74
- attr_reader params: Array[Param | MultipleParam]
75
-
76
- def initialize: (node: Parser::AST::Node, params: Array[Param | MultipleParam]) -> void
77
-
78
- def ==: (untyped other) -> bool
79
-
80
- alias eql? ==
81
-
82
- def hash: () -> Integer
83
-
84
- # Returns a hash table that associates variables to its type annotation
85
- #
86
- def variable_types: () -> Hash[Symbol, AST::Types::t?]
87
-
88
- # Yields Param objects in `self` and it's `params` recursively
89
- #
90
- def each_param: () { (Param) -> void } -> void
91
- | () -> Enumerator[Param, void]
92
-
93
- # Type that is constructed from `#params` type annotations
94
- #
95
- # Returns `nil` any part of the params is left un-annotated.
96
- #
97
- def type: () -> AST::Types::t?
98
- end
99
-
100
- attr_reader leading_params: Array[Param | MultipleParam]
101
-
102
- attr_reader optional_params: Array[Param]
103
-
104
- attr_reader rest_param: Param?
105
-
106
- attr_reader trailing_params: Array[Param | MultipleParam]
107
-
108
- attr_reader block_param: Param?
109
-
110
- def initialize: (
111
- leading_params: Array[Param | MultipleParam],
112
- optional_params: Array[Param],
113
- rest_param: Param?,
114
- trailing_params: Array[Param | MultipleParam],
115
- block_param: Param?
116
- ) -> void
117
-
118
- def params: () -> Array[Param | MultipleParam]
119
-
120
- def self.from_node: (Parser::AST::Node node, annotations: AST::Annotation::Collection) -> BlockParams
121
-
122
- def self.from_multiple: (Parser::AST::Node node, AST::Annotation::Collection) -> MultipleParam
123
-
124
- def params_type: (?hint: Interface::Function::Params?) -> Interface::Function::Params
125
-
126
- def params_type0: (hint: nil) -> Interface::Function::Params
127
- | (hint: Interface::Function::Params?) -> Interface::Function::Params?
128
-
129
- def zip: (
130
- Interface::Function::Params params_type,
131
- Interface::Block? block,
132
- factory: AST::Types::Factory
133
- ) -> Array[[Param | MultipleParam, AST::Types::t]]
134
-
135
- # Returns true if given possible block yields are subject to auto expand/splat
136
- #
137
- # ```rbs
138
- # { (Array[String]) -> void } # Array[String]
139
- # { ([Integer, String]) -> void } # [Integer, String]
140
- # { (String) -> void } # nil
141
- # ```
142
- #
143
- def expandable_params?: (Interface::Function::Params params_type, AST::Types::Factory) -> AST::Types::t?
144
-
145
- # Returns true if the block is defined to expand/splat automatically
146
- #
147
- # ```ruby
148
- # foo {|x, y| ... } # true (has multiple parameters)
149
- # foo {|x, *x| ... } # true (has normal and rest parameters)
150
- # foo {|x,| ... } # true s(:arg, :x) (has one parameter with trailing comma)
151
- # foo {|x| ... } # false s(:procarg0, s(:arg :x))
152
- # ```
153
- #
154
- def expandable?: () -> bool
155
-
156
- def each: () { (Param | MultipleParam) -> void } -> void
157
- | () -> Enumerator[Param | MultipleParam, void]
158
-
159
- # Yields `Param` recursively
160
- #
161
- def each_single_param: () { (Param) -> void } -> void
162
-
163
- # Returns true if the parameter is single `untyped`
164
- #
165
- # This will automatically distribute `untyped` on block parameters.
166
- #
167
- def untyped_args?: (Interface::Function::Params) -> bool
168
- end
169
- end
170
- end
@@ -1,130 +0,0 @@
1
- use Parser::AST::Node
2
- use Steep::TypeConstruction::Pair, Steep::TypeInference::LogicTypeInterpreter::Result
3
- use Steep::NodeHelper::condition_loc, Steep::NodeHelper::keyword_loc
4
-
5
- module Steep
6
- module TypeInference
7
- class CaseWhen
8
- class WhenPatterns
9
- include NodeHelper
10
-
11
- attr_reader logic: LogicTypeInterpreter
12
-
13
- attr_reader initial_constr: TypeConstruction
14
-
15
- # True if the `when` clause is unreachable
16
- attr_reader unreachable_clause: bool
17
-
18
- @assignment_node: Node
19
-
20
- attr_reader pattern_results: Array[[Node, Result, Result]]
21
-
22
- def initialize: (LogicTypeInterpreter logic, TypeConstruction initial_constr, bool unreachable, Node assignment_node) -> void
23
-
24
- def add_pattern: (Node pattern) { (Node, TypeConstruction, bool) -> Pair } -> void
25
-
26
- # The result for body of the when-clause
27
- #
28
- # Raises an error when no patern is registered.
29
- #
30
- def body_result: () { (TypeEnv) -> TypeEnv? } -> [TypeConstruction, bool]
31
-
32
- # The result for next when-clause
33
- #
34
- # Raises an error when no patern is registered.
35
- #
36
- def falsy_result: () -> [TypeConstruction, bool]
37
-
38
- # The result for incoming pattern
39
- def latest_result: () -> [TypeConstruction, bool]
40
-
41
- # Returns new object equivalent to @assignment_node
42
- def assignment_node: () -> Node
43
- end
44
-
45
- type when_result = [
46
- Result, # Type of the body of the when-clause
47
- Result # Result for the case the when-clause doesn't match
48
- ]
49
-
50
- include NodeHelper
51
- extend NodeHelper
52
-
53
- # The location of `#node`
54
- attr_reader location: condition_loc
55
-
56
- # `case` node
57
- attr_reader node: Node
58
-
59
- attr_reader condition_node: Node
60
-
61
- attr_reader when_nodes: Array[Node]
62
-
63
- attr_reader else_node: Node?
64
-
65
- attr_reader logic: LogicTypeInterpreter
66
-
67
- attr_reader clause_results: Array[when_result]
68
-
69
- attr_reader else_result: Pair?
70
-
71
- # Fresh local variable name that contains the value of `#condition_node`
72
- attr_reader var_name: Symbol
73
-
74
- # `lvasgn` node that propagates the value of `#condition_node` to local variables
75
- attr_reader assignment_node: Node
76
-
77
- # A node that points to the value of `#condition_node`
78
- #
79
- # `nil` if it is an local variable.
80
- #
81
- attr_reader value_node: Node?
82
-
83
- # The result of the type checking of `#condition_node`
84
- #
85
- attr_reader initial_constr: TypeConstruction
86
-
87
- # The public API
88
- #
89
- # It type checks given `case` node with condition node, and records types and errors of sub nodes.
90
- #
91
- def self.type_check: (TypeConstruction, Node, LogicTypeInterpreter, hint: AST::Types::t?, condition: bool) -> [Array[AST::Types::t], Array[TypeEnv]]
92
-
93
- def initialize: (Node, LogicTypeInterpreter) { (Node) -> Pair } -> void
94
-
95
- def when_clauses: () { (WhenPatterns, Array[Node], Node?, keyword_loc) -> when_result } -> void
96
-
97
- def else_clause: () { (Node, TypeConstruction) -> Pair } -> void
98
-
99
- def result: () -> [Array[AST::Types::t], Array[TypeEnv]]
100
-
101
- # Assign type of `value_node`
102
- def propagate_value_node_type: (TypeEnv) -> TypeEnv?
103
-
104
- # Returns `true` is `else` keyword is given
105
- #
106
- # `else_node` may be `nil` because body expression might be omitted.
107
- #
108
- # ```ruby
109
- # case x
110
- # when 1
111
- # else
112
- # # The body expression is omitted, but the branch is given.
113
- # end
114
- # ```
115
- #
116
- def has_else_clause?: () -> Parser::Source::Range?
117
-
118
- # def typing: () -> Typing
119
-
120
- # Extract assignments
121
- #
122
- # Returns a pair of the node that represents the value and assignment.
123
- #
124
- def rewrite_condition_node: (Symbol, Node) ->[Node?, Node]
125
-
126
- # TypeConstruction for incoming clause
127
- def latest_result: () -> [TypeConstruction, bool]
128
- end
129
- end
130
- end
@@ -1,29 +0,0 @@
1
- module Steep
2
- module TypeInference
3
- class ConstantEnv
4
- type constant_tuple = [untyped, RBS::TypeName, RBS::Constant::constant_entry]
5
-
6
- attr_reader context: RBS::Resolver::context
7
-
8
- attr_reader factory: AST::Types::Factory
9
-
10
- attr_reader resolver: RBS::Resolver::ConstantResolver
11
-
12
- def initialize: (factory: AST::Types::Factory, context: RBS::Resolver::context, resolver: RBS::Resolver::ConstantResolver) -> void
13
-
14
- def resolve: (Symbol name) -> constant_tuple?
15
-
16
- def toplevel: (Symbol name) -> constant_tuple?
17
-
18
- def constants: () -> Hash[Symbol, constant_tuple]
19
-
20
- def resolve_child: (RBS::TypeName module_name, Symbol constant_name) -> constant_tuple?
21
-
22
- def children: (RBS::TypeName module_name) -> Hash[Symbol, constant_tuple]
23
-
24
- def decompose_constant!: (RBS::Constant? constant) -> constant_tuple
25
-
26
- def decompose_constant: (RBS::Constant? constant) -> constant_tuple?
27
- end
28
- end
29
- end
@@ -1,216 +0,0 @@
1
- use Steep::Interface::Function::Params, Steep::Interface::Block
2
-
3
- module Steep
4
- module TypeInference
5
- # Type checking context
6
- class Context
7
- # Information about the method which the body is being type checked
8
- #
9
- class MethodContext
10
- # Name of the method
11
- attr_reader name: Symbol
12
-
13
- # `nil` when RBS doesn't have the corresponding method definition
14
- attr_reader method: RBS::Definition::Method?
15
-
16
- # `nil` when no method type is given
17
- attr_reader method_type: Interface::MethodType?
18
-
19
- # Falls back to `untyped`
20
- attr_reader return_type: AST::Types::t
21
-
22
- # The *super* method if identified
23
- attr_reader super_method: RBS::Definition::Method?
24
-
25
- # The type of forwarding params when `...` is given
26
- attr_reader forward_arg_type: [Params, Block?]?
27
-
28
- def initialize: (
29
- name: Symbol,
30
- method: RBS::Definition::Method?,
31
- method_type: Interface::MethodType?,
32
- return_type: AST::Types::t,
33
- super_method: RBS::Definition::Method?,
34
- forward_arg_type: [Params, Block?]?
35
- ) -> void
36
-
37
- # Type of the block of the current method type
38
- def block_type: () -> Interface::Block?
39
-
40
- # Returns `true` if the method is a setter -- ends with `=`
41
- #
42
- def attribute_setter?: () -> bool
43
- end
44
-
45
- # Information about the block which the body is being type checked
46
- #
47
- class BlockContext
48
- # The type of block itself
49
- #
50
- # Returns `nil` if no type is specified.
51
- #
52
- attr_reader body_type: AST::Types::t?
53
-
54
- def initialize: (body_type: AST::Types::t?) -> void
55
-
56
- def subst: (Interface::Substitution) -> BlockContext
57
- end
58
-
59
- # Context about the `break` syntax
60
- class BreakContext
61
- # Type of arguments to `break` statement
62
- #
63
- attr_reader break_type: AST::Types::t
64
-
65
- # Type of arguments to `next` statement
66
- #
67
- # `nil` means the passed value will be ignored.
68
- #
69
- attr_reader next_type: AST::Types::t?
70
-
71
- def initialize: (break_type: AST::Types::t, next_type: AST::Types::t?) -> void
72
-
73
- def subst: (Interface::Substitution) -> BreakContext
74
- end
75
-
76
- # Information about the module which the body is being type checked
77
- #
78
- class ModuleContext
79
- # The type of an instance of current module
80
- attr_reader instance_type: AST::Types::t
81
-
82
- # The type of singleton of current module
83
- attr_reader module_type: AST::Types::t
84
-
85
- # The set of name of instance methods that is defined in the `module`/`class` statement
86
- attr_reader defined_instance_methods: Set[Symbol]
87
-
88
- # The set of name of singleton methods that is defined in the `module`/`class` statement
89
- attr_reader defined_module_methods: Set[Symbol]
90
-
91
- # The nesting of current module
92
- #
93
- # Cannot be `nil`.
94
- #
95
- attr_reader nesting: RBS::Resolver::context
96
-
97
- # The name that is given to `@implements` annotation
98
- #
99
- # `nil` when no `@implements` annotation is given.
100
- #
101
- attr_reader implement_name: AST::Annotation::Implements::Module?
102
-
103
- # The name of the class/module.
104
- attr_reader class_name: RBS::TypeName
105
-
106
- # The definition of the instance of the module
107
- attr_reader instance_definition: RBS::Definition?
108
-
109
- # The definition of the singleton of the module
110
- attr_reader module_definition: RBS::Definition?
111
-
112
- @class_variables: Hash[Symbol, RBS::Types::t]?
113
-
114
- def initialize: (
115
- instance_type: AST::Types::t,
116
- module_type: AST::Types::t,
117
- implement_name: AST::Annotation::Implements::Module?,
118
- class_name: RBS::TypeName,
119
- nesting: RBS::Resolver::context,
120
- ?instance_definition: RBS::Definition?,
121
- ?module_definition: RBS::Definition?
122
- ) -> void
123
-
124
- # Returns a hash from the name of a class variable to its type
125
- %a{pure} def class_variables: () -> Hash[Symbol, RBS::Types::t]?
126
-
127
- def update: (
128
- ?instance_type: AST::Types::t,
129
- ?module_type: AST::Types::t,
130
- ?implement_name: AST::Annotation::Implements::Module?,
131
- ?class_name: RBS::TypeName,
132
- ?instance_definition: RBS::Definition?,
133
- ?module_definition: RBS::Definition?,
134
- ?nesting: RBS::Resolver::context
135
- ) -> ModuleContext
136
- end
137
-
138
- # Information about the free type variables
139
- #
140
- class TypeVariableContext
141
- attr_reader table: Hash[Symbol, Interface::TypeParam]
142
-
143
- attr_reader type_params: Array[Interface::TypeParam]
144
-
145
- def initialize: (Array[Interface::TypeParam] type_params, ?parent_context: TypeVariableContext?) -> void
146
-
147
- # Returns the upper bound of a type variable
148
- def []: (Symbol name) -> AST::Types::t?
149
-
150
- @upper_bounds: Hash[Symbol, AST::Types::t]?
151
-
152
- def upper_bounds: () -> Hash[Symbol, AST::Types::t]
153
-
154
- def self.empty: () -> TypeVariableContext
155
- end
156
-
157
- # The caller where a method is called from
158
- attr_reader call_context: MethodCall::context
159
-
160
- # MethodContext for current execution point
161
- #
162
- # `nil` when not in any method definition.
163
- #
164
- attr_reader method_context: MethodContext?
165
-
166
- # BlockContext for current execution point
167
- #
168
- # `nil` when not in iterator block.
169
- #
170
- attr_reader block_context: BlockContext?
171
-
172
- # BreakContext for current execution point
173
- #
174
- # `nil` if `break` is not allowed.
175
- #
176
- attr_reader break_context: BreakContext?
177
-
178
- # ModuleContext for current execution point
179
- attr_reader module_context: ModuleContext
180
-
181
- # The type of `self`
182
- #
183
- attr_reader self_type: AST::Types::t
184
-
185
- attr_reader type_env: TypeEnv
186
-
187
- attr_reader variable_context: TypeVariableContext
188
-
189
- def initialize: (
190
- method_context: MethodContext?,
191
- block_context: BlockContext?,
192
- break_context: BreakContext?,
193
- module_context: ModuleContext,
194
- self_type: AST::Types::t,
195
- type_env: TypeEnv,
196
- call_context: MethodCall::context,
197
- variable_context: TypeVariableContext
198
- ) -> void
199
-
200
- def with: (
201
- ?method_context: MethodContext?,
202
- ?block_context: BlockContext?,
203
- ?break_context: BreakContext?,
204
- ?module_context: ModuleContext,
205
- ?self_type: AST::Types::t,
206
- ?type_env: TypeEnv,
207
- ?call_context: MethodCall::context,
208
- ?variable_context: TypeVariableContext
209
- ) -> Context
210
-
211
- def factory: () -> AST::Types::Factory
212
-
213
- def env: () -> RBS::Environment
214
- end
215
- end
216
- end
@@ -1,38 +0,0 @@
1
- module Steep
2
- module TypeInference
3
- class ContextArray
4
- class Entry
5
- attr_reader range: Range[Integer]
6
-
7
- attr_reader context: Context
8
-
9
- attr_reader sub_entries: Set[Entry]
10
-
11
- def initialize: (range: Range[Integer], context: Context) -> void
12
- end
13
-
14
- attr_reader buffer: RBS::Buffer
15
-
16
- attr_reader root: Entry
17
-
18
- def initialize: (buffer: RBS::Buffer, context: Context, ?range: Range[Integer]) -> void
19
-
20
- def range: () -> Range[Integer]
21
-
22
- def self.from_source: (source: Source, ?range: Range[Integer]?, context: Context) -> ContextArray
23
-
24
- def insert_context: (Range[Integer] range, context: Context, ?entry: Entry) -> void
25
-
26
- def each_entry: () { (Entry) -> void } -> void
27
- | () -> Enumerator[Entry, void]
28
-
29
- def context_at: (Integer index, ?entry: Entry) -> Context?
30
-
31
- def []: (Integer index) -> Context?
32
-
33
- def at: (line: Integer, column: Integer) -> Context?
34
-
35
- def merge: (ContextArray subtree) -> void
36
- end
37
- end
38
- end
@@ -1,108 +0,0 @@
1
- module Steep
2
- module TypeInference
3
- class LogicTypeInterpreter
4
- class Result
5
- attr_reader env: TypeEnv
6
-
7
- attr_reader type: AST::Types::t
8
-
9
- attr_accessor unreachable: bool
10
-
11
- def initialize: (env: TypeEnv, type: AST::Types::t, unreachable: bool) -> void
12
-
13
- def update_env: () { () -> TypeEnv } -> Result
14
-
15
- def update_type: { () -> AST::Types::t } -> Result
16
-
17
- # Make the instance unreachable, and returns self
18
- #
19
- def unreachable!: () -> self
20
- end
21
-
22
- TRUE: AST::Types::Literal
23
-
24
- FALSE: AST::Types::Literal
25
-
26
- BOOL: AST::Types::Boolean
27
-
28
- BOT: AST::Types::Bot
29
-
30
- UNTYPED: AST::Types::Any
31
-
32
- attr_reader subtyping: Subtyping::Check
33
-
34
- attr_reader typing: Typing
35
-
36
- attr_reader factory (): AST::Types::Factory
37
-
38
- attr_reader config: Interface::Builder::Config
39
-
40
- def initialize: (subtyping: Subtyping::Check, typing: Typing, config: Interface::Builder::Config) -> void
41
-
42
- def eval: (env: TypeEnv, node: Parser::AST::Node) -> [Result, Result]
43
-
44
- def evaluate_node: (env: TypeEnv, node: Parser::AST::Node, ?type: AST::Types::t) -> [Result, Result]
45
-
46
- def evaluate_method_call: (env: TypeEnv, type: AST::Types::Logic::Base, receiver: Parser::AST::Node?, arguments: Array[Parser::AST::Node]) -> [Result, Result]?
47
-
48
- # Apply type refinement to `node` as `truthy_type` and `falsy_type`.
49
- #
50
- # This is done by top-down manner.
51
- #
52
- # Assignes given two types to the node when:
53
- #
54
- # * `node` is a `lvar`
55
- # * `node` is a `lvasgn`
56
- # * `node` is a _pure_ method call
57
- #
58
- def refine_node_type: (env: TypeEnv, node: Parser::AST::Node, truthy_type: AST::Types::t, falsy_type: AST::Types::t) -> [TypeEnv, TypeEnv]
59
-
60
- # Returns a pair of a node and set of local variable names.
61
- #
62
- # * The returned node is called _value node_ that is a node the value of given `node` can be taken from
63
- # * The local variable names are local variables that have the same value of the _value node_.
64
- #
65
- # ```ruby
66
- # a = 123 # `123` is the _value node_
67
- # # :a is included in the set because `a` has the same value of _value node_
68
- #
69
- # c = b = a # `a` is the _value node_, a set of { :b, :c } will be returned
70
- # ```
71
- #
72
- def decompose_value: (Parser::AST::Node node) -> [Parser::AST::Node, Set[Symbol]]
73
-
74
- private
75
-
76
- # Assign local variables included in the assignment node and masgn node
77
- #
78
- def evaluate_assignment: (Parser::AST::Node node, TypeEnv env, AST::Types::t rhs_type) -> TypeEnv
79
-
80
- def guess_type_from_method: (Parser::AST::Node node) -> (AST::Types::Logic::ReceiverIsArg | AST::Types::Logic::ReceiverIsNil | AST::Types::Logic::Not | AST::Types::Logic::ArgIsReceiver | nil)
81
-
82
- # Decompose to given type to truthy and falsy types.
83
- #
84
- # This directly corresponds to case-when syntax with literals:
85
- #
86
- # ```ruby
87
- # case x
88
- # when nil # value_node == {nil}, arg_type = type_of({x})
89
- # ...
90
- # when 123 # value_node == {nil}, arg_type = type_of({x})
91
- # ...
92
- # end
93
- # ```
94
- #
95
- def literal_var_type_case_select: (Parser::AST::Node value_node, AST::Types::t arg_type) -> [Array[AST::Types::t], Array[AST::Types::t]]?
96
-
97
- def type_case_select: (AST::Types::t `type`, RBS::TypeName klass) -> [AST::Types::t?, AST::Types::t?]
98
-
99
- def type_case_select0: (AST::Types::t `type`, RBS::TypeName klass) -> [Array[AST::Types::t], Array[AST::Types::t]]
100
-
101
- def try_convert: (AST::Types::t, Symbol) -> AST::Types::t?
102
-
103
- def no_subtyping?: (sub_type: AST::Types::t, super_type: AST::Types::t) -> Subtyping::Result::t?
104
-
105
- def subtyping?: (sub_type: AST::Types::t, super_type: AST::Types::t) -> bool
106
- end
107
- end
108
- end