steep 1.1.1 → 1.2.0.pre.1

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 (140) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/Gemfile +0 -1
  4. data/Gemfile.lock +12 -11
  5. data/Gemfile.steep +1 -1
  6. data/Gemfile.steep.lock +9 -9
  7. data/README.md +3 -3
  8. data/Steepfile +23 -0
  9. data/bin/steep-prof +2 -1
  10. data/lib/steep/annotation_parser.rb +1 -1
  11. data/lib/steep/ast/types/class.rb +4 -0
  12. data/lib/steep/ast/types/factory.rb +86 -602
  13. data/lib/steep/ast/types/instance.rb +4 -0
  14. data/lib/steep/ast/types/literal.rb +1 -1
  15. data/lib/steep/ast/types/proc.rb +22 -8
  16. data/lib/steep/ast/types/self.rb +4 -0
  17. data/lib/steep/ast/types/union.rb +1 -1
  18. data/lib/steep/cli.rb +24 -1
  19. data/lib/steep/diagnostic/ruby.rb +17 -22
  20. data/lib/steep/drivers/checkfile.rb +205 -0
  21. data/lib/steep/drivers/validate.rb +3 -1
  22. data/lib/steep/equatable.rb +2 -0
  23. data/lib/steep/interface/block.rb +21 -11
  24. data/lib/steep/interface/builder.rb +756 -0
  25. data/lib/steep/interface/function.rb +32 -24
  26. data/lib/steep/interface/method_type.rb +191 -78
  27. data/lib/steep/interface/shape.rb +132 -0
  28. data/lib/steep/interface/substitution.rb +23 -12
  29. data/lib/steep/interface/type_param.rb +1 -2
  30. data/lib/steep/path_helper.rb +1 -1
  31. data/lib/steep/project.rb +5 -7
  32. data/lib/steep/server/base_worker.rb +2 -2
  33. data/lib/steep/server/change_buffer.rb +4 -3
  34. data/lib/steep/server/interaction_worker.rb +1 -1
  35. data/lib/steep/server/master.rb +69 -9
  36. data/lib/steep/server/type_check_worker.rb +13 -11
  37. data/lib/steep/server/worker_process.rb +9 -7
  38. data/lib/steep/services/completion_provider.rb +15 -3
  39. data/lib/steep/services/hover_provider/singleton_methods.rb +5 -6
  40. data/lib/steep/services/signature_service.rb +13 -8
  41. data/lib/steep/services/type_check_service.rb +2 -0
  42. data/lib/steep/signature/validator.rb +1 -1
  43. data/lib/steep/subtyping/check.rb +154 -103
  44. data/lib/steep/subtyping/relation.rb +3 -3
  45. data/lib/steep/subtyping/result.rb +20 -2
  46. data/lib/steep/subtyping/variable_variance.rb +9 -0
  47. data/lib/steep/type_construction.rb +558 -299
  48. data/lib/steep/type_inference/block_params.rb +169 -86
  49. data/lib/steep/type_inference/logic_type_interpreter.rb +9 -14
  50. data/lib/steep/type_inference/method_params.rb +12 -7
  51. data/lib/steep/type_inference/send_args.rb +41 -35
  52. data/lib/steep/type_inference/type_env_builder.rb +1 -1
  53. data/lib/steep/version.rb +1 -1
  54. data/lib/steep.rb +71 -2
  55. data/rbs_collection.steep.lock.yaml +18 -30
  56. data/rbs_collection.steep.yaml +1 -0
  57. data/sig/shims/language-server_protocol.rbs +20 -0
  58. data/sig/shims/tagged_logging.rbs +6 -0
  59. data/sig/steep/ast/annotation/collection.rbs +6 -6
  60. data/sig/steep/ast/types/class.rbs +3 -0
  61. data/sig/steep/ast/types/factory.rbs +38 -32
  62. data/sig/steep/ast/types/instance.rbs +3 -0
  63. data/sig/steep/ast/types/intersection.rbs +1 -1
  64. data/sig/steep/ast/types/literal.rbs +7 -7
  65. data/sig/steep/ast/types/name.rbs +14 -13
  66. data/sig/steep/ast/types/proc.rbs +3 -1
  67. data/sig/steep/ast/types/self.rbs +3 -0
  68. data/sig/steep/ast/types/var.rbs +1 -1
  69. data/sig/steep/diagnostic/ruby.rbs +30 -34
  70. data/sig/steep/drivers/annotations.rbs +17 -0
  71. data/sig/steep/drivers/check.rbs +33 -0
  72. data/sig/steep/drivers/checkfile.rbs +26 -0
  73. data/sig/steep/drivers/diagnostic_printer.rbs +25 -0
  74. data/sig/steep/drivers/init.rbs +19 -0
  75. data/sig/steep/drivers/langserver.rbs +35 -0
  76. data/sig/steep/drivers/print_project.rbs +15 -0
  77. data/sig/steep/drivers/stats.rbs +37 -0
  78. data/sig/steep/drivers/utils/driver_helper.rbs +23 -0
  79. data/sig/steep/drivers/utils/jobs_count.rbs +11 -0
  80. data/sig/steep/drivers/validate.rbs +15 -0
  81. data/sig/steep/drivers/vendor.rbs +19 -0
  82. data/sig/steep/drivers/watch.rbs +27 -0
  83. data/sig/steep/drivers/worker.rbs +31 -0
  84. data/sig/steep/equatable.rbs +11 -0
  85. data/sig/steep/index/rbs_index.rbs +91 -0
  86. data/sig/steep/index/signature_symbol_provider.rbs +29 -0
  87. data/sig/steep/index/source_index.rbs +63 -0
  88. data/sig/steep/interface/block.rbs +3 -1
  89. data/sig/steep/interface/builder.rbs +152 -0
  90. data/sig/steep/interface/function.rbs +67 -55
  91. data/sig/steep/interface/method_type.rbs +60 -12
  92. data/sig/steep/interface/shape.rbs +61 -0
  93. data/sig/steep/interface/substitution.rbs +18 -22
  94. data/sig/steep/interface/type_param.rbs +9 -1
  95. data/sig/steep/path_helper.rbs +7 -0
  96. data/sig/steep/project/pattern.rbs +10 -10
  97. data/sig/steep/project/target.rbs +2 -2
  98. data/sig/steep/project.rbs +15 -8
  99. data/sig/steep/server/base_worker.rbs +49 -0
  100. data/sig/steep/server/change_buffer.rbs +32 -0
  101. data/sig/steep/server/interaction_worker.rbs +41 -0
  102. data/sig/steep/server/lsp_formatter.rbs +29 -0
  103. data/sig/steep/server/master.rbs +260 -0
  104. data/sig/steep/server/type_check_worker.rbs +135 -0
  105. data/sig/steep/server/worker_process.rbs +29 -0
  106. data/sig/steep/services/completion_provider.rbs +5 -5
  107. data/sig/steep/services/content_change.rbs +14 -12
  108. data/sig/steep/services/file_loader.rbs +12 -4
  109. data/sig/steep/services/hover_provider/singleton_methods.rbs +1 -1
  110. data/sig/steep/services/path_assignment.rbs +7 -7
  111. data/sig/steep/services/signature_service.rbs +67 -40
  112. data/sig/steep/services/type_check_service.rbs +53 -39
  113. data/sig/steep/subtyping/check.rbs +80 -44
  114. data/sig/steep/subtyping/relation.rbs +24 -22
  115. data/sig/steep/subtyping/result.rbs +48 -30
  116. data/sig/steep/subtyping/variable_variance.rbs +2 -0
  117. data/sig/steep/type_construction.rbs +132 -23
  118. data/sig/steep/type_inference/block_params.rbs +120 -18
  119. data/sig/steep/type_inference/context.rbs +45 -20
  120. data/sig/steep/type_inference/context_array.rbs +37 -0
  121. data/sig/steep/type_inference/logic_type_interpreter.rbs +3 -1
  122. data/sig/steep/type_inference/method_params.rbs +13 -9
  123. data/sig/steep/type_inference/send_args.rbs +229 -0
  124. data/sig/steep/type_inference/type_env_builder.rbs +1 -1
  125. data/sig/steep/typing.rbs +4 -4
  126. data/sig/steep.rbs +4 -2
  127. data/smoke/block/e.rb +12 -0
  128. data/smoke/block/e.rbs +4 -0
  129. data/smoke/block/test_expectations.yml +12 -0
  130. data/smoke/regression/block_param_split.rb +7 -0
  131. data/smoke/regression/block_param_split.rbs +3 -0
  132. data/smoke/regression/empty_yield.rb +5 -0
  133. data/smoke/regression/empty_yield.rbs +3 -0
  134. data/smoke/regression/test_expectations.yml +12 -0
  135. data/smoke/yield/test_expectations.yml +4 -4
  136. data/steep.gemspec +2 -1
  137. metadata +61 -9
  138. data/lib/steep/interface/interface.rb +0 -34
  139. data/sig/steep/interface/interface.rbs +0 -23
  140. data/sig/version.rbs +0 -3
