steep 1.3.0.pre.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/Gemfile.lock +3 -3
  4. data/Gemfile.steep +1 -2
  5. data/Gemfile.steep.lock +4 -5
  6. data/bin/steep-prof +1 -1
  7. data/lib/steep/ast/types/class.rb +9 -3
  8. data/lib/steep/ast/types/factory.rb +9 -2
  9. data/lib/steep/ast/types/helper.rb +4 -3
  10. data/lib/steep/ast/types/instance.rb +8 -3
  11. data/lib/steep/ast/types/intersection.rb +6 -2
  12. data/lib/steep/ast/types/literal.rb +1 -1
  13. data/lib/steep/ast/types/logic.rb +5 -3
  14. data/lib/steep/ast/types/name.rb +11 -5
  15. data/lib/steep/ast/types/proc.rb +5 -5
  16. data/lib/steep/ast/types/record.rb +5 -1
  17. data/lib/steep/ast/types/self.rb +8 -2
  18. data/lib/steep/ast/types/tuple.rb +7 -5
  19. data/lib/steep/ast/types/union.rb +10 -4
  20. data/lib/steep/ast/types/var.rb +1 -1
  21. data/lib/steep/drivers/check.rb +1 -1
  22. data/lib/steep/drivers/checkfile.rb +1 -1
  23. data/lib/steep/drivers/langserver.rb +2 -2
  24. data/lib/steep/drivers/stats.rb +1 -1
  25. data/lib/steep/drivers/utils/jobs_option.rb +0 -4
  26. data/lib/steep/drivers/watch.rb +1 -1
  27. data/lib/steep/interface/substitution.rb +11 -10
  28. data/lib/steep/server/worker_process.rb +16 -11
  29. data/lib/steep/services/completion_provider.rb +2 -1
  30. data/lib/steep/services/goto_service.rb +2 -1
  31. data/lib/steep/services/hover_provider/ruby.rb +2 -1
  32. data/lib/steep/services/signature_service.rb +16 -0
  33. data/lib/steep/services/type_check_service.rb +4 -4
  34. data/lib/steep/signature/validator.rb +13 -13
  35. data/lib/steep/type_construction.rb +25 -20
  36. data/lib/steep/type_inference/logic_type_interpreter.rb +2 -2
  37. data/lib/steep/version.rb +1 -1
  38. data/lib/steep.rb +0 -1
  39. data/rbs_collection.steep.lock.yaml +1 -1
  40. data/sig/steep/ast/builtin.rbs +1 -1
  41. data/sig/steep/ast/types/any.rbs +6 -6
  42. data/sig/steep/ast/types/boolean.rbs +7 -7
  43. data/sig/steep/ast/types/bot.rbs +6 -6
  44. data/sig/steep/ast/types/class.rbs +8 -7
  45. data/sig/steep/ast/types/helper.rbs +6 -3
  46. data/sig/steep/ast/types/instance.rbs +7 -6
  47. data/sig/steep/ast/types/intersection.rbs +13 -10
  48. data/sig/steep/ast/types/literal.rbs +6 -4
  49. data/sig/steep/ast/types/logic.rbs +9 -9
  50. data/sig/steep/ast/types/name.rbs +9 -5
  51. data/sig/steep/ast/types/nil.rbs +7 -7
  52. data/sig/steep/ast/types/proc.rbs +8 -3
  53. data/sig/steep/ast/types/record.rbs +8 -9
  54. data/sig/steep/ast/types/self.rbs +8 -7
  55. data/sig/steep/ast/types/top.rbs +6 -6
  56. data/sig/steep/ast/types/tuple.rbs +6 -5
  57. data/sig/steep/ast/types/union.rbs +9 -9
  58. data/sig/steep/ast/types/var.rbs +16 -11
  59. data/sig/steep/ast/types/void.rbs +6 -6
  60. data/sig/steep/ast/types.rbs +5 -26
  61. data/sig/steep/drivers/utils/jobs_option.rbs +0 -2
  62. data/sig/steep/interface/substitution.rbs +9 -9
  63. data/sig/steep/server/worker_process.rbs +2 -2
  64. data/sig/steep/services/signature_service.rbs +14 -0
  65. data/sig/steep/services/type_check_service.rbs +2 -2
  66. data/sig/steep.rbs +2 -0
  67. data/steep.gemspec +1 -1
  68. metadata +6 -7
  69. data/lib/steep/ast/types.rb +0 -62
