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
@@ -2,21 +2,28 @@ module Steep
2
2
  module TypeInference
3
3
  class Context
4
4
  class MethodContext
5
- attr_reader name: untyped
5
+ attr_reader name: Symbol?
6
6
 
7
- attr_reader method: untyped
7
+ attr_reader method: RBS::Definition::Method?
8
8
 
9
- attr_reader method_type: untyped
9
+ attr_reader method_type: Interface::MethodType?
10
10
 
11
- attr_reader return_type: untyped
11
+ attr_reader return_type: AST::Types::t
12
12
 
13
- attr_reader constructor: untyped
13
+ attr_reader constructor: bool
14
14
 
15
- attr_reader super_method: untyped
15
+ attr_reader super_method: RBS::Definition::Method?
16
16
 
17
- def initialize: (name: untyped, method: untyped, method_type: untyped, return_type: untyped, constructor: untyped, super_method: untyped) -> void
17
+ def initialize: (
18
+ name: Symbol,
19
+ method: RBS::Definition::Method?,
20
+ method_type: Interface::MethodType?,
21
+ return_type: AST::Types::t,
22
+ constructor: bool,
23
+ super_method: RBS::Definition::Method?
24
+ ) -> void
18
25
 
19
- def block_type: () -> untyped
26
+ def block_type: () -> Interface::Block?
20
27
  end
21
28
 
22
29
  class BlockContext
@@ -62,15 +69,33 @@ module Steep
62
69
 
63
70
  attr_reader class_name: RBS::TypeName
64
71
 
65
- attr_reader instance_definition: RBS::Definition
66
-
67
- attr_reader module_definition: RBS::Definition
68
-
69
- def initialize: (instance_type: untyped, module_type: untyped, implement_name: untyped, class_name: untyped, nesting: untyped, ?instance_definition: untyped?, ?module_definition: untyped?) -> void
70
-
71
- def class_variables: () -> (untyped | nil)
72
-
73
- def update: (?instance_type: untyped, ?module_type: untyped, ?implement_name: untyped, ?class_name: untyped, ?instance_definition: untyped, ?module_definition: untyped, ?nesting: untyped) -> untyped
72
+ attr_reader instance_definition: RBS::Definition?
73
+
74
+ attr_reader module_definition: RBS::Definition?
75
+
76
+ @class_variables: Hash[Symbol, RBS::Types::t]?
77
+
78
+ def initialize: (
79
+ instance_type: AST::Types::t,
80
+ module_type: AST::Types::t,
81
+ implement_name: untyped,
82
+ class_name: RBS::TypeName,
83
+ nesting: RBS::Resolver::context,
84
+ ?instance_definition: RBS::Definition?,
85
+ ?module_definition: RBS::Definition?
86
+ ) -> void
87
+
88
+ def class_variables: () -> Hash[Symbol, RBS::Types::t]?
89
+
90
+ def update: (
91
+ ?instance_type: AST::Types::t,
92
+ ?module_type: AST::Types::t,
93
+ ?implement_name: untyped,
94
+ ?class_name: RBS::TypeName,
95
+ ?instance_definition: RBS::Definition?,
96
+ ?module_definition: RBS::Definition?,
97
+ ?nesting: RBS::Resolver::context
98
+ ) -> ModuleContext
74
99
  end
75
100
 
76
101
  class TypeVariableContext
@@ -99,7 +124,7 @@ module Steep
99
124
 
100
125
  attr_reader break_context: BreakContext?
101
126
 
102
- attr_reader module_context: untyped
127
+ attr_reader module_context: ModuleContext?
103
128
 
104
129
  attr_reader self_type: AST::Types::t
105
130
 
@@ -111,7 +136,7 @@ module Steep
111
136
  method_context: untyped,
112
137
  block_context: BlockContext?,
113
138
  break_context: BreakContext?,
114
- module_context: untyped,
139
+ module_context: ModuleContext?,
115
140
  self_type: untyped,
116
141
  type_env: TypeEnv,
