steep 1.7.0.dev.2 → 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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +10 -12
  3. data/gemfile_steep/Gemfile.lock +8 -10
  4. data/lib/steep/ast/types/helper.rb +4 -0
  5. data/lib/steep/ast/types/intersection.rb +7 -0
  6. data/lib/steep/ast/types/record.rb +7 -0
  7. data/lib/steep/ast/types/tuple.rb +7 -0
  8. data/lib/steep/ast/types/union.rb +7 -0
  9. data/lib/steep/drivers/stats.rb +2 -2
  10. data/lib/steep/drivers/validate.rb +4 -2
  11. data/lib/steep/expectations.rb +2 -2
  12. data/lib/steep/interface/builder.rb +336 -360
  13. data/lib/steep/interface/function.rb +69 -6
  14. data/lib/steep/interface/method_type.rb +3 -3
  15. data/lib/steep/interface/shape.rb +69 -18
  16. data/lib/steep/interface/substitution.rb +4 -0
  17. data/lib/steep/node_helper.rb +18 -1
  18. data/lib/steep/services/completion_provider.rb +19 -17
  19. data/lib/steep/services/signature_help_provider.rb +6 -9
  20. data/lib/steep/subtyping/check.rb +4 -16
  21. data/lib/steep/test.rb +9 -0
  22. data/lib/steep/type_construction.rb +13 -9
  23. data/lib/steep/type_inference/block_params.rb +11 -3
  24. data/lib/steep/type_inference/context.rb +1 -1
  25. data/lib/steep/type_inference/logic_type_interpreter.rb +1 -1
  26. data/lib/steep/version.rb +1 -1
  27. data/lib/steep.rb +11 -7
  28. data/sig/steep/ast/types/helper.rbs +2 -0
  29. data/sig/steep/ast/types/intersection.rbs +2 -0
  30. data/sig/steep/ast/types/name.rbs +4 -0
  31. data/sig/steep/ast/types/record.rbs +2 -0
  32. data/sig/steep/ast/types/tuple.rbs +2 -0
  33. data/sig/steep/ast/types/union.rbs +2 -0
  34. data/sig/steep/expectations.rbs +1 -1
  35. data/sig/steep/interface/block.rbs +2 -2
  36. data/sig/steep/interface/builder.rbs +94 -108
  37. data/sig/steep/interface/function.rbs +34 -29
  38. data/sig/steep/interface/shape.rbs +23 -4
  39. data/sig/steep/interface/substitution.rbs +2 -0
  40. data/sig/steep/node_helper.rbs +11 -0
  41. data/sig/steep/services/signature_help_provider.rbs +2 -0
  42. data/sig/steep/subtyping/constraints.rbs +2 -2
  43. data/sig/steep/type_construction.rbs +1 -1
  44. data/sig/steep/type_inference/block_params.rbs +2 -2
  45. data/sig/steep/type_inference/context.rbs +2 -0
  46. data/sig/steep.rbs +1 -1
  47. metadata +3 -2
@@ -57,8 +57,9 @@ module Steep
57
57
 
58
58
  def variable_types
59
59
  each_param.with_object({}) do |param, hash|
60
+ var_name = param.var || next
60
61
  # @type var hash: Hash[Symbol, AST::Types::t?]
61
- hash[param.var] = param.type
62
+ hash[var_name] = param.type
62
63
  end
63
64
  end
64
65
 
@@ -133,10 +134,17 @@ module Steep
133
134
  else
134
135
  var = arg.children[0]
135
136
  type = annotations.var_type(lvar: var)
136
-
137
137
  case arg.type
138
- when :arg, :procarg0
138
+ when :arg
139
139
  default_params << Param.new(var: var, type: type, value: nil, node: arg)
140
+ when :procarg0
141
+ var = arg.children[0]
142
+ if var.is_a?(Symbol)
143
+ default_params << Param.new(var: var, type: type, value: nil, node: arg)
144
+ else
145
+ var = var.children[0]
146
+ default_params << Param.new(var: var, type: type, value: nil, node: arg)
147
+ end
140
148
  when :optarg
141
149
  default_params = trailing_params
142
150
  optional_params << Param.new(var: var, type: type, value: arg.children.last, node: arg)
@@ -125,7 +125,7 @@ module Steep
125
125
  end
126
126
 
127
127
  def upper_bounds
