steep 1.7.0.dev.1 → 1.7.0.dev.3

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +13 -15
  3. data/Rakefile +5 -0
  4. data/gemfile_steep/Gemfile +1 -1
  5. data/gemfile_steep/Gemfile.lock +11 -13
  6. data/lib/steep/ast/types/helper.rb +4 -0
  7. data/lib/steep/ast/types/intersection.rb +7 -0
  8. data/lib/steep/ast/types/record.rb +7 -0
  9. data/lib/steep/ast/types/tuple.rb +7 -0
  10. data/lib/steep/ast/types/union.rb +7 -0
  11. data/lib/steep/drivers/stats.rb +2 -2
  12. data/lib/steep/drivers/validate.rb +4 -2
  13. data/lib/steep/expectations.rb +2 -2
  14. data/lib/steep/interface/builder.rb +336 -360
  15. data/lib/steep/interface/function.rb +69 -6
  16. data/lib/steep/interface/method_type.rb +3 -3
  17. data/lib/steep/interface/shape.rb +69 -18
  18. data/lib/steep/interface/substitution.rb +4 -0
  19. data/lib/steep/node_helper.rb +18 -1
  20. data/lib/steep/services/completion_provider.rb +19 -17
  21. data/lib/steep/services/signature_help_provider.rb +19 -20
  22. data/lib/steep/subtyping/check.rb +10 -16
  23. data/lib/steep/subtyping/result.rb +6 -0
  24. data/lib/steep/test.rb +9 -0
  25. data/lib/steep/type_construction.rb +13 -13
  26. data/lib/steep/type_inference/block_params.rb +11 -3
  27. data/lib/steep/type_inference/context.rb +1 -1
  28. data/lib/steep/type_inference/logic_type_interpreter.rb +1 -1
  29. data/lib/steep/version.rb +1 -1
  30. data/lib/steep.rb +11 -7
  31. data/sig/steep/ast/types/helper.rbs +2 -0
  32. data/sig/steep/ast/types/intersection.rbs +2 -0
  33. data/sig/steep/ast/types/name.rbs +4 -0
  34. data/sig/steep/ast/types/record.rbs +2 -0
  35. data/sig/steep/ast/types/tuple.rbs +2 -0
  36. data/sig/steep/ast/types/union.rbs +2 -0
  37. data/sig/steep/expectations.rbs +1 -1
  38. data/sig/steep/interface/block.rbs +2 -2
  39. data/sig/steep/interface/builder.rbs +94 -108
  40. data/sig/steep/interface/function.rbs +34 -29
  41. data/sig/steep/interface/shape.rbs +23 -4
  42. data/sig/steep/interface/substitution.rbs +2 -0
  43. data/sig/steep/node_helper.rbs +11 -0
  44. data/sig/steep/services/signature_help_provider.rbs +2 -0
  45. data/sig/steep/subtyping/check.rbs +2 -0
  46. data/sig/steep/subtyping/constraints.rbs +2 -2
  47. data/sig/steep/subtyping/result.rbs +5 -1
  48. data/sig/steep/type_construction.rbs +1 -1
  49. data/sig/steep/type_inference/block_params.rbs +2 -2
  50. data/sig/steep/type_inference/context.rbs +2 -0
  51. data/sig/steep.rbs +1 -1
  52. metadata +3 -3
  53. data/sig/steep/type_inference/branch.rbs +0 -15
@@ -27,6 +27,7 @@ module Steep
27
27
  def var_type: () -> AST::Types::t
28
28
 
29
29
  def map_type: () { (AST::Types::t) -> AST::Types::t } -> self
30
+ | () -> Enumerator[AST::Types::t, void]
30
31
  end
31
32
 
32
33
  class Required < Base
@@ -57,6 +58,7 @@ module Steep
57
58
  def map: () { (param) -> param } -> PositionalParams
58
59
 
59
60
  def map_type: () { (AST::Types::t) -> AST::Types::t } -> PositionalParams
61
+ | () -> Enumerator[AST::Types::t, void]
60
62
 