117
142
  call_context: untyped,
@@ -122,7 +147,7 @@ module Steep
122
147
  ?method_context: untyped,
123
148
  ?block_context: BlockContext?,
124
149
  ?break_context: BreakContext?,
125
- ?module_context: untyped,
150
+ ?module_context: ModuleContext?,
126
151
  ?self_type: untyped,
127
152
  ?type_env: TypeEnv,
128
153
  ?call_context: untyped,
@@ -0,0 +1,37 @@
1
+ module Steep
2
+ module TypeInference
3
+ class ContextArray
4
+ class Entry
5
+ attr_reader range: untyped
6
+
7
+ attr_reader context: untyped
8
+
9
+ attr_reader sub_entries: untyped
10
+
11
+ def initialize: (range: untyped, context: untyped) -> void
12
+ end
13
+
14
+ attr_reader buffer: untyped
15
+
16
+ attr_reader root: untyped
17
+
18
+ def initialize: (buffer: untyped, context: untyped, ?range: untyped) -> void
19
+
20
+ def range: () -> untyped
21
+
22
+ def self.from_source: (source: untyped, ?range: untyped?, ?context: untyped?) -> untyped
23
+
24
+ def insert_context: (untyped range, context: untyped, ?entry: untyped) -> untyped
25
+
26
+ def each_entry: () { (untyped) -> untyped } -> untyped
27
+
28
+ def context_at: (untyped index, ?entry: untyped) -> (nil | untyped)
29
+
30
+ def []: (untyped index) -> untyped
31
+
32
+ def at: (line: untyped, column: untyped) -> untyped
33
+
34
+ def merge: (untyped subtree) -> untyped
35
+ end
36
+ end
37
+ end
@@ -7,7 +7,9 @@ module Steep
7
7
 
8
8
  attr_reader factory (): AST::Types::Factory
9
9
 
10
- def initialize: (subtyping: Subtyping::Check, typing: Typing) -> void
10
+ attr_reader config: Interface::Builder::Config
11
+
12
+ def initialize: (subtyping: Subtyping::Check, typing: Typing, config: Interface::Builder::Config) -> void
11
13
 
12
14
  def eval: (env: TypeEnv, node: Parser::AST::Node) -> [TypeEnv, TypeEnv, Set[Symbol | Parser::AST::Node], AST::Types::t, AST::Types::t]
13
15
 
@@ -45,7 +45,7 @@ module Steep
45
45
  alias eql? ==
46
46
 
47
47
  def hash: () -> Integer
48
-
48
+
49
49
  def var_type: () -> AST::Types::t
50
50
  end
51
51
 
@@ -58,23 +58,27 @@ module Steep
58
58
  end
59
59
 
60
60
  class BlockParameter
61
- attr_reader name: untyped
61
+ attr_reader name: Symbol
62
62
 
63
- attr_reader type: untyped
63
+ attr_reader type: Interface::Function?
64
+
65
+ attr_reader node: Parser::AST::Node
64
66
 
65
- attr_reader node: untyped
67
+ attr_reader self_type: AST::Types::t?
66
68
 
67
- def initialize: (name: untyped, type: untyped, node: untyped, optional: untyped) -> void
69
+ def initialize: (name: Symbol, type: Interface::Function?, node: Parser::AST::Node, optional: boolish, self_type: AST::Types::t?) -> void
68
70
 
69
- def optional?: () -> (true | false)
71
+ @optional: boolish
72
+
73
+ def optional?: () -> bool
70
74
 
71
75
  def var_type: () -> AST::Types::t
72
76
 
73
- def ==: (untyped other) -> untyped
77
+ def ==: (untyped other) -> bool
74
78
 
75
79
  alias eql? ==
76
80
 
77
- def hash: () -> untyped
81
+ def hash: () -> Integer
78
82
  end
79
83
 
80
84
  attr_reader args: untyped
@@ -94,7 +98,7 @@ module Steep
94
98
  def each_param: () { (BaseParameter | BaseRestParameter | BlockParameter) -> void } -> void