data/lib/steep.rb CHANGED
@@ -60,7 +60,8 @@ require "steep/interface/function"
60
60
  require "steep/interface/block"
61
61
  require "steep/interface/method_type"
62
62
  require "steep/interface/substitution"
63
- require "steep/interface/interface"
63
+ require "steep/interface/shape"
64
+ require "steep/interface/builder"
64
65
 
65
66
  require "steep/subtyping/result"
66
67
  require "steep/subtyping/check"
@@ -126,6 +127,7 @@ require "steep/expectations"
126
127
  require "steep/drivers/utils/driver_helper"
127
128
  require "steep/drivers/utils/jobs_count"
128
129
  require "steep/drivers/check"
130
+ require "steep/drivers/checkfile"
129
131
  require "steep/drivers/stats"
130
132
  require "steep/drivers/validate"
131
133
  require "steep/drivers/annotations"
@@ -145,7 +147,7 @@ $stderr = STDERR
145
147
 
146
148
  module Steep
147
149
  def self.logger
148
- @logger
150
+ @logger || raise
149
151
  end
150
152
 
151
153
  def self.new_logger(output, prev_level)
@@ -245,3 +247,70 @@ module Steep
245
247
  result
246
248
  end
247
249
  end
250
+
251
+ klasses = [
252
+ # Steep::Interface::MethodType
253
+ ]
254
+
255
+ klasses.each do |klass|
256
+ klass.instance_eval do
257
+ def self.new(*_, **__, &___)
258
+ super
259
+ end
260
+ end
261
+ end
262
+
263
+ module GCCounter
264
+ module_function
265
+
266
+ def count_objects(title, regexp = /^Steep/, skip: false)
267
+ if ENV["COUNT_GC_OBJECTS"] && !skip
268
+ unless GC.disable
269
+ GC.start(immediate_sweep: true, immediate_mark: true, full_mark: true)
270
+
271
+ begin
272
+ yield
273
+ ensure
274
+ Steep.logger.fatal "===== #{title} ==============================="
275
+
276
+ klasses = []
277
+
278
+ ObjectSpace.each_object(Class) do |klass|
279
+ if (klass.name || "") =~ regexp
280
+ klasses << klass
281
+ end
282
+ end
283
+
284
+ before = {}
285
+
286
+ klasses.each do |klass|
287
+ count = ObjectSpace.each_object(klass).count
288
+ before[klass] = count
289
+ end
290
+
291
+ GC.start(immediate_sweep: true, immediate_mark: true, full_mark: true)
292
+
293
+ gceds = []
294
+
295
+ klasses.each do |klass|
296
+ count = ObjectSpace.each_object(klass).count
297
+ gced = (before[klass] || 0) - count
298
+
299
+ gceds << [klass, gced] if gced > 0
300
+ end
301
+
302
+ gceds.sort_by! {|_, count| -count }
303
+ gceds.each do |klass, count|
304
+ Steep.logger.fatal { "#{klass.name} => #{count}"}
305
+ end
306
+
307
+ GC.enable
308
+ end
309
+ else
310
+ yield
311
+ end
312
+ else
313
+ yield
314
+ end
315
+ end
316
+ end
@@ -10,16 +10,12 @@ gems:
10
10
  version: '0'