61
63
  def subst: (Substitution s) -> PositionalParams
62
64
 
@@ -74,13 +76,13 @@ module Steep
74
76
 
75
77
  def size: () -> Integer
76
78
 
77
- def self.build: (required: Array[AST::Types::t], optional: Array[AST::Types::t], rest: AST::Types::t?) -> PositionalParams
79
+ def self.build: (required: Array[AST::Types::t], optional: Array[AST::Types::t], rest: AST::Types::t?) -> PositionalParams?
78
80
 
79
81
  extend Utils
80
82
 
81
83
  # Calculates xs + ys.
82
84
  # Never fails.
83
- def self.merge_for_overload: (PositionalParams? xs, PositionalParams? ys) -> PositionalParams
85
+ def self.merge_for_overload: (PositionalParams? xs, PositionalParams? ys) -> PositionalParams?
84
86
 
85
87
  # xs | ys
86
88
  def self.merge_for_union: (PositionalParams? xs, PositionalParams? ys) -> PositionalParams?
@@ -98,15 +100,15 @@ module Steep
98
100
 
99
101
  attr_reader rest: AST::Types::t?
100
102
 
101
- def initialize: (?requireds: ::Hash[untyped, untyped], ?optionals: ::Hash[untyped, untyped], ?rest: untyped?) -> void
103
+ def initialize: (?requireds: ::Hash[Symbol, AST::Types::t], ?optionals: ::Hash[Symbol, AST::Types::t], ?rest: AST::Types::t?) -> void
102
104
 
103
- def ==: (untyped other) -> untyped
105
+ def ==: (untyped other) -> bool
104
106
 
105
107
  alias eql? ==
106
108
 
107
- def hash: () -> untyped
109
+ def hash: () -> Integer
108
110
 
109
- def update: (?requireds: untyped, ?optionals: untyped, ?rest: untyped) -> untyped
111
+ def update: (?requireds: Hash[Symbol, AST::Types::t], ?optionals: Hash[Symbol, AST::Types::t], ?rest: AST::Types::t?) -> KeywordParams
110
112
 
111
113
  def empty?: () -> bool
112
114
 
@@ -117,6 +119,7 @@ module Steep
117
119
  | () -> Enumerator[AST::Types::t, void]
118
120
 
119
121
  def map_type: () { (AST::Types::t) -> AST::Types::t } -> KeywordParams
122
+ | () -> Enumerator[AST::Types::t, KeywordParams]
120
123
 
121
124
  def subst: (Substitution s) -> KeywordParams
122
125
 
@@ -127,13 +130,13 @@ module Steep
127
130
  include Utils
128
131
 
129
132
  # For overloading
130
- def +: (untyped other) -> untyped
133
+ def +: (KeywordParams other) -> KeywordParams
131
134
 
132
135
  # For union
133
- def |: (untyped other) -> untyped
136
+ def |: (KeywordParams other) -> KeywordParams
134
137
 
135
138
  # For intersection
136
- def &: (untyped other) -> (nil | untyped)
139
+ def &: (KeywordParams other) -> KeywordParams?
137
140
  end
138
141
 
139
142
  def required: () -> Array[AST::Types::t]
@@ -146,54 +149,55 @@ module Steep
146
149
 
147
150
  attr_reader keyword_params: KeywordParams
148
151
 
149
- def self.build: (?required: untyped, ?optional: untyped, ?rest: untyped?, ?required_keywords: ::Hash[untyped, untyped], ?optional_keywords: ::Hash[untyped, untyped], ?rest_keywords: untyped?) -> untyped
152
+ def self.build: (?required: Array[AST::Types::t], ?optional: Array[AST::Types::t], ?rest: AST::Types::t?, ?required_keywords: ::Hash[Symbol, AST::Types::t], ?optional_keywords: ::Hash[Symbol, AST::Types::t], ?rest_keywords: AST::Types::t?) -> Params
150
153
 