95
99
  | () -> Enumerator[BaseParameter | BaseRestParameter | BlockParameter, void]
96
100
 
97
- def each: () { (Symbol, BaseRestParameter | BaseRestParameter | BlockParameter) -> void } -> void
101
+ def each: () { (Symbol, AST::Types::t) -> void } -> void
98
102
 
99
103
  def self.empty: (node: Parser::AST::Node) -> MethodParams
100
104
 
@@ -0,0 +1,229 @@
1
+ module Steep
2
+ module TypeInference
3
+ class SendArgs
4
+ class PositionalArgs
5
+ class NodeParamPair
6
+ attr_reader node: Parser::AST::Node
7
+
8
+ attr_reader param: Interface::Function::Params::PositionalParams::param
9
+
10
+ def initialize: (node: Parser::AST::Node, param: Interface::Function::Params::PositionalParams::param) -> void
11
+
12
+ include Equatable
13
+
14
+ def to_ary: () -> [Parser::AST::Node, Interface::Function::Params::t]
15
+ end
16
+
17
+ class NodeTypePair
18
+ attr_reader node: Parser::AST::Node
19
+
20
+ attr_reader type: AST::Types::t
21
+
22
+ def initialize: (node: Parser::AST::Node, type: AST::Types::t) -> void
23
+
24
+ include Equatable
25
+
26
+ def node_type: () -> AST::Types::t
27
+ end
28
+
29
+ class SplatArg
30
+ attr_reader node: Parser::AST::Node
31
+
32
+ attr_accessor type: AST::Types::t?
33
+
34
+ def initialize: (node: Parser::AST::Node) -> void
35
+
36
+ include Equatable
37
+ end
38
+
39
+ class UnexpectedArg
40
+ attr_reader node: Parser::AST::Node
41
+
42
+ def initialize: (node: Parser::AST::Node) -> void
43
+
44
+ include Equatable
45
+ end
46
+
47
+ class MissingArg
48
+ attr_reader params: Interface::Function::Params::PositionalParams?
49
+
50
+ def initialize: (params: Interface::Function::Params::PositionalParams?) -> void
51
+
52
+ include Equatable
53
+ end
54
+
55
+ type arg = NodeParamPair | NodeTypePair | SplatArg | UnexpectedArg | MissingArg
56
+
57
+ attr_reader args: Array[Parser::AST::Node]
58
+
59
+ attr_reader index: Integer
60
+
61
+ attr_reader positional_params: Interface::Function::Params::PositionalParams?
62
+
63
+ attr_reader uniform: bool
64
+
65
+ def initialize: (args: Array[Parser::AST::Node], index: Integer, positional_params: Interface::Function::Params::PositionalParams?, ?uniform: bool) -> void
66
+
67
+ %a{pure} def node: () -> Parser::AST::Node?
68
+
69
+ def following_args: () -> Array[Parser::AST::Node]
70
+
71
+ def param: () -> Interface::Function::Params::PositionalParams::param?
72
+
73
+ def update: (?index: Integer, ?positional_params: Interface::Function::Params::PositionalParams?, ?uniform: bool) -> PositionalArgs
74
+
75
+ def next: () -> [arg, PositionalArgs]?
76
+
77
+ def uniform_type: () -> AST::Types::t?
78
+
79
+ def consume: (Integer n, node: Parser::AST::Node) -> [
80
+ UnexpectedArg | Array[Interface::Function::Params::PositionalParams::param] | nil,
81
+ PositionalArgs
82
+ ]
83
+
84
+ def consume0: (
85
+ Integer n,
86
+ node: Parser::AST::Node,
87
+ params: Interface::Function::Params::PositionalParams?,
88
+ ps: Array[Interface::Function::Params::PositionalParams::param]
89
+ ) -> (Interface::Function::Params::PositionalParams | UnexpectedArg | nil)
90
+ end
91
+
92
+ class KeywordArgs
93
+ class ArgTypePairs
94
+ attr_reader pairs: Array[untyped]
95
+
96
+ def initialize: (pairs: Array[untyped]) -> void
97
+
98
+ include Equatable
99
+
100
+ def []: (Integer index) -> untyped
101
+
102
+ def size: () -> Integer
103
+ end
104
+
105
+ class SplatArg
106
+ attr_reader node: Parser::AST::Node
107
+
108
+ attr_accessor type: AST::Types::t?
109
+
110
+ def initialize: (node: Parser::AST::Node) -> void
111
+
112
+ include Equatable
113
+ end
114
+
115
+ class UnexpectedKeyword
116
+ attr_reader keyword: Symbol?
117
+
118
+ attr_reader node: Parser::AST::Node
119
+
120
+ include Equatable
121
+
122
+ def initialize: (keyword: Symbol?, node: Parser::AST::Node) -> void
123
+
124
+ def key_node: () -> Parser::AST::Node?
125
+
126
+ def value_node: () -> Parser::AST::Node?
127
+ end
128
+
129
+ class MissingKeyword
130
+ attr_reader keywords: Set[Symbol]
131
+
132
+ include Equatable
133
+
134
+ def initialize: (keywords: Set[Symbol]) -> void
135
+ end
136
+
137
+ type arg = ArgTypePairs | SplatArg | UnexpectedKeyword | MissingKeyword
138
+
139
+ attr_reader kwarg_nodes: Array[Parser::AST::Node]
140
+
141
+ attr_reader keyword_params: Interface::Function::Params::KeywordParams
142
+
143
+ attr_reader index: Integer
144
+
145
+ attr_reader consumed_keywords: Set[Symbol]
146
+
147
+ def initialize: (
148
+ kwarg_nodes: Array[Parser::AST::Node],
149
+ keyword_params: Interface::Function::Params::KeywordParams,
150
+ ?index: ::Integer,
151
+ ?consumed_keywords: Set[Symbol]
152
+ ) -> void
153
+
154
+ def update: (?index: Integer, ?consumed_keywords: Set[Symbol]) -> KeywordArgs
155
+
156
+ def keyword_pair: () -> Parser::AST::Node?
157
+
158
+ def required_keywords: () -> Hash[Symbol, AST::Types::t]
159
+
160
+ def optional_keywords: () -> Hash[Symbol, AST::Types::t]
161
+
162
+ %a{pure} def rest_type: () -> AST::Types::t?
163
+
164
+ def keyword_type: (Symbol key) -> AST::Types::t?
165
+
166
+ def all_keys: () -> Array[Symbol]
167
+
168
+ def all_values: () -> Array[AST::Types::t]
169
+
170
+ def possible_key_type: () -> AST::Types::t
171
+
172
+ def possible_value_type: () -> AST::Types::t
173
+
174
+ def next: () -> [arg, KeywordArgs]?
175
+
176
+ def consume_keys: (Array[Symbol] keys, node: Parser::AST::Node) -> [UnexpectedKeyword | Array[AST::Types::t], KeywordArgs]
177
+ end
178
+
179
+ class BlockPassArg
180
+ attr_reader node: Parser::AST::Node?
181
+
182
+ attr_reader block: Interface::Block?
183
+
184
+ def initialize: (node: Parser::AST::Node?, block: Interface::Block?) -> void
185
+
186
+ include Equatable
187
+
188
+ def no_block?: () -> bool
189
+
190
+ def compatible?: () -> bool
191
+
192
+ def block_missing?: () -> boolish
193
+
194
+ def unexpected_block?: () -> boolish
195
+
196
+ def pair: () -> [Parser::AST::Node, Interface::Function]?
197
+
198
+ def node_type: () -> AST::Types::t
199
+ end
200
+
201
+ attr_reader node: Parser::AST::Node
202
+
203
+ attr_reader arguments: Array[Parser::AST::Node]
204
+
205
+ attr_reader type: Interface::MethodType | AST::Types::Proc
206
+
207
+ def initialize: (node: Parser::AST::Node, arguments: Array[Parser::AST::Node], type: Interface::MethodType | AST::Types::Proc) -> void
208
+
209
+ attr_reader params (): Interface::Function::Params
210
+
211
+ attr_reader block (): Interface::Block?
212
+
213
+ def positional_params: () -> Interface::Function::Params::PositionalParams?
214
+
215
+ def keyword_params: () -> Interface::Function::Params::KeywordParams
216
+
217
+ def kwargs_node: () -> Parser::AST::Node?
218
+
219
+ def positional_arg: () -> PositionalArgs
220
+
221
+ def keyword_args: () -> KeywordArgs
222
+
223
+ def block_pass_arg: () -> BlockPassArg
224
+
225
+ def each: () { (PositionalArgs::arg | KeywordArgs::arg) -> void } -> Array[Diagnostic::Ruby::Base]
226
+ | () -> Enumerator[PositionalArgs::arg | KeywordArgs::arg, Array[Diagnostic::Ruby::Base]]
227
+ end
228
+ end
229
+ end
@@ -69,7 +69,7 @@ module Steep
69
69
 