11
11
  source:
12
12
  type: stdlib
13
- - name: rbs
14
- version: 2.5.1
15
- source:
16
- type: rubygems
17
13
  - name: activesupport
18
14
  version: '6.0'
19
15
  source:
20
16
  type: git
21
17
  name: ruby/gem_rbs_collection
22
- revision: 933f7176968d8620224c0b22baefadbd7d77ef27
18
+ revision: dc7059ea0cdf67f486ca9cea2b01d53f04724652
23
19
  remote: https://github.com/ruby/gem_rbs_collection.git
24
20
  repo_dir: gems
25
21
  - name: ast
@@ -27,7 +23,7 @@ gems:
27
23
  source:
28
24
  type: git
29
25
  name: ruby/gem_rbs_collection
30
- revision: 933f7176968d8620224c0b22baefadbd7d77ef27
26
+ revision: dc7059ea0cdf67f486ca9cea2b01d53f04724652
31
27
  remote: https://github.com/ruby/gem_rbs_collection.git
32
28
  repo_dir: gems
33
29
  - name: i18n
@@ -35,7 +31,7 @@ gems:
35
31
  source:
36
32
  type: git
37
33
  name: ruby/gem_rbs_collection
38
- revision: 933f7176968d8620224c0b22baefadbd7d77ef27
34
+ revision: dc7059ea0cdf67f486ca9cea2b01d53f04724652
39
35
  remote: https://github.com/ruby/gem_rbs_collection.git