151
- def initialize: (positional_params: untyped, keyword_params: untyped) -> void
154
+ def initialize: (positional_params: PositionalParams?, keyword_params: KeywordParams) -> void
152
155
 
153
- def update: (?positional_params: untyped, ?keyword_params: untyped) -> untyped
156
+ def update: (?positional_params: PositionalParams?, ?keyword_params: KeywordParams) -> Params
154
157
 
155
- def first_param: () -> untyped
158
+ def first_param: () -> PositionalParams::param?
156
159
 
157
- def with_first_param: (untyped param) -> untyped
160
+ def with_first_param: (PositionalParams::param) -> Params
158
161
 
159
- def has_positional?: () -> (true | false)
162
+ def has_positional?: () -> bool
160
163
 
161
- def self.empty: () -> untyped
164
+ def self.empty: () -> Params
162
165
 
163
- def ==: (untyped other) -> untyped
166
+ def ==: (untyped other) -> bool
164
167
 
165
168
  alias eql? ==
166
169
 
167
- def hash: () -> untyped
170
+ def hash: () -> Integer
168
171
 
169
172
  def flat_unnamed_params: () -> Array[[:required | :optional, AST::Types::t]]
170
173
 
171
- def flat_keywords: () -> untyped
174
+ def flat_keywords: () -> Hash[Symbol, AST::Types::t]
172
175
 
173
- def required_keywords: () -> untyped
176
+ def required_keywords: () -> Hash[Symbol, AST::Types::t]
174
177
 
175
- def optional_keywords: () -> untyped
178
+ def optional_keywords: () -> Hash[Symbol, AST::Types::t]
176
179
 
177
- def rest_keywords: () -> untyped
180
+ def rest_keywords: () -> AST::Types::t?
178
181
 
179
- def has_keywords?: () -> untyped
182
+ def has_keywords?: () -> bool
180
183
 
181
184
  def each_positional_param: () { (PositionalParams::Base) -> void } -> void
182
185
 
183
- def without_keywords: () -> untyped
186
+ def without_keywords: () -> Params
184
187
 
185
- def drop_first: () -> untyped
188
+ def drop_first: () -> Params
186
189
 
187
190
  def each_type: () { (AST::Types::t) -> void } -> void
188
191
  | () -> Enumerator[AST::Types::t, void]
189
192
 
190
- def free_variables: () -> untyped
193
+ @fvs: Set[AST::Types::variable]?
194
+ def free_variables: () -> Set[AST::Types::variable]
191
195
 
192
- def closed?: () -> untyped
196
+ def closed?: () -> bool
193
197
 
194
198
  def subst: (Substitution s) -> Params
195
199
 
196
- def size: () -> untyped
200
+ def size: () -> Integer
197
201
 
198
202
  def to_s: () -> ::String
199
203
 
@@ -244,7 +248,8 @@ module Steep
244
248
 
245
249
  def hash: () -> Integer
246
250
 
247
- def free_variables: () -> Set[Symbol]
251
+ @fvs: Set[AST::Types::variable]?
252
+ def free_variables: () -> Set[AST::Types::variable]
248
253
 
249
254
  def subst: (Substitution s) -> Function
250
255
 
@@ -2,11 +2,26 @@ module Steep
2
2
  module Interface
3
3
  class Shape
4
4
  class Entry
5
- attr_reader method_types: Array[MethodType]
5
+ @private_method: bool
6
6
 
7
- def initialize: (method_types: Array[MethodType]) -> void
7
+ @method_types: Array[MethodType]?
8
+
9
+ @generator: (^() -> Array[MethodType]?)?
10
+
11
+ def initialize: (method_types: Array[MethodType], private_method: bool) -> void
12
+ | (private_method: bool) { () -> Array[MethodType]? } -> void
13
+
14
+ def has_method_type?: () -> bool
8
15
 
9
16
  def to_s: () -> String
17
+
18
+ def private_method?: () -> bool
19
+
20
+ def public_method?: () -> bool
21
+
22
+ def method_types: () -> Array[MethodType]
23
+
24
+ def force: () -> void
10
25
  end
11
26
 