70
70
  attr_reader commands: Array[Command::_Base]
71
71
 
72
- def initialize: (*Command::_Base) -> void
72
+ def initialize: (*Command::_Base?) -> void
73
73
 
74
74
  def build: (TypeEnv) -> TypeEnv
75
75
  end
data/sig/steep/typing.rbs CHANGED
@@ -10,11 +10,11 @@ module Steep
10
10
 
11
11
  attr_reader source: Source
12
12
 
13
- attr_reader errors: untyped
13
+ attr_reader errors: Array[Diagnostic::Ruby::Base]
14
14
 
15
- attr_reader typing: untyped
15
+ attr_reader typing: Hash[Parser::AST::Node, AST::Types::t]
16
16
 
17
- attr_reader parent: untyped
17
+ attr_reader parent: Typing?
18
18
 
19
19
  attr_reader parent_last_update: untyped
20
20
 
@@ -32,7 +32,7 @@ module Steep
32
32
 
33
33
  def initialize: (source: untyped, root_context: untyped, ?parent: untyped?, ?parent_last_update: untyped, ?contexts: untyped?, ?source_index: untyped?) -> void
34
34
 
35
- def add_error: (untyped error) -> untyped
35
+ def add_error: (Diagnostic::Ruby::Base error) -> void
36
36
 