@@ -19,6 +19,10 @@ module Steep
19
19
  builder.env(last_builder.env)
20
20
  end
21
21
  end
22
+
23
+ def constant_resolver
24
+ @constant_resolver ||= RBS::Resolver::ConstantResolver.new(builder: last_builder)
25
+ end
22
26
  end
23
27
 
24
28
  class AncestorErrorStatus
@@ -37,6 +41,10 @@ module Steep
37
41
  builder.env(last_builder.env)
38
42
  end
39
43
  end
44
+
45
+ def constant_resolver
46
+ @constant_resolver ||= RBS::Resolver::ConstantResolver.new(builder: last_builder)
47
+ end
40
48
  end
41
49
 
42
50
  class LoadedStatus
@@ -61,6 +69,10 @@ module Steep
61
69
  builder.env(self.builder.env)
62
70
  end
63
71
  end
72
+
73
+ def constant_resolver
74
+ @constant_resolver ||= RBS::Resolver::ConstantResolver.new(builder: builder)
75
+ end
64
76
  end
65
77
 
66
78
  FileStatus = _ = Struct.new(:path, :content, :decls, keyword_init: true)
@@ -125,6 +137,10 @@ module Steep
125
137
  status.rbs_index
126
138
  end
127
139
 
140
+ def latest_constant_resolver
141
+ status.constant_resolver
142
+ end
143
+
128
144
  def current_subtyping
129
145
  if status.is_a?(LoadedStatus)
130
146
  status.subtyping
@@ -280,7 +280,7 @@ module Steep
280
280
 
281
281
  if subtyping
282
282
  text = source_files[path].content
283
- file = type_check_file(target: target, subtyping: subtyping, path: path, text: text)
283
+ file = type_check_file(target: target, subtyping: subtyping, path: path, text: text) { signature_service.latest_constant_resolver }
284
284
  yield [file.path, file.diagnostics]
285
285
  source_files[path] = file
286
286
  end
@@ -326,7 +326,7 @@ module Steep
326
326
  def type_check_file(target:, subtyping:, path:, text:)
327
327
  Steep.logger.tagged "#type_check_file(#{path}@#{target.name})" do
328
328
  source = Source.parse(text, path: path, factory: subtyping.factory)
329
- typing = TypeCheckService.type_check(source: source, subtyping: subtyping)
329
+ typing = TypeCheckService.type_check(source: source, subtyping: subtyping, constant_resolver: yield)
330
330
  SourceFile.with_typing(path: path, content: text, node: source.node, typing: typing)
331
331
  end
332
332
  rescue AnnotationParser::SyntaxError => exn
@@ -342,7 +342,7 @@ module Steep
342
342
  SourceFile.no_data(path: path, content: text)
343
343
  end
344
344
 
345
- def self.type_check(source:, subtyping:)
345
+ def self.type_check(source:, subtyping:, constant_resolver:)
346
346
  annotations = source.annotations(block: source.node, factory: subtyping.factory, context: nil)
347
347
 
348
348
  definition = subtyping.factory.definition_builder.build_instance(AST::Builtin::Object.module_name)
@@ -350,7 +350,7 @@ module Steep
350
350
  const_env = TypeInference::ConstantEnv.new(
351
351
  factory: subtyping.factory,
352
352
  context: nil,
353
- resolver: RBS::Resolver::ConstantResolver.new(builder: subtyping.factory.definition_builder)
353
+ resolver: constant_resolver
354
354
  )
355
355
  type_env = TypeInference::TypeEnv.new(const_env)