12
27
  class Methods
@@ -36,9 +51,9 @@ module Steep
36
51
 
37
52
  def push_substitution: (Substitution) -> Methods
38
53
 
39
- def merge!: (Methods other) -> void
54
+ def merge!: (Methods other) ?{ (Symbol name, Entry old_entry, Entry new_entry) -> Entry } -> void
40
55
 
41
- # def +: (Methods other) -> Methods
56
+ def public_methods: () -> Methods
42
57
  end
43
58
 
44
59
  attr_reader type: AST::Types::t
@@ -56,6 +71,10 @@ module Steep
56
71
  def public?: () -> bool
57
72
 
58
73
  def subst: (Substitution, ?type: AST::Types::t?) -> Shape
74
+
75
+ def public_shape: () -> Shape
76
+
77
+ @public_shape: Shape?
59
78
  end
60
79
  end
61
80
  end
@@ -41,6 +41,8 @@ module Steep
41
41
 
42
42
  def merge: (Substitution s) -> Substitution
43
43
 
44
+ def update: (?self_type: AST::Types::t?, ?instance_type: AST::Types::t?, ?module_type: AST::Types::t?) -> Substitution
45
+
44
46
  def apply?: (AST::Types::t) -> bool
45
47
 
46
48
  def add!: (Symbol v, AST::Types::t ty) -> self
@@ -66,6 +66,17 @@ module Steep
66
66
 
67
67
  def test_send_node: (Node) { (Node?, Symbol, Array[Node], send_loc) -> bool } -> bool
68
68
 
69
+ # Returns if given node allows calling private method
70
+ #
71
+ # The node must be:
72
+ #
73
+ # * A `send` node,
74
+ # * A `csend` node,
75
+ # * A `block` node, or
76
+ # * A `nblock` node
77
+ #
78
+ def private_send?: (Node) -> bool
79
+
69
80
  # Deconstruct sendish node and it's associated block node
70
81
  #
71
82
  # Receives a sequence of node tree where the leaf node comes first.
@@ -17,6 +17,8 @@ module Steep
17
17
  def parameters: () -> Array[String]
18
18
  end
19
19
 
20
+ include Steep::NodeHelper
21
+
20
22
  attr_reader source: Source
21
23
 
22
24
  attr_reader path: Pathname
@@ -1,6 +1,8 @@
1
1
  module Steep
2
2
  module Subtyping
3
3
  class Check
4
+ ABORT_LIMIT: Integer
5
+
4
6
  attr_reader builder: Interface::Builder
5
7
 
6
8
  attr_reader cache: Cache
@@ -91,8 +91,8 @@ module Steep
91
91
 
92
92
  def lower_bound: (Symbol var, ?skip: bool) -> AST::Types::t
93
93
 
94
- def solution: (Check checker, variables: Enumerable[Symbol], variance: VariableVariance, self_type: AST::Types::t, instance_type: AST::Types::t, class_type: AST::Types::t) -> Interface::Substitution
95
- | (Check checker, variables: Enumerable[Symbol], context: Context) -> Interface::Substitution
94
+ def solution: (Check checker, variables: Enumerable[AST::Types::variable], variance: VariableVariance, self_type: AST::Types::t, instance_type: AST::Types::t, class_type: AST::Types::t) -> Interface::Substitution
95
+ | (Check checker, variables: Enumerable[AST::Types::variable], context: Context) -> Interface::Substitution
96
96
 
97
97
  def has_constraint?: (Symbol var) -> bool
98
98
 
@@ -81,7 +81,7 @@ module Steep
81
81
  class Failure < Base
82
82
  type error = MethodMissingError | BlockMismatchError | ParameterMismatchError
83
83
  | UnknownPairError | PolyMethodSubtyping | UnsatisfiedConstraints
84
- | SelfBindingMismatch
84
+ | SelfBindingMismatch | LoopAbort
85
85
 
86
86
  class MethodMissingError
87
87
  attr_reader name: untyped
@@ -145,6 +145,10 @@ module Steep
145
145
  def message: () -> String