37
37
  def add_typing: (Parser::AST::Node node, AST::Types::t `type`, TypeInference::Context _context) -> untyped
38
38
 
data/sig/steep.rbs CHANGED
@@ -1,5 +1,5 @@
1
1
  module Steep
2
- def self.logger: () -> Logger
2
+ def self.logger: () -> (Logger & ActiveSupport::TaggedLogging)
3
3
 
4
4
  def self.new_logger: (untyped output, untyped prev_level) -> untyped
5
5
 
@@ -7,10 +7,12 @@ module Steep
7
7
 
8
8
  def self.log_output=: (untyped output) -> untyped
9
9
 
10
- def self.measure: (untyped message, ?level: ::Symbol) { () -> untyped } -> untyped
10
+ def self.measure: [A] (String message, ?level: ::Symbol) { () -> A } -> A
11
11
 
12
12
  def self.log_error: (untyped exn, ?message: ::String) -> untyped
13
13
 
14
+ self.@logger: ActiveSupport::TaggedLogging?
15
+
14
16
  class Sampler
15
17
  def initialize: () -> void
16
18
 
data/smoke/block/e.rb ADDED
@@ -0,0 +1,12 @@
1
+ 123.instance_eval do
2
+ self - 1
3
+ end
4
+
5
+ b = BlockWithSelf.new.instance_exec do
6
+ @name = ""
7
+ @id = 123
8
+ end
9
+
10
+ [1, ""][0].instance_eval do
11
+ foo()
12
+ end
data/smoke/block/e.rbs ADDED
@@ -0,0 +1,4 @@
1
+ class BlockWithSelf
2
+ @name: String
3
+ @id: Integer
4
+ end
@@ -123,3 +123,15 @@
123
123
  def map: [U] () { (::Integer) -> U } -> ::Array[U]
