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

Sign up to get free protection for your applications and to get access to all the features.
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