356
356
  type_env = TypeInference::TypeEnvBuilder.new(
@@ -270,9 +270,9 @@ module Steep
270
270
  mixin_constraints(definition, ancestors.included_modules || raise, immediate_self_types: ancestors.self_types).each do |relation, ancestor|
271
271
  checker.check(
272
272
  relation,
273
- self_type: AST::Types::Self.new,
274
- instance_type: AST::Types::Instance.new,
275
- class_type: AST::Types::Class.new,
273
+ self_type: AST::Types::Self.instance,
274
+ instance_type: AST::Types::Instance.instance,
275
+ class_type: AST::Types::Class.instance,
276
276
  constraints: Subtyping::Constraints.empty
277
277
  ).else do
278
278
  raise if ancestor.source.is_a?(Symbol)
@@ -314,16 +314,16 @@ module Steep
314
314
  relation = Subtyping::Relation.new(sub_type: var_type, super_type: parent_type)
315
315
  result1 = checker.check(
316
316
  relation,
317
- self_type: AST::Types::Self.new,
318
- instance_type: AST::Types::Instance.new,
319
- class_type: AST::Types::Class.new,
317
+ self_type: AST::Types::Self.instance,
318
+ instance_type: AST::Types::Instance.instance,
319
+ class_type: AST::Types::Class.instance,
320
320
  constraints: Subtyping::Constraints.empty
321
321
  )
322
322
  result2 = checker.check(
323
323
  relation.flip,
324
- self_type: AST::Types::Self.new,
325
- instance_type: AST::Types::Instance.new,
326
- class_type: AST::Types::Class.new,
324
+ self_type: AST::Types::Self.instance,
325
+ instance_type: AST::Types::Instance.instance,
326
+ class_type: AST::Types::Class.instance,
327
327
  constraints: Subtyping::Constraints.empty
328
328
  )
329
329
 
@@ -362,13 +362,13 @@ module Steep
362
362
  mixin_constraints(definition, ancestors.extended_modules, immediate_self_types: ancestors.self_types).each do |relation, ancestor|
363
363
  checker.check(
364
364
  relation,
365
- self_type: AST::Types::Self.new,
366
- instance_type: AST::Types::Instance.new,
367
- class_type: AST::Types::Class.new,
365
+ self_type: AST::Types::Self.instance ,
366
+ instance_type: AST::Types::Instance.instance,
367
+ class_type: AST::Types::Class.instance,
368
368
  constraints: Subtyping::Constraints.empty
369
369
  ).else do
370
370
  raise if ancestor.source.is_a?(Symbol)
371
-
371
+
372
372
  @errors << Diagnostic::Signature::ModuleSelfTypeError.new(
373
373
  name: name,
374
374
  location: ancestor.source&.location || raise,
@@ -3216,12 +3216,15 @@ module Steep
3216
3216
  def type_method_call(node, method_name:, receiver_type:, method:, arguments:, block_params:, block_body:, tapp:)
3217
3217
  node_range = node.loc.expression.yield_self {|l| l.begin_pos..l.end_pos }
3218
3218
 
3219
- results = method.method_types.map do |method_type|
3219
+ # @type var fails: Array[[TypeInference::MethodCall::t, TypeConstruction]]
3220
+ fails = []
3221
+
3222
+ method.method_types.each do |method_type|
3220
3223
  Steep.logger.tagged method_type.to_s do
3221
3224
  typing.new_child(node_range) do |child_typing|
3222
3225
  constr = self.with_new_typing(child_typing)
3223
3226
 
3224
- constr.try_special_method(
3227
+ call, constr = constr.try_special_method(
3225
3228
  node,
3226
3229
  receiver_type: receiver_type,
3227
3230
  method_name: method_name,
@@ -3239,30 +3242,32 @@ module Steep
3239
3242
  block_body: block_body,
3240
3243
  tapp: tapp
3241
3244
  )
3245
+
3246
+ if call.is_a?(TypeInference::MethodCall::Typed)
3247
+ constr.typing.save!
3248
+ return [
3249
+ call,
3250
+ update_type_env { constr.context.type_env }
3251
+ ]
3252
+ else
3253
+ fails << [call, constr]
3254
+ end
3242
3255
  end
3243
3256
  end
3244
3257
  end
3245
3258
 
3246
- case
3247
- when results.one?
3248
- # There is only one overload, use the type checking result
3249
- call, constr = results[0]
3250
- when (call, constr = results.find {|call, _| call.is_a?(TypeInference::MethodCall::Typed) })
3251
- # Successfully type checked with one of the overloads
3252
- else
3253
- # No suitable overload, more than one overlodas
3254
- return
3255
- end
3256
-
3257
- constr or raise
3258
- call or raise
3259
+ if fails.one?
3260
+ call, constr = fails[0]
3259
3261
 
3260
- constr.typing.save!
3262
+ constr.typing.save!
3261
3263
 
3262
- [
3263
- call,
3264
- update_type_env { constr.context.type_env }
3265
- ]
3264
+ [
3265
+ call,
3266
+ update_type_env { constr.context.type_env }
3267
+ ]
3268
+ else
3269
+ nil
3270
+ end
3266
3271
  end
3267
3272
 
3268
3273
  def inspect
@@ -390,14 +390,14 @@ module Steep
390
390
  # 4. none of the above (example: T = String, K = Integer)
391
391
 
392
392
  relation = Subtyping::Relation.new(sub_type: type, super_type: instance_type)
393
- if subtyping.check(relation, constraints: Subtyping::Constraints.empty, self_type: AST::Types::Self.new, instance_type: AST::Types::Instance.new, class_type: AST::Types::Class.new).success?
393
+ if subtyping.check(relation, constraints: Subtyping::Constraints.empty, self_type: AST::Types::Self.instance, instance_type: AST::Types::Instance.instance, class_type: AST::Types::Class.instance).success?
394
394
  # 1 or 2. Satisfies the condition, no narrowing because `type` is already more specific than/equals to `instance_type`
395
395
  [
396
396
  [type],
397
397
  []
398
398
  ]
399
399
  else
400
- if subtyping.check(relation.flip, constraints: Subtyping::Constraints.empty, self_type: AST::Types::Self.new, instance_type: AST::Types::Instance.new, class_type: AST::Types::Class.new).success?
400
+ if subtyping.check(relation.flip, constraints: Subtyping::Constraints.empty, self_type: AST::Types::Self.instance, instance_type: AST::Types::Instance.instance, class_type: AST::Types::Class.instance).success?
401
401
  # 3. Satisfied the condition, narrows to `instance_type`, but cannot remove it from *falsy* list
402
402
  [
403
403
  [instance_type],
data/lib/steep/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Steep
2
- VERSION = "1.3.0.pre.1"
2
+ VERSION = "1.3.0"
3
3
  end
data/lib/steep.rb CHANGED
@@ -93,7 +93,6 @@ require "steep/type_inference/type_env_builder"
93
93
  require "steep/type_inference/logic_type_interpreter"
94
94
  require "steep/type_inference/multiple_assignment"
95
95
  require "steep/type_inference/method_call"
96
- require "steep/ast/types"
97
96
 
98
97
  require "steep/index/rbs_index"
99
98
  require "steep/index/signature_symbol_provider"
@@ -11,7 +11,7 @@ gems:
11
11
  source:
12
12
  type: stdlib
13
13
  - name: rbs
14
- version: 2.8.0.pre.1
14
+ version: 2.8.0
15
15
  source:
16
16
  type: rubygems
17
17
  - name: dbm
@@ -59,7 +59,7 @@ module Steep
59
59
 
60
60
  def self.top_type: () -> Types::Top
61
61
 
62
- def self.optional: (Types::t `type`) -> Types::Union
62
+ def self.optional: (Types::t) -> Types::t
63
63
 
64
64
  def self.true_type: () -> Types::Literal
65
65
 
@@ -6,23 +6,23 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def ==: (untyped other) -> untyped
9
+ def ==: (untyped other) -> bool
10
10
 
11
- def hash: () -> untyped
11
+ def hash: () -> Integer
12
12
 
13
13
  alias eql? ==
14
14
 
15
- def subst: (untyped s) -> self
15
+ def subst: (Interface::Substitution s) -> Any
16
16
 
17
- def to_s: () -> "untyped"
17
+ def to_s: () -> String
18
18
 
19
19
  include Helper::NoFreeVariables
20
20
 
21
21
  include Helper::NoChild
22
22
 
23
- def level: () -> ::Array[1]
23
+ def level: () -> Array[Integer]
24
24
 
25
- def with_location: (untyped new_location) -> untyped
25
+ def with_location: (untyped new_location) -> Any
26
26
  end
27
27
  end
28
28
  end
@@ -6,25 +6,25 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def ==: (untyped other) -> untyped
9
+ def ==: (untyped other) -> bool
10
10
 
11
- def hash: () -> untyped
11
+ def hash: () -> Integer
12
12
 
13
13
  alias eql? ==
14
14
 
15
- def subst: (untyped s) -> self
15
+ def subst: (Interface::Substitution) -> Boolean
16
16
 
17
- def to_s: () -> "bool"
17
+ def to_s: () -> String
18
18
 
19
19
  include Helper::NoFreeVariables
20
20
 
21
21
  include Helper::NoChild
22
22
 
23
- def level: () -> ::Array[0]
23
+ def level: () -> Array[Integer]
24
24
 
25
- def with_location: (untyped new_location) -> untyped
25
+ def with_location: (untyped new_location) -> Boolean
26
26
 
27
- def back_type: () -> untyped
27
+ def back_type: () -> t
28
28
  end
29
29
  end
30
30
  end
@@ -6,23 +6,23 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def ==: (untyped other) -> untyped
9
+ def ==: (untyped other) -> bool
10
10
 
11
- def hash: () -> untyped
11
+ def hash: () -> Integer
12
12
 
13
13
  alias eql? ==
14
14
 
15
- def subst: (untyped s) -> self
15
+ def subst: (Interface::Substitution) -> Bot
16
16
 
17
- def to_s: () -> "bot"
17
+ def to_s: () -> String
18
18
 
19
19
  include Helper::NoFreeVariables
20
20
 
21
21
  include Helper::NoChild
22
22
 
23
- def level: () -> ::Array[2]
23
+ def level: () -> Array[Integer]
24
24
 
25
- def with_location: (untyped new_location) -> untyped
25
+ def with_location: (untyped new_location) -> Bot
26
26
  end
27
27
  end
28
28
  end
@@ -6,23 +6,24 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def to_s: () -> "class"
9
+ def to_s: () -> String
10
10
 
11
- def ==: (untyped other) -> untyped
11
+ def ==: (untyped other) -> bool
12
12
 
13
- def hash: () -> untyped
13
+ def hash: () -> Integer
14
14
 
15
15
  alias eql? ==
16
16
 
17
- def subst: (untyped s) -> untyped
17
+ def subst: (Interface::Substitution s) -> t
18
18
 
19
- def free_variables: () -> untyped
19
+ @@fvs: Set[variable]
20
+ def free_variables: () -> Set[variable]
20
21
 
21
22
  include Helper::NoChild
22
23
 
23
- def level: () -> ::Array[0]
24
+ def level: () -> Array[Integer]
24
25
 
25
- def with_location: (untyped new_location) -> untyped
26
+ def with_location: (untyped new_location) -> Class
26
27
 
27
28
  self.@instance: Class
28
29
  def self.instance: () -> Class
@@ -3,15 +3,18 @@ module Steep
3
3
  module Types
4
4
  module Helper
5
5
  module ChildrenLevel
6
- def level_of_children: (untyped children) -> untyped
6
+ def level_of_children: (Array[t] children) -> Array[Integer]
7
7
  end
8
8
 
9
9
  module NoFreeVariables
10
- def free_variables: () -> untyped
10
+ @fvs: Set[variable]
11
+
12
+ def free_variables: () -> Set[variable]
11
13
  end
12
14
 
13
15
  module NoChild
14
- def each_child: () ?{ () -> untyped } -> (untyped | nil)
16
+ def each_child: () { (t) -> void } -> void
17
+ | () -> Enumerator[t, void]
15
18
  end
16
19
  end
17
20
  end
@@ -6,21 +6,22 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def ==: (untyped other) -> untyped
9
+ def ==: (untyped other) -> bool
10
10
 
11
- def hash: () -> untyped
11
+ def hash: () -> Integer
12
12
 
13
13
  alias eql? ==
14
14
 
15
- def subst: (untyped s) -> untyped
15
+ def subst: (Interface::Substitution s) -> t
16
16
 
17
- def free_variables: () -> untyped
17
+ @@fvs: Set[variable]
18
+ def free_variables: () -> Set[variable]
18
19
 
19
20
  include Helper::NoChild
20
21
 
21
- def to_s: () -> "instance"
22
+ def to_s: () -> String
22
23
 
23
- def level: () -> ::Array[0]
24
+ def level: () -> Array[Integer]
24
25
 
25
26
  def with_location: (untyped new_location) -> untyped
26
27
 
@@ -2,33 +2,36 @@ module Steep
2
2
  module AST
3
3
  module Types
4
4
  class Intersection
5
- attr_reader types: untyped
5
+ attr_reader types: Array[t]
6
6
 
7
7
  attr_reader location: untyped
8
8
 
9
- def initialize: (types: untyped, ?location: untyped?) -> void
9
+ def initialize: (types: Array[t], ?location: untyped?) -> void
10
10
 
11
11
  def self.build: (types: Array[t], ?location: untyped?) -> t
12
12
 
13
- def ==: (untyped other) -> untyped
13
+ def ==: (untyped other) -> bool
14
14
 
15
- def hash: () -> untyped
15
+ @hash: Integer
16
+ def hash: () -> Integer
16
17
 
17
18
  alias eql? ==
18
19
 
19
- def subst: (untyped s) -> untyped
20
+ def subst: (Interface::Substitution s) -> t
20
21
 
21
- def to_s: () -> ::String
22
+ def to_s: () -> String
22
23
 
23
- def free_variables: () -> untyped
24
+ @fvs: Set[variable]
25
+ def free_variables: () -> Set[variable]
24
26
 
25
27
  include Helper::ChildrenLevel
26
28
 
27
- def each_child: () ?{ () -> untyped } -> untyped
29
+ def each_child: () { (t) -> void } -> void
30
+ | () -> Enumerator[t, void]
28
31
 
29
- def level: () -> untyped
32
+ def level: () -> Array[Integer]
30
33
 
31
- def with_location: (untyped new_location) -> untyped
34
+ def with_location: (untyped new_location) -> Intersection
32
35
  end
33
36
  end
34
37
  end
@@ -4,9 +4,11 @@ module Steep
4
4
  class Literal
5
5
  attr_reader location: untyped
6
6
 
7
- attr_reader value: untyped
7
+ type value = Integer | String | Symbol | TrueClass | FalseClass
8
8
 
9
- def initialize: (value: untyped, ?location: untyped?) -> void
9
+ attr_reader value: value
10
+
11
+ def initialize: (value: value, ?location: untyped?) -> void
10
12
 
11
13
  def ==: (untyped other) -> bool
12
14
 
@@ -14,7 +16,7 @@ module Steep
14
16
 
15
17
  alias eql? ==
16
18
 
17
- def subst: (Interface::Substitution s) -> self
19
+ def subst: (Interface::Substitution s) -> Literal
18
20
 
19
21
  def to_s: () -> String
20
22
 
@@ -24,7 +26,7 @@ module Steep
24
26
 
25
27
  def level: () -> Array[Integer]
26
28
 
27
- def with_location: (untyped new_location) -> self
29
+ def with_location: (untyped new_location) -> Literal
28
30
 
29
31
  def back_type: () -> AST::Types::Name::Instance
30
32
  end
@@ -2,24 +2,24 @@ module Steep
2
2
  module AST
3
3
  module Types
4
4
  module Logic
5
- type loc = RBS::Location[untyped, untyped]
6
-
7
5
  class Base
8
6
  attr_reader location: untyped
9
7
 
10
- def subst: (untyped s) -> self
8
+ def subst: (Interface::Substitution s) -> self
11
9
 
12
- def free_variables: () -> untyped
10
+ include Helper::NoFreeVariables
13
11
 
14
12
  include Helper::NoChild
15
13
 
16
- def hash: () -> untyped
14
+ def hash: () -> Integer
17
15
 
18
- def ==: (untyped other) -> untyped
16
+ def ==: (untyped other) -> bool
19
17
 
20
18
  alias eql? ==
21
19
 
22
- def to_s: () -> ::String
20
+ def to_s: () -> String
21
+
22
+ def level: () -> Array[Integer]
23
23
  end
24
24
 
25
25
  # A type for `!` (not) operator results.
@@ -60,7 +60,7 @@ module Steep
60
60
 
61
61
  attr_reader type: t
62
62
 
63
- def initialize: (truthy: TypeInference::TypeEnv, falsy: TypeInference::TypeEnv, type: t, ?location: loc?) -> void
63
+ def initialize: (truthy: TypeInference::TypeEnv, falsy: TypeInference::TypeEnv, type: t, ?location: untyped) -> void
64
64
 
65
65
  def ==: (untyped other) -> bool
66
66
 
@@ -68,7 +68,7 @@ module Steep
68
68
 
69
69
  def hash: () -> Integer
70
70
 
71
- def inspect: () -> ::String
71
+ def inspect: () -> String
72
72
 
73
73
  alias to_s inspect
74
74
  end
@@ -1,6 +1,8 @@
1
1
  module Steep
2
2
  module AST
3
3
  module Types
4
+ # Types with names
5
+ #
4
6
  module Name
5
7
  class Base
6
8
  attr_reader location: untyped
@@ -13,7 +15,7 @@ module Steep
13
15
 
14
16
  def subst: (Steep::Interface::Substitution s) -> self
15
17
 
16
- def level: () -> ::Array[0]
18
+ def level: () -> Array[Integer]
17
19
  end
18
20
 
19
21
  class Applying < Base
@@ -25,22 +27,24 @@ module Steep
25
27
 
26
28
  alias eql? ==
27
29
 
30
+ @hash: Integer
28
31
  def hash: () -> Integer
29
32
 
30
33
  def to_s: () -> ::String
31
34
 
32
- def with_location: (untyped new_location) -> untyped
35
+ def with_location: (untyped new_location) -> self
33
36
 
34
37
  def subst: (Steep::Interface::Substitution s) -> self
35
38
 
36
- def free_variables: () -> Set[Symbol]
39
+ @fvs: Set[variable]
40
+ def free_variables: () -> Set[variable]
37
41
 
38
42
  def each_child: () { (t) -> void } -> void
39
43
  | () -> Enumerator[t, void]
40
44
 
41
45
  include Helper::ChildrenLevel
42
46
 
43
- def level: () -> untyped
47
+ def level: () -> Array[Integer]
44
48
  end
45
49
 
46
50
  class Singleton < Base
@@ -52,7 +56,7 @@ module Steep
52
56
 
53
57
  def to_s: () -> ::String
54
58
 
55
- def with_location: (untyped new_location) -> untyped
59
+ def with_location: (untyped new_location) -> Singleton
56
60
 
57
61
  include Helper::NoChild
58
62
  end
@@ -6,25 +6,25 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def ==: (untyped other) -> untyped
9
+ def ==: (untyped other) -> bool
10
10
 
11
- def hash: () -> untyped
11
+ def hash: () -> Integer
12
12
 
13
13
  alias eql? ==
14
14
 
15
- def subst: (untyped s) -> self
15
+ def subst: (Interface::Substitution s) -> Nil
16
16
 
17
- def to_s: () -> "nil"
17
+ def to_s: () -> String
18
18
 
19
19
  include Helper::NoFreeVariables
20
20
 
21
21
  include Helper::NoChild
22
22
 
23
- def level: () -> ::Array[0]
23
+ def level: () -> Array[Integer]
24
24
 
25
- def with_location: (untyped new_location) -> untyped
25
+ def with_location: (untyped new_location) -> Nil
26
26
 
27
- def back_type: () -> untyped
27
+ def back_type: () -> Name::Instance
28
28
  end
29
29
  end
30
30
  end