40
36
  repo_dir: gems
41
37
  - name: listen
@@ -43,15 +39,19 @@ gems:
43
39
  source:
44
40
  type: git
45
41
  name: ruby/gem_rbs_collection
46
- revision: 933f7176968d8620224c0b22baefadbd7d77ef27
42
+ revision: dc7059ea0cdf67f486ca9cea2b01d53f04724652
47
43
  remote: https://github.com/ruby/gem_rbs_collection.git
48
44
  repo_dir: gems
45
+ - name: minitest
46
+ version: '0'
47
+ source:
48
+ type: stdlib
49
49
  - name: parallel
50
50
  version: '1.20'
51
51
  source:
52
52
  type: git
53
53
  name: ruby/gem_rbs_collection
54
- revision: 933f7176968d8620224c0b22baefadbd7d77ef27
54
+ revision: dc7059ea0cdf67f486ca9cea2b01d53f04724652
55
55
  remote: https://github.com/ruby/gem_rbs_collection.git
56
56
  repo_dir: gems
57
57
  - name: rainbow
@@ -59,50 +59,38 @@ gems:
59
59
  source:
60
60
  type: git
61
61
  name: ruby/gem_rbs_collection
62
- revision: 933f7176968d8620224c0b22baefadbd7d77ef27
62
+ revision: dc7059ea0cdf67f486ca9cea2b01d53f04724652
63
63
  remote: https://github.com/ruby/gem_rbs_collection.git
64
64
  repo_dir: gems
65
- - name: logger
66
- version: '0'
67
- source:
68
- type: stdlib
69
- - name: pathname
65
+ - name: securerandom
70
66
  version: '0'
71
67
  source:
72
68
  type: stdlib
73
- - name: json
74
- version: '0'
75
- source:
76
- type: stdlib
77
- - name: optparse
78
- version: '0'
79
- source:
80
- type: stdlib
81
- - name: rubygems
69
+ - name: monitor
82
70
  version: '0'
83
71
  source:
84
72
  type: stdlib
85
- - name: tsort
73
+ - name: date
86
74
  version: '0'
87
75
  source:
88
76
  type: stdlib
89
- - name: monitor
77
+ - name: singleton
90
78
  version: '0'
91
79
  source:
92
80
  type: stdlib
93
- - name: date
81
+ - name: logger
94
82
  version: '0'
95
83
  source:
96
84
  type: stdlib
97
- - name: singleton
85
+ - name: mutex_m
98
86
  version: '0'
99
87
  source:
100
88
  type: stdlib
101
- - name: mutex_m
89
+ - name: time
102
90
  version: '0'
103
91
  source:
104
92
  type: stdlib
105
- - name: time
93
+ - name: pathname
106
94
  version: '0'
107
95
  source:
108
96
  type: stdlib
@@ -15,5 +15,6 @@ gems:
15
15
  ignore: true
16
16
  - name: set
17
17
  - name: rbs
18
+ ignore: true
18
19
  - name: with_steep_types
19
20
  ignore: true