128
- table.each_value.with_object({}) do |type_param, bounds|
128
+ @upper_bounds ||= table.each_value.with_object({}) do |type_param, bounds|
129
129
  if type_param.upper_bound
130
130
  bounds[type_param.name] = type_param.upper_bound
131
131
  end
@@ -593,7 +593,7 @@ module Steep
593
593
  end
594
594
 
595
595
  def try_convert(type, method)
596
- if shape = subtyping.builder.shape(type, public_only: true, config: config)
596
+ if shape = subtyping.builder.shape(type, config)
597
597
  if entry = shape.methods[method]
598
598
  method_type = entry.method_types.find do |method_type|
599
599
  method_type.type.params.optional?
data/lib/steep/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Steep
2
- VERSION = "1.7.0.dev.2"
2
+ VERSION = "1.7.0.dev.3"
3
3
  end
data/lib/steep.rb CHANGED
@@ -186,15 +186,19 @@ module Steep
186
186
  @ui_logger = nil
187
187
  self.log_output = STDERR
188
188
 
189
- def self.measure(message, level: :warn)
189
+ def self.measure(message, level: :warn, threshold: 0.0)
190
190
  start = Time.now
191
- yield
192
- ensure
193
- time = Time.now - start
194
- if level.is_a?(Symbol)
195
- level = Logger.const_get(level.to_s.upcase)
191
+ begin
192
+ yield
193
+ ensure
194
+ time = Time.now - start
195
+ if level.is_a?(Symbol)
196
+ level = Logger.const_get(level.to_s.upcase)
197
+ end
198
+ if time > threshold
199
+ self.logger.log(level) { "#{message} took #{time} seconds" }
200
+ end
196
201
  end
197
- self.logger.log(level) { "#{message} took #{time} seconds" }
198
202
  end
199
203
 
200
204
  def self.log_error(exn, message: "Unexpected error: #{exn.inspect}")
@@ -15,6 +15,8 @@ module Steep
15
15
  module NoChild
16
16
  def each_child: () { (t) -> void } -> void
17
17
  | () -> Enumerator[t, void]
18
+
19
+ def map_type: () { (t) -> t } -> self
18
20
  end
19
21
  end
20
22
  end
@@ -29,6 +29,8 @@ module Steep
29
29
  def each_child: () { (t) -> void } -> void
30
30
  | () -> Enumerator[t, void]
31
31
 
32
+ def map_type: () { (t) -> t } -> t
33
+
32
34
  def level: () -> Array[Integer]
33
35
 
34
36
  def with_location: (untyped new_location) -> Intersection
@@ -51,6 +51,7 @@ module Steep
51
51
  def map_type: () { (t) -> t } -> self
52
52
  end
53
53
 
54
+ # Singleton of a class/module
54
55
  class Singleton < Base
55
56
  def ==: (untyped other) -> bool
56
57
 
@@ -65,13 +66,16 @@ module Steep
65
66
  include Helper::NoChild
66
67
  end
67
68
 
69
+ # An instance of a class/module
68
70
  class Instance < Applying
69
71
  def to_module: () -> Singleton
70
72
  end
71
73
 
74
+ # An interface type
72
75
  class Interface < Applying
73
76
  end
74
77
 
78
+ # Type alias
75
79
  class Alias < Applying
76
80
  end
77
81
  end
@@ -28,6 +28,8 @@ module Steep
28
28
  def each_child: () { (t) -> void } -> void
29
29
  | () -> Enumerator[t, void]
30
30
 
31
+ def map_type: () { (t) -> t } -> Record
32
+
31
33
  def level: () -> Array[Integer]
32
34
 
33
35
  def with_location: (untyped new_location) -> Record
@@ -26,6 +26,8 @@ module Steep
26
26
  def each_child: () { (t) -> void } -> void
27
27
  | () -> Enumerator[t, void]
28
28
 
29
+ def map_type: () { (t) -> t } -> Tuple
30
+
29
31
  def level: () -> Array[Integer]
30
32
 
31
33
  def with_location: (untyped new_location) -> Tuple
@@ -27,6 +27,8 @@ module Steep
27
27
  def each_child: () { (t) -> void } -> void
28
28
  | () -> Enumerator[t, void]
29
29
 
30
+ def map_type: () { (t) -> t } -> t
31
+
30
32
  include Helper::ChildrenLevel