146
146
  end
147
147
 
148
+ class LoopAbort
149
+ def message: () -> String
150
+ end
151
+
148
152
  attr_reader error: error
149
153
 
150
154
  def initialize: (Relation[untyped] relation, error error) -> void
@@ -325,7 +325,7 @@ module Steep
325
325
  def set_up_block_mlhs_params_env: (
326
326
  Parser::AST::Node mlhs_node,
327
327
  AST::Types::t type,
328
- Hash[Symbol, AST::Types::t]
328
+ Hash[Symbol?, AST::Types::t]
329
329
  ) { (Parser::AST::Node error_mlhs_node, AST::Types::t type) -> void } -> void
330
330
 
331
331
  # Returns a Pair of
@@ -37,7 +37,7 @@ module Steep
37
37
  # * `node` is the node of the parameter
38
38
  #
39
39
  class Param
40
- attr_reader var: Symbol
40
+ attr_reader var: Symbol?
41
41
 
42
42
  attr_reader type: AST::Types::t?
43
43
 
@@ -45,7 +45,7 @@ module Steep
45
45
 
46
46
  attr_reader node: Parser::AST::Node
47
47
 
48
- def initialize: (var: Symbol, type: AST::Types::t?, value: Parser::AST::Node?, node: Parser::AST::Node) -> void
48
+ def initialize: (var: Symbol?, type: AST::Types::t?, value: Parser::AST::Node?, node: Parser::AST::Node) -> void
49
49
 
50
50
  def ==: (untyped other) -> bool
51
51
 
@@ -147,6 +147,8 @@ module Steep
147
147
  # Returns the upper bound of a type variable
148
148
  def []: (Symbol name) -> AST::Types::t?
149
149
 
150
+ @upper_bounds: Hash[Symbol, AST::Types::t]?
151
+
150
152
  def upper_bounds: () -> Hash[Symbol, AST::Types::t]
151
153
 
152
154
  def self.empty: () -> TypeVariableContext
data/sig/steep.rbs CHANGED
@@ -14,7 +14,7 @@ module Steep
14
14
 
15
15
  attr_accessor self.log_output: IO
16
16
 
17
- def self.measure: [A] (String message, ?level: ::Symbol) { () -> A } -> A
17
+ def self.measure: [A] (String message, ?level: ::Symbol, ?threshold: Float) { () -> A } -> A
18
18
 
19
19
  def self.log_error: (Exception exn, ?message: ::String) -> void
20
20
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: steep
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0.dev.1
4
+ version: 1.7.0.dev.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-30 00:00:00.000000000 Z
11
+ date: 2024-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -362,6 +362,7 @@ files:
362
362
  - lib/steep/subtyping/relation.rb
363
363
  - lib/steep/subtyping/result.rb
364
364
  - lib/steep/subtyping/variable_variance.rb
365
+ - lib/steep/test.rb
365
366
  - lib/steep/thread_waiter.rb
366
367
  - lib/steep/type_construction.rb
367
368
  - lib/steep/type_inference/block_params.rb
@@ -503,7 +504,6 @@ files:
503
504
  - sig/steep/thread_waiter.rbs
504
505
  - sig/steep/type_construction.rbs
505
506
  - sig/steep/type_inference/block_params.rbs
506
- - sig/steep/type_inference/branch.rbs
507
507
  - sig/steep/type_inference/case_when.rbs
508
508
  - sig/steep/type_inference/constant_env.rbs
509
509
  - sig/steep/type_inference/context.rbs
@@ -1,15 +0,0 @@
1
- use Steep::TypeConstruction::Pair, Steep::TypeInference::LogicTypeInterpreter::Result
2
-
3
- module Steep
4
- module TypeInference
5
- class Branch
6
- attr_reader start_env: TypeEnv
7
-
8
- def initialize: (TypeEnv start_env) -> void
9
-
10
- def add_branch: () { (TypeEnv) -> [Result, Pair] } -> void
11
-
12
-
13
- end
14
- end
15
- end