@@ -0,0 +1,20 @@
1
+ module LanguageServer
2
+ module Protocol
3
+ module Transport
4
+ module Io
5
+ class Writer
6
+ def initialize: (IO) -> void
7
+
8
+ def write: (**untyped) -> void
9
+ | (Hash[Symbol, untyped]) -> void
10
+ end
11
+
12
+ class Reader
13
+ def initialize: (IO) -> void
14
+
15
+ def read: () { (untyped) -> void } -> bot
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,6 @@
1
+ module ActiveSupport::TaggedLogging
2
+ def tagged: [A] (*String) { () -> A } -> A
3
+ | ...
4
+
5
+ def formatter: () -> Formatter
6
+ end
@@ -40,17 +40,17 @@ module Steep
40
40
 
41
41
  def method_type: (untyped name) -> (untyped | nil)
42
42
 
43
- def block_type: () -> untyped
43
+ %a{pure} def block_type: () -> Types::t?
44
44
 
45
- def return_type: () -> untyped
45
+ %a{pure} def return_type: () -> Types::t?
46
46
 
47
- def self_type: () -> untyped
47
+ %a{pure} def self_type: () -> Types::t?
48
48
 
49
- def instance_type: () -> untyped
49
+ %a{pure} def instance_type: () -> Types::t?
50
50
 
51
- def module_type: () -> untyped
51
+ %a{pure} def module_type: () -> Types::t?
52
52
 
53
- def break_type: () -> untyped
53
+ %a{pure} def break_type: () -> Types::t?
54
54
 
55
55
  def lvar_types: () -> untyped
56
56
 
@@ -23,6 +23,9 @@ module Steep
23
23
  def level: () -> ::Array[0]
24
24
 
25
25
  def with_location: (untyped new_location) -> untyped
26
+
27
+ self.@instance: Class
28
+ def self.instance: () -> Class
26
29
  end
27
30
  end
28
31
  end
@@ -2,74 +2,80 @@ module Steep
2
2
  module AST
3
3
  module Types
4
4
  class Factory
5
- attr_reader definition_builder: RBS::DefinitionBuilder
5
+ @env: RBS::Environment
6
+
7
+ @type_name_resolver: RBS::Resolver::TypeNameResolver
6
8
 
7
- attr_reader type_name_cache: untyped
9
+ attr_reader definition_builder: RBS::DefinitionBuilder
8
10
 
9
- attr_reader type_cache: untyped
11
+ attr_reader type_cache: Hash[RBS::Types::t, t]
10
12
 
11
13
  attr_reader type_interface_cache: untyped
12
14
 
15
+ @type_name_resolver: RBS::Resolver::TypeNameResolver?
16
+
13
17
  def inspect: () -> String
14
18
 
15
19
  def initialize: (builder: RBS::DefinitionBuilder) -> void
16
20
 
17
- def type_name_resolver: () -> untyped
21
+ def type_name_resolver: () -> RBS::Resolver::TypeNameResolver
18
22
 
19
- def type_opt: (untyped `type`) -> (untyped | nil)
23
+ def type: (RBS::Types::t `type`) -> t
20
24
 
21
- def type: (RBS::Types::t `type`) -> AST::Types::t
25
+ def type_opt: (RBS::Types::t? `type`) -> t?
22
26
 
23
- def type_1: (AST::Types::t `type`) -> RBS::Types::t
27
+ def type_1: (t `type`) -> RBS::Types::t
24
28
 
25
- def function_1: (untyped func) -> untyped
29
+ def type_1_opt: (t?) -> RBS::Types::t?
26
30
 
27
- def params: (untyped `type`) -> untyped
31
+ def function_1: (Interface::Function func) -> RBS::Types::Function
28
32
 
29
- def type_param: (untyped type_param) -> untyped
33
+ def params: (RBS::Types::Function `type`) -> Interface::Function::Params
30
34
 
31
- def type_param_1: (untyped type_param) -> untyped
35
+ def type_param: (RBS::AST::TypeParam type_param) -> Interface::TypeParam
32
36
 
33
- def method_type: (RBS::MethodType method_type, self_type: AST::Types::t, method_decls: untyped, ?subst2: Interface::Substitution?) -> Interface::MethodType
34
- | [A] (RBS::MethodType method_type, self_type: AST::Types::t, method_decls: untyped, ?subst2: Interface::Substitution?) { (Interface::MethodType) -> A } -> A
37
+ def type_param_1: (Interface::TypeParam type_param) -> RBS::AST::TypeParam
35
38
 
36
- def method_type_1: (untyped method_type, self_type: untyped) { (untyped) -> untyped } -> untyped
39
+ @method_type_cache: Hash[RBS::MethodType, Interface::MethodType]
37
40
 