31
33
 
32
34
  def level: () -> Array[Integer]
@@ -19,7 +19,7 @@ module Steep
19
19
 
20
20
  def initialize: (start_position: position, end_position: position, severity: Steep::Diagnostic::LSPFormatter::severity, message: String, code: String) -> void
21
21
 
22
- def self.from_hash: (untyped) -> instance
22
+ def self.from_hash: (untyped) -> Diagnostic
23
23
 
24
24
  def self.from_lsp: (untyped) -> Diagnostic
25
25
 
@@ -25,9 +25,9 @@ module Steep
25
25
 
26
26
  def subst: (Substitution s) -> Block
27
27
 
28
- @fvs: Set[Symbol]
28
+ @fvs: Set[AST::Types::variable]
29
29
 
30
- def free_variables: () -> Set[Symbol]
30
+ def free_variables: () -> Set[AST::Types::variable]
31
31
 
32
32
  def to_s: () -> ::String
33
33
 
@@ -6,161 +6,147 @@ module Steep
6
6
  class Config
7
7
  # Type of `self` type included immediately in the type expression
8
8
  #
9
- attr_reader self_type: AST::Types::t
9
+ attr_reader self_type: AST::Types::t?
10
10
 
11
11
  # Type of `class` type included immediately in the type expression
12
12
  #
13
- attr_reader class_type: AST::Types::t | nil
13
+ attr_reader class_type: AST::Types::t?
14
14
 
15
15
  # Type of `instance` type included immediately in the type expression
16
16
  #
17
- attr_reader instance_type: AST::Types::t | nil
17
+ attr_reader instance_type: AST::Types::t?
18
18
 
19
- # Resolves `self` types included in shape members
20
- #
21
- # * `false` only when the type expression is `self`
22
- #
23
- attr_reader resolve_self: bool
19
+ # Upper bounds of type variables
20
+ attr_reader variable_bounds: Hash[Symbol, AST::Types::t?]
24
21
 
25
- # Resolves `class` types included in shape members
26
- #
27
- # * `false` only when the type expression is `class`
28
- #
29
- attr_reader resolve_class: bool
22
+ def initialize: (self_type: AST::Types::t?, variable_bounds: Hash[Symbol, AST::Types::t?]) -> void
23
+ | (self_type: AST::Types::t?, class_type: AST::Types::t, instance_type: AST::Types::t, variable_bounds: Hash[Symbol, AST::Types::t?]) -> void
30
24
 
31
- # Resolves `instance` types included in shape members
32
- #
33
- # * `false` only when the type expression is `instance`
34
- #
35
- attr_reader resolve_instance: bool
25
+ def subst: () -> Substitution?
36
26
 
37
- attr_reader variable_bounds: Hash[Symbol, AST::Types::t?]
27
+ def self.empty: () -> Config
38
28
 
39
- def initialize: (
40
- self_type: AST::Types::t,
41
- class_type: AST::Types::t | nil,
42
- instance_type: AST::Types::t | nil,
43
- ?resolve_self: bool,
44
- ?resolve_class: bool,
45
- ?resolve_instance: bool,
46
- variable_bounds: Hash[Symbol, AST::Types::t?]
47
- ) -> void
29
+ def upper_bound: (Symbol) -> AST::Types::t?
48
30
 
49
- def update: (
50
- ?self_type: AST::Types::t,
51
- ?class_type: AST::Types::t | nil,
52
- ?instance_type: AST::Types::t | nil,
53
- ?resolve_self: bool,
54
- ?resolve_class: bool,
55
- ?resolve_instance: bool,
56
- ?variable_bounds: Hash[Symbol, AST::Types::t?]
57
- ) -> self
31
+ private
58
32
 
59
- @no_resolve: self?
60
- def no_resolve: () -> self
33
+ def validate: () -> self
61
34
 
62
- def resolve?: () -> bool
35
+ def validate_fvs: (Symbol name, AST::Types::t?) -> void
36
+ end
63
37
 
64
- def ==: (untyped) -> bool
38
+ attr_reader factory: AST::Types::Factory
65
39
 
66
- alias eql? ==
40
+ # # No type application (if generic), no self-instance-module resolution
41
+ attr_reader object_shape_cache: Hash[TypeName, Shape?]
67
42
 