124
124
  | () -> ::Enumerator[::Integer, ::Array[untyped]]
125
125
  code: Ruby::UnresolvedOverloading
126
+ - file: e.rb
127
+ diagnostics:
128
+ - range:
129
+ start:
130
+ line: 11
131
+ character: 2
132
+ end:
133
+ line: 11
134
+ character: 5
135
+ severity: ERROR
136
+ message: Type `(::Integer | ::String)` does not have method `foo`
137
+ code: Ruby::NoMethod
@@ -0,0 +1,7 @@
1
+ # @type var a: Array[BlockParamSplit::pair[Integer, String]]
2
+ a = [[1, "a"]]
3
+
4
+ a.each do |x, y|
5
+ x + 1
6
+ y + "2"
7
+ end
@@ -0,0 +1,3 @@
1
+ module BlockParamSplit
2
+ type pair[T, S] = [T, S]
3
+ end
@@ -0,0 +1,5 @@
1
+ class EmptyYield
2
+ def foo
3
+ yield
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ class EmptyYield
2
+ def foo: () { (Integer) -> void } -> void
3
+ end
@@ -11,6 +11,18 @@
11
11
  severity: ERROR
12
12
  message: 'Cannot find the declaration of class: `Foo`'
13
13
  code: Ruby::UnknownConstant
14
+ - file: empty_yield.rb
15
+ diagnostics:
16
+ - range:
17
+ start:
18
+ line: 3
19
+ character: 4
20
+ end:
21
+ line: 3
22
+ character: 9
23
+ severity: ERROR
24
+ message: More positional arguments are required
25
+ code: Ruby::InsufficientPositionalArguments
14
26
  - file: hash.rb
15
27
  diagnostics:
16
28
  - range:
@@ -35,11 +35,11 @@
35
35
  character: 11
36
36
  severity: ERROR
37
37
  message: |-
38
- Cannot assign a value of type `::String` to an expression of type `::Integer`
38
+ Cannot pass a value of type `::String` as an argument of type `::Integer`
39
39
  ::String <: ::Integer
40
40
  ::Object <: ::Integer
41
41
  ::BasicObject <: ::Integer
42
- code: Ruby::IncompatibleAssignment
42
+ code: Ruby::ArgumentTypeMismatch
43
43
  - range:
44
44
  start:
45
45
  line: 13
@@ -81,8 +81,8 @@
81
81
  character: 12
82
82
  severity: ERROR
83
83
  message: |-
84
- Cannot assign a value of type `::String` to an expression of type `::Integer`
84
+ Cannot pass a value of type `::String` as an argument of type `::Integer`
85
85
  ::String <: ::Integer
86
86
  ::Object <: ::Integer
87
87
  ::BasicObject <: ::Integer
88
- code: Ruby::IncompatibleAssignment
88
+ code: Ruby::ArgumentTypeMismatch
data/steep.gemspec CHANGED
@@ -33,7 +33,8 @@ Gem::Specification.new do |spec|
33
33
  spec.add_runtime_dependency "rainbow", ">= 2.2.2", "< 4.0"
34
34
  spec.add_runtime_dependency "listen", "~> 3.0"
35
35
  spec.add_runtime_dependency "language_server-protocol", ">= 3.15", "< 4.0"
36
- spec.add_runtime_dependency "rbs", ">= 2.3.2"
36
+ spec.add_runtime_dependency "rbs", ">= 2.7.0.pre"
37
37
  spec.add_runtime_dependency "parallel", ">= 1.0.0"
38
38
  spec.add_runtime_dependency "terminal-table", ">= 2", "< 4"
39
+ spec.add_runtime_dependency "securerandom", ">= 0.1"
39
40
  end