38
- class InterfaceCalculationError < StandardError
39
- attr_reader type: untyped
41
+ def method_type: (RBS::MethodType method_type, method_decls: Set[TypeInference::MethodCall::MethodDecl]) -> Interface::MethodType
40
42
 
41
- def initialize: (type: untyped, message: untyped) -> void
42
- end
43
+ def method_type_1: (Interface::MethodType method_type) -> RBS::MethodType
43
44
 
44
45
  def unfold: (RBS::TypeName type_name, Array[t] args) -> t
45
46
 
47
+ # Unfold type alias one step, or returns itself
48
+ #
46
49
  def expand_alias: (t `type`) -> t
47
- | [A] (t) { (t) -> A } -> A
48
50
 
49
- def deep_expand_alias: (t `type`, ?recursive: Set[t]) -> t
50
- | [A] (t `type`, ?recursive: Set[t]) { (t) -> A }-> A
51
+ # Unfold type alias until non alias type
52
+ #
53
+ # * Unions and intersections are expanded
54
+ # * Returns `nil` if it is recursive
55
+ #
56
+ def deep_expand_alias: (t `type`, ?recursive: Set[RBS::TypeName]) -> t?
51
57
 
52
- def flatten_union: (untyped `type`, ?untyped acc) -> untyped
58
+ # Convert union types to array of types
59
+ #
60
+ def flatten_union: (t `type`, ?Array[t] acc) -> Array[t]
53
61
 
54
62
  def unwrap_optional: (Types::t `type`) -> [Types::t, Types::t]
55
63
 
56
- NilClassName: untyped
57
-
58
- def setup_primitives: (untyped method_name, untyped method_def, untyped method_type) -> untyped
64
+ def module_name?: (RBS::TypeName type_name) -> bool
59
65
 
60
- def interface: (untyped `type`, private: untyped, ?self_type: untyped) -> untyped
61
-
62
- def module_name?: (untyped type_name) -> untyped
63
-
64
- def class_name?: (untyped type_name) -> untyped
66
+ def class_name?: (RBS::TypeName type_name) -> bool
65
67
 
66
68
  def env: () -> RBS::Environment
67
69
 
68
- def absolute_type: (untyped `type`, context: untyped) -> untyped
70
+ def absolute_type: (t `type`, context: RBS::Resolver::context) -> t
69
71
 
70
- def absolute_type_name: (untyped type_name, context: untyped) -> untyped
72
+ def absolute_type_name: (RBS::TypeName type_name, context: RBS::Resolver::context) -> RBS::TypeName?
71
73
 
72
74
  def instance_type: (RBS::TypeName type_name, ?args: Array[t]?, ?location: untyped?) -> t
75
+
76
+ def try_singleton_type: (t) -> t?
77
+
78
+ def try_instance_type: (t) -> t?
73
79
  end
74
80
  end
75
81
  end
@@ -23,6 +23,9 @@ module Steep
23
23
  def level: () -> ::Array[0]
24
24
 
25
25
  def with_location: (untyped new_location) -> untyped
26
+
27
+ self.@instance: Instance
28
+ def self.instance: () -> Instance
26
29
  end
27
30
  end
28
31
  end
@@ -8,7 +8,7 @@ module Steep
8
8
 
9
9
  def initialize: (types: untyped, ?location: untyped?) -> void
10
10
 
11
- def self.build: (types: untyped, ?location: untyped?) -> untyped
11
+ def self.build: (types: Array[t], ?location: untyped?) -> t
12
12
 
13
13
  def ==: (untyped other) -> untyped
14
14
 
@@ -8,25 +8,25 @@ module Steep
8
8
 
9
9
  def initialize: (value: untyped, ?location: untyped?) -> void
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) -> self
17
+ def subst: (Interface::Substitution s) -> self
18
18
 
19
- def to_s: () -> untyped
19
+ def to_s: () -> String
20
20
 
21
21
  include Helper::NoFreeVariables
22
22
 
23
23
  include Helper::NoChild
24
24
 
25
- def level: () -> ::Array[0]
25
+ def level: () -> Array[Integer]
26
26
 
27
- def with_location: (untyped new_location) -> untyped
27
+ def with_location: (untyped new_location) -> self
28
28
 