68
- def hash: () -> Integer
43
+ attr_reader union_shape_cache: Hash[AST::Types::Union, Shape?]
69
44
 
70
- @subst: Substitution
45
+ attr_reader singleton_shape_cache: Hash[TypeName, Shape?]
71
46
 
72
- # Substitution for immediate type expressions
73
- def subst: () -> Substitution
47
+ def initialize: (AST::Types::Factory) -> void
74
48
 
75
- # Returns `self_type`, or `nil` when it is `Types::Self`
76
- #
77
- def self_type?: () -> AST::Types::t?
49
+ def fetch_cache: [KEY] (Hash[KEY, Shape?], KEY) { () -> Shape? } -> Shape?
78
50
 
79
- # Returns `class_type`, or `nil` when it is `Types::Class`
80
- #
81
- def class_type?: () -> AST::Types::t?
51
+ # Returns a shape of given type with respect to Config
52
+ #
53
+ # * If `self` occurs in the given type, it returns types with `self`
54
+ # * If `self` doesn't occur in the given type, it returns type withohut `self`, that is resolved to `config.self_type`
55
+ #
56
+ def shape: (AST::Types::t, Config) -> Shape?
82
57
 
83
- # Returns `instanc_type`, or `nil` when it is `Types::Instance`
84
- #
85
- def instance_type?: () -> AST::Types::t?
86
- end
58
+ # Returns a shape of given type with respect to Config
59
+ #
60
+ # The `self` types included in the returned Shape is the `self` type in the top level
61
+ #
62
+ # * `raw_shape(<self>)` -> may return a shape with `self`
63
+ # * `raw_shape(<Array[self]>) -> returns a shape that returns `self` from `#first` method
64
+ #
65
+ def raw_shape: (AST::Types::t, Config) -> Shape?
87
66
 
88
- attr_reader factory: AST::Types::Factory
67
+ def self_shape: (AST::Types::t, Config) -> Shape?
89
68
 
90
- type cache_key = [
91
- AST::Types::t, # type
92
- bool, # public_only
93
- AST::Types::t | nil, # self_type
94
- AST::Types::t | nil, # class_type
95
- AST::Types::t | nil, # instance_type
96
- bool, bool, bool, # resolve_self, resolve_class, resolve_instance
97
- Hash[Symbol, AST::Types::t?]? # variable_bounds
98
- ]
99
- attr_reader cache: Hash[cache_key, Shape?]
69
+ private
100
70
 
101
- # No type application (if generic), no self-instance-module resolution
102
- attr_reader raw_instance_object_shape_cache: Hash[[TypeName, bool], Shape]
71
+ def object_shape: (RBS::TypeName) -> Shape
103
72
 
104
- attr_reader raw_singleton_object_shape_cache: Hash[[TypeName, bool], Shape]
73
+ def singleton_shape: (RBS::TypeName) -> Shape
105
74
 
106
- attr_reader raw_interface_object_shape_cache: Hash[[TypeName, bool], Shape]
75
+ def union_shape: (AST::Types::t, Array[Shape]) -> Shape?
107
76
 
108
- def initialize: (AST::Types::Factory) -> void
77
+ def intersection_shape: (AST::Types::t, Array[Shape]) -> Shape?
109
78
 
110
- # Calculates the shape of given class, based on `public_only` and Config
111
- #
112
- # Returns `nil` if a type that cannot calculate Shape is given.
113
- #
114
- # * `public_only`: If false, returns a shape with private methods.
79
+ def proc_shape: (AST::Types::Proc, Shape) -> Shape
80
+
81
+ def tuple_shape: (AST::Types::Tuple) { (AST::Types::Name::Instance) -> Shape? } -> Shape?
82
+
83
+ def record_shape: (AST::Types::Record) { (AST::Types::Name::Instance) -> Shape? } -> Shape?
84
+
85
+ # Substitution for `self`/`instance`/`class` types, built from the name of given type
115
86
  #
116
- def shape: (AST::Types::t, public_only: bool, config: Config) -> Shape?
87
+ def class_subst: (AST::Types::Name::Instance | AST::Types::Name::Singleton) -> Substitution
117
88
 