29
- def back_type: () -> untyped
29
+ def back_type: () -> AST::Types::Name::Instance
30
30
  end
31
31
  end
32
32
  end
@@ -5,37 +5,38 @@ module Steep
5
5
  class Base
6
6
  attr_reader location: untyped
7
7
 
8
- attr_reader name: untyped
8
+ attr_reader name: RBS::TypeName
9
9
 
10
- def initialize: (name: untyped, ?location: untyped?) -> void
10
+ def initialize: (name: RBS::TypeName, ?location: untyped?) -> void
11
11
 
12
12
  include Helper::NoFreeVariables
13
13
 
14
- def subst: (untyped s) -> self
14
+ def subst: (Steep::Interface::Substitution s) -> self
15
15
 
16
16
  def level: () -> ::Array[0]
17
17
  end
18
18
 
19
19
  class Applying < Base
20
- attr_reader args: untyped
20
+ attr_reader args: Array[t]
21
21
 
22
- def initialize: (name: untyped, args: untyped, ?location: untyped?) -> void
22
+ def initialize: (name: RBS::TypeName, args: Array[t], ?location: untyped?) -> void
23
23
 
24
- def ==: (untyped other) -> untyped
24
+ def ==: (untyped other) -> bool
25
25
 
26
26
  alias eql? ==
27
27
 
28
- def hash: () -> untyped
28
+ def hash: () -> Integer
29
29
 
30
30
  def to_s: () -> ::String
31
31
 
32
32
  def with_location: (untyped new_location) -> untyped
33
33
 
34
- def subst: (untyped s) -> (untyped | self)
34
+ def subst: (Steep::Interface::Substitution s) -> self
35
35
 
36
- def free_variables: () -> untyped
36
+ def free_variables: () -> Set[Symbol]
37
37
 
38
- def each_child: () ?{ () -> untyped } -> untyped
38
+ def each_child: () { (t) -> void } -> void
39
+ | () -> Enumerator[t, void]
39
40
 
40
41
  include Helper::ChildrenLevel
41
42
 
@@ -43,11 +44,11 @@ module Steep
43
44
  end
44
45
 
45
46
  class Singleton < Base
46
- def ==: (untyped other) -> untyped
47
+ def ==: (untyped other) -> bool
47
48
 
48
49
  alias eql? ==
49
50
 
50
- def hash: () -> untyped
51
+ def hash: () -> Integer
51
52
 
52
53
  def to_s: () -> ::String
53
54
 
@@ -57,7 +58,7 @@ module Steep
57
58
  end
58
59
 
59
60
  class Instance < Applying
60
- def to_module: () -> untyped
61
+ def to_module: () -> Singleton
61
62
  end
62
63
 
63
64
  class Interface < Applying
@@ -6,9 +6,11 @@ module Steep
6
6
 
7
7
  attr_reader type: Interface::Function
8
8
 
9
+ attr_reader self_type: AST::Types::t?
10
+
9
11
  attr_reader block: Interface::Block?
10
12
 
11
- def initialize: (type: Interface::Function, block: Interface::Block?, ?location: untyped) -> void
13
+ def initialize: (type: Interface::Function, self_type: AST::Types::t?, block: Interface::Block?, ?location: untyped) -> void
12
14
 
13
15
  def ==: (untyped other) -> bool
14
16
 
@@ -23,6 +23,9 @@ module Steep
23
23
  def level: () -> ::Array[0]
24
24
 
25
25
  def with_location: (untyped new_location) -> untyped
26
+
27
+ self.@instance: Self
28
+ def self.instance: () -> Self
26
29
  end
27
30
  end
28
31
  end
@@ -16,7 +16,7 @@ module Steep
16
16
 
17
17
  def self.fresh_name: (untyped name) -> untyped
18
18
 
19
- def self.fresh: (untyped name, ?location: untyped?) -> untyped
19
+ def self.fresh: (Symbol name, ?location: untyped?) -> Var
20
20
 
21
21
  def to_s: () -> untyped
22
22
 
@@ -44,53 +44,51 @@ module Steep
44
44
  end
45
45
 
46
46
  class UnexpectedPositionalArgument < Base
47
- attr_reader node: untyped
48
-
49
- attr_reader method_type: untyped
47
+ # Node of argument
48
+ attr_reader node (): Parser::AST::Node
50
49
 
51
- attr_reader method_name: untyped
50
+ attr_reader params: Interface::Function::Params
52
51
 
53
- def initialize: (node: untyped, method_name: untyped, method_type: untyped) -> void
52
+ def initialize: (node: Parser::AST::Node, params: Interface::Function::Params) -> void
54
53
 
55
- def header_line: () -> "Unexpected positional argument"
54
+ def header_line: () -> String
56
55
  end
57
56
 
58
57
  class InsufficientPositionalArguments < Base
59
- attr_reader node: untyped
60
-
61
- attr_reader method_name: untyped
58
+ # Send/csend node for method calls without blocks
59
+ # block/numblock node for method calls with blocks
60
+ attr_reader node (): Parser::AST::Node
62
61
 
63
- attr_reader method_type: untyped
62
+ attr_reader params: Interface::Function::Params
64
63
 
65
- def initialize: (node: untyped, method_name: untyped, method_type: untyped) -> void
64
+ def initialize: (node: Parser::AST::Node, params: Interface::Function::Params) -> void
66
65
 
67
- def header_line: () -> "More positional arguments are required"
66
+ def header_line: () -> String
68
67
  end
69
68
 
70
69
  class UnexpectedKeywordArgument < Base
71
- attr_reader node: untyped
70
+ # pair/kwsplat node
71
+ attr_reader node (): Parser::AST::Node
72
72
 
73
- attr_reader method_name: untyped
74
-
75
- attr_reader method_type: untyped
73
+ attr_reader params: Interface::Function::Params
76
74
 
77
- def initialize: (node: untyped, method_name: untyped, method_type: untyped) -> void
75
+ def initialize: (node: Parser::AST::Node, params: Interface::Function::Params) -> void
78
76
 
79
- def header_line: () -> "Unexpected keyword argument"
77
+ def header_line: () -> String
80
78
  end
81
79
 
82
80
  class InsufficientKeywordArguments < Base
83
- attr_reader node: untyped
81
+ # Send/csend node for method calls without blocks
82
+ # block/numblock node for method calls with blocks
83
+ attr_reader node (): Parser::AST::Node
84
84
 
85
- attr_reader method_name: untyped
85
+ attr_reader params: Interface::Function::Params
86
86
 
87
- attr_reader method_type: untyped
87
+ attr_reader missing_keywords: Array[Symbol]
88
88
 
89
- attr_reader missing_keywords: untyped
89
+ def initialize: (node: Parser::AST::Node, params: Interface::Function::Params, missing_keywords: Array[Symbol]) -> void
90
90
 
91
- def initialize: (node: untyped, method_name: untyped, method_type: untyped, missing_keywords: untyped) -> void
92
-
93
- def header_line: () -> ::String
91
+ def header_line: () -> String
94
92
  end
95
93
 
96
94
  class UnresolvedOverloading < Base
@@ -110,19 +108,17 @@ module Steep
110
108
  end
111
109
 
112
110
  class ArgumentTypeMismatch < Base
113
- attr_reader node: untyped
114
-
115
- attr_reader expected: untyped
111
+ attr_reader node (): Parser::AST::Node
116
112
 
117
- attr_reader actual: untyped
113
+ attr_reader expected: AST::Types::t
118
114
 
119
- attr_reader receiver_type: untyped
115
+ attr_reader actual: AST::Types::t
120
116
 
121
- attr_reader result: untyped
117
+ attr_reader result: Subtyping::Result::t
122
118
 
123
119
  include ResultPrinter
124
120
 
125
- def initialize: (node: untyped, receiver_type: untyped, expected: untyped, actual: untyped, result: untyped) -> void
121
+ def initialize: (node: Parser::AST::Node, expected: AST::Types::t, actual: AST::Types::t, result: Subtyping::Result::t) -> void
126
122
 
127
123
  def header_line: () -> ::String
128
124
  end
@@ -302,9 +298,9 @@ module Steep
302
298
  end
303
299
 
304
300
  class UnexpectedSuper < Base
305
- attr_reader method: untyped
301
+ attr_reader method: Symbol?
306
302
 
307
- def initialize: (node: untyped, method: untyped) -> void
303
+ def initialize: (node: Parser::AST::Node, method: Symbol?) -> void
308
304
 
309
305
  def header_line: () -> ::String
310
306
  end