118
- private
89
+ def interface_subst: (AST::Types::Name::Interface) -> Substitution
90
+
91
+ # Substitution for type application of class instance, type alias, or interface types
92
+ def app_subst: (AST::Types::Name::Instance | AST::Types::Name::Alias | AST::Types::Name::Interface) -> Substitution
93
+
94
+ def method_name_for: (RBS::Definition::Method::TypeDef, Symbol name) -> method_name
95
+
96
+ def replace_primitive_method: (method_name, RBS::Definition::Method::TypeDef, MethodType) -> MethodType
97
+
98
+ # # Calculates the shape of given class, based on `public_only` and Config
99
+ # #
100
+ # # Returns `nil` if a type that cannot calculate Shape is given.
101
+ # #
102
+ # # * `public_only`: If false, returns a shape with private methods.
103
+ # #
104
+ # def shape: (AST::Types::t, public_only: bool, config: Config) -> Shape?
105
+
106
+ # private
119
107
 
120
108
  @subtyping: Subtyping::Check?
121
109
 
122
110
  def subtyping: () -> Subtyping::Check
123
111
 
124
- # Fetch and update cache
125
- #
126
- # Cache if given type is cacheable:
127
- #
128
- # * `self`, `instance`, `class` is not cacheable
129
- # * Type variables are not cacheable
130
- #
131
- def fetch_cache: (AST::Types::t, bool public_only, Config) { () -> Shape? } -> Shape?
112
+ # # Fetch and update cache
113
+ # #
114
+ # # Cache if given type is cacheable:
115
+ # #
116
+ # # * `self`, `instance`, `class` is not cacheable
117
+ # # * Type variables are not cacheable
118
+ # #
119
+ # def fetch_cache: (AST::Types::t, bool public_only, Config) { () -> Shape? } -> Shape?
132
120
 
133
- def include_self?: (AST::Types::t) -> bool
121
+ # def include_self?: (AST::Types::t) -> bool
134
122
 
135
- def definition_builder: () -> RBS::DefinitionBuilder
123
+ # def definition_builder: () -> RBS::DefinitionBuilder
136
124
 
137
- def object_shape: (
138
- AST::Types::Name::Instance | AST::Types::Name::Singleton | AST::Types::Name::Interface,
139
- bool public_only,
140
- boolish keep_self,
141
- boolish keep_instance,
142
- boolish keep_singleton
143
- ) -> Shape
125
+ # def object_shape: (
126
+ # AST::Types::Name::Instance | AST::Types::Name::Singleton | AST::Types::Name::Interface,
127
+ # bool public_only,
128
+ # boolish keep_self,
129
+ # boolish keep_instance,
130
+ # boolish keep_singleton
131
+ # ) -> Shape
144
132
 
145
- def raw_object_shape: (
146
- AST::Types::Name::Instance | AST::Types::Name::Singleton | AST::Types::Name::Interface,
147
- bool public_only,
148
- Substitution subst
149
- ) -> Shape
133
+ # def raw_object_shape: (
134
+ # AST::Types::Name::Instance | AST::Types::Name::Singleton | AST::Types::Name::Interface,
135
+ # bool public_only,
136
+ # Substitution subst
137
+ # ) -> Shape
150
138
 
151
- def union_shape: (AST::Types::t, Array[Shape], bool public_only) -> Shape
139
+ # def union_shape: (AST::Types::t, Array[Shape], bool public_only) -> Shape
152
140
 
153
- def intersection_shape: (AST::Types::t, Array[Shape], bool public_only) -> Shape
141
+ # def intersection_shape: (AST::Types::t, Array[Shape], bool public_only) -> Shape
154
142
 
155
- def tuple_shape: (AST::Types::Tuple, bool public_only, Config) -> Shape
143
+ # def tuple_shape: (AST::Types::Tuple, bool public_only, Config) -> Shape
156
144
 
157
- def record_shape: (AST::Types::Record, bool public_only, Config) -> Shape?
145
+ # def record_shape: (AST::Types::Record, bool public_only, Config) -> Shape?
158
146
 
159
- def proc_shape: (AST::Types::Proc, bool public_only, Config) -> Shape?
147
+ # def proc_shape: (AST::Types::Proc, bool public_only, Config) -> Shape?
160
148
 
161
- def replace_primitive_method: (method_name, RBS::Definition::Method::TypeDef, MethodType) -> MethodType
162
149
 
163
- def method_name_for: (RBS::Definition::Method::TypeDef, Symbol name) -> method_name
164
150
  end
165
151
  end
166
152
  end
@@ -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