steep 1.9.4 → 1.10.0.dev.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.
@@ -155,7 +155,6 @@ module Steep
155
155
  definition.methods[method_name]&.yield_self do |method|
156
156
  method.method_types
157
157
  .map {|method_type| checker.factory.method_type(method_type) }
158
- .select {|method_type| method_type.is_a?(Interface::MethodType) }
159
158
  .inject {|t1, t2| t1 + t2}
160
159
  end
161
160
  end
@@ -163,6 +162,18 @@ module Steep
163
162
 
164
163
  method_type = annotation_method_type || definition_method_type
165
164
 
165
+ unless method_type
166
+ if definition
167
+ typing.add_error(
168
+ Diagnostic::Ruby::UndeclaredMethodDefinition.new(method_name: method_name, type_name: definition.type_name, node: node)
169
+ )
170
+ else
171
+ typing.add_error(
172
+ Diagnostic::Ruby::MethodDefinitionInUndeclaredModule.new(method_name: method_name, node: node)
173
+ )
174
+ end
175
+ end
176
+
166
177
  if (annotation_return_type = annots&.return_type) && (method_type_return_type = method_type&.type&.return_type)
167
178
  check_relation(sub_type: annotation_return_type, super_type: method_type_return_type).else do |result|
168
179
  typing.add_error(
@@ -1483,6 +1494,10 @@ module Steep
1483
1494
  Diagnostic::Ruby::UnknownConstant.new(node: name_node, name: name_node.children[1]).class!
1484
1495
  )
1485
1496
  end
1497
+
1498
+ if class_name
1499
+ check_deprecation_constant(class_name, name_node, name_node.location.expression)
1500
+ end
1486
1501
  else
1487
1502
  _, constr = synthesize(name_node)
1488
1503
  end
@@ -1538,6 +1553,10 @@ module Steep
1538
1553
  _, constr, module_name = synthesize_constant_decl(name_node, name_node.children[0], name_node.children[1]) do
1539
1554
  typing.add_error Diagnostic::Ruby::UnknownConstant.new(node: name_node, name: name_node.children[1]).module!
1540
1555
  end
1556
+
1557
+ if module_name
1558
+ check_deprecation_constant(module_name, name_node, name_node.location.expression)
1559
+ end
1541
1560
  else
1542
1561
  _, constr = synthesize(name_node)
1543
1562
  end
@@ -1608,6 +1627,7 @@ module Steep
1608
1627
 
1609
1628
  if name
1610
1629
  typing.source_index.add_reference(constant: name, ref: node)
1630
+ constr.check_deprecation_constant(name, node, node.location.expression)
1611
1631
  end
1612
1632
 
1613
1633
  Pair.new(type: type, constr: constr)
@@ -1626,6 +1646,8 @@ module Steep
1626
1646
 
1627
1647
  if constant_name
1628
1648
  typing.source_index.add_definition(constant: constant_name, definition: node)
1649
+ location = node.location #: Parser::Source::Map & Parser::AST::_Variable
1650
+ constr.check_deprecation_constant(constant_name, node, location.name)
1629
1651
  end
1630
1652
 
1631
1653
  value_type, constr = constr.synthesize(node.children.last, hint: constant_type)
@@ -2015,8 +2037,8 @@ module Steep
2015
2037
  branch_result =
2016
2038
  if body
2017
2039
  when_clause_constr
2018
- .for_branch(body)
2019
2040
  .update_type_env {|env| env.join(*body_envs) }
2041
+ .for_branch(body)
2020
2042
  .tap {|constr| typing.cursor_context.set_node_context(body, constr.context) }
2021
2043
  .synthesize(body, hint: hint)
2022
2044
  else
@@ -2040,14 +2062,16 @@ module Steep
2040
2062
 
2041
2063
  if els
2042
2064
  branch_results << condition_constr.synthesize(els, hint: hint)
2065
+ else
2066
+ branch_results << Pair.new(type: AST::Builtin.nil_type, constr: condition_constr)
2067
+ end
2068
+
2069
+ branch_results.reject! do |result|
2070
+ result.type.is_a?(AST::Types::Bot)
2043
2071
  end
2044
2072
 
2045
2073
  types = branch_results.map(&:type)
2046
2074
  envs = branch_results.map {|result| result.constr.context.type_env }
2047
-
2048
- unless els
2049
- types << AST::Builtin.nil_type
2050
- end
2051
2075
  end
2052
2076
 
2053
2077
  constr = constr.update_type_env do |env|
@@ -2387,6 +2411,9 @@ module Steep
2387
2411
  lhs_type = context.type_env[name]
2388
2412
  rhs_type, constr = synthesize(rhs, hint: lhs_type).to_ary
2389
2413
 
2414
+ location = node.location #: Parser::Source::Map & Parser::AST::_Variable
2415
+ constr.check_deprecation_global(name, node, location.name)
2416
+
2390
2417
  type, constr = constr.gvasgn(node, rhs_type)
2391
2418
 
2392
2419
  constr.add_typing(node, type: type)
@@ -2395,6 +2422,9 @@ module Steep
2395
2422
  when :gvar
2396
2423
  yield_self do
2397
2424
  name = node.children.first
2425
+
2426
+ check_deprecation_global(name, node, node.location.expression)
2427
+
2398
2428
  if type = context.type_env[name]
2399
2429
  add_typing(node, type: type)
2400
2430
  else
@@ -2943,7 +2973,7 @@ module Steep
2943
2973
  nil
2944
2974
  ]
2945
2975
  else
2946
- # No neesting
2976
+ # No nesting
2947
2977
  synthesize_constant(node, nil, constant_name, &block)
2948
2978
  end
2949
2979
  end
@@ -3207,6 +3237,18 @@ module Steep
3207
3237
  end
3208
3238
  end
3209
3239
 
3240
+ def deprecated_send?(call)
3241
+ return unless call.node.type == :send || call.node.type == :csend
3242
+
3243
+ call.method_decls.each do |decl|
3244
+ if pair = AnnotationsHelper.deprecated_annotation?(decl.method_def.each_annotation.to_a)
3245
+ return pair
3246
+ end
3247
+ end
3248
+
3249
+ nil
3250
+ end
3251
+
3210
3252
  def type_send_interface(node, interface:, receiver:, receiver_type:, method_name:, arguments:, block_params:, block_body:, tapp:, hint:)
3211
3253
  method = interface.methods[method_name]
3212
3254
 
@@ -3260,6 +3302,20 @@ module Steep
3260
3302
  end
3261
3303
  end
3262
3304
  end
3305
+
3306
+ if (_, message = deprecated_send?(call))
3307
+ send_node, _ = deconstruct_sendish_and_block_nodes(node)
3308
+ send_node or raise
3309
+ _, _, _, loc = deconstruct_send_node!(send_node)
3310
+
3311
+ constr.typing.add_error(
3312
+ Diagnostic::Ruby::DeprecatedReference.new(
3313
+ node: node,
3314
+ location: loc.selector,
3315
+ message: message
3316
+ )
3317
+ )
3318
+ end
3263
3319
  end
3264
3320
 
3265
3321
  if node.type == :csend || ((node.type == :block || node.type == :numblock) && node.children[0].type == :csend)
@@ -4440,7 +4496,7 @@ module Steep
4440
4496
 
4441
4497
  param_types = param_types_hash.each.with_object({}) do |pair, hash| #$ Hash[Symbol, [AST::Types::t, AST::Types::t?]]
4442
4498
  name, type = pair
4443
- # skip unamed arguments `*`, `**` and `&`
4499
+ # skip unnamed arguments `*`, `**` and `&`
4444
4500
  next if name.nil?
4445
4501
  hash[name] = [type, nil]
4446
4502
  end
@@ -5166,5 +5222,43 @@ module Steep
5166
5222
  end
5167
5223
  end
5168
5224
  end
5225
+
5226
+ def check_deprecation_global(name, node, location)
5227
+ if global_entry = checker.factory.env.global_decls[name]
5228
+ if (_, message = AnnotationsHelper.deprecated_annotation?(global_entry.decl.annotations))
5229
+ typing.add_error(
5230
+ Diagnostic::Ruby::DeprecatedReference.new(
5231
+ node: node,
5232
+ location: location,
5233
+ message: message
5234
+ )
5235
+ )
5236
+ end
5237
+ end
5238
+ end
5239
+
5240
+ def check_deprecation_constant(name, node, location)
5241
+ entry = checker.builder.factory.env.constant_entry(name)
5242
+
5243
+ annotations =
5244
+ case entry
5245
+ when RBS::Environment::ModuleEntry, RBS::Environment::ClassEntry
5246
+ entry.decls.flat_map { _1.decl.annotations }
5247
+ when RBS::Environment::ConstantEntry, RBS::Environment::ClassAliasEntry, RBS::Environment::ModuleAliasEntry
5248
+ entry.decl.annotations
5249
+ end
5250
+
5251
+ if annotations
5252
+ if (_, message = AnnotationsHelper.deprecated_annotation?(annotations))
5253
+ typing.add_error(
5254
+ Diagnostic::Ruby::DeprecatedReference.new(
5255
+ node: node,
5256
+ location: location,
5257
+ message: message
5258
+ )
5259
+ )
5260
+ end
5261
+ end
5262
+ end
5169
5263
  end
5170
5264
  end
@@ -243,6 +243,8 @@ module Steep
243
243
  end
244
244
  end
245
245
 
246
+ results.reject! { _1.type.is_a?(AST::Types::Bot) }
247
+
246
248
  types = results.map {|result| result.type }
247
249
  envs = results.map {|result| result.env }
248
250
 
@@ -169,6 +169,14 @@ module Steep
169
169
  return [truthy_result, falsy_result]
170
170
  end
171
171
  else
172
+ receiver, *_ = node.children
173
+ receiver_type = typing.type_of(node: receiver) if receiver
174
+
175
+ if env[receiver] && receiver_type.is_a?(AST::Types::Union)
176
+ result = evaluate_union_method_call(node: node, env: env, receiver: receiver, receiver_type: receiver_type)
177
+ return result if result
178
+ end
179
+
172
180
  if env[node]
173
181
  truthy_type, falsy_type = factory.partition_union(type)
174
182
 
@@ -408,6 +416,48 @@ module Steep
408
416
  end
409
417
  end
410
418
 
419
+ def evaluate_union_method_call(node:, env:, receiver:, receiver_type:)
420
+ call_type = typing.call_of(node: node) rescue nil
421
+ return unless call_type.is_a?(Steep::TypeInference::MethodCall::Typed)
422
+
423
+ truthy_types = [] #: Array[AST::Types::t]
424
+ falsy_types = [] #: Array[AST::Types::t]
425
+
426
+ receiver_type.types.each do |type|
427
+ if shape = subtyping.builder.shape(type, config)
428
+ method = shape.methods[call_type.method_name] or raise
429
+ method_type = method.method_types.find do |method_type|
430
+ call_type.method_decls.any? {|decl| factory.method_type(decl.method_type) == method_type }
431
+ end
432
+ if method_type
433
+ return_type = method_type.type.return_type
434
+ truthy, falsy = factory.partition_union(return_type)
435
+ truthy_types << type if truthy
436
+ falsy_types << type if falsy
437
+ next
438
+ end
439
+ end
440
+
441
+ truthy_types << type
442
+ falsy_types << type
443
+ end
444
+
445
+ truthy_type = truthy_types.empty? ? BOT : AST::Types::Union.build(types: truthy_types)
446
+ falsy_type = falsy_types.empty? ? BOT : AST::Types::Union.build(types: falsy_types)
447
+
448
+ truthy_env, falsy_env = refine_node_type(
449
+ env: env,
450
+ node: receiver,
451
+ truthy_type: truthy_type,
452
+ falsy_type: falsy_type
453
+ )
454
+
455
+ return [
456
+ Result.new(type: truthy_type, env: truthy_env, unreachable: truthy_type.nil?),
457
+ Result.new(type: falsy_type, env: falsy_env, unreachable: falsy_type.nil?)
458
+ ]
459
+ end
460
+
411
461
  def decompose_value(node)
412
462
  case node.type
413
463
  when :lvar
@@ -124,12 +124,14 @@ module Steep
124
124
 
125
125
  def pure?
126
126
  method_decls.all? do |method_decl|
127
- case member = method_decl.method_def.member
128
- when RBS::AST::Members::MethodDefinition
129
- member.annotations.any? {|annotation| annotation.string == "pure" }
127
+ case method_decl.method_def.member
130
128
  when RBS::AST::Members::Attribute
131
129
  # The attribute writer is not pure
132
130
  !method_decl.method_name.method_name.end_with?("=")
131
+ else
132
+ method_decl.method_def.each_annotation.any? do |annotation|
133
+ annotation.string == "pure"
134
+ end
133
135
  end
134
136
  end
135
137
  end
data/lib/steep/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Steep
2
- VERSION = "1.9.4"
2
+ VERSION = "1.10.0.dev.1"
3
3
  end
data/lib/steep.rb CHANGED
@@ -17,6 +17,7 @@ require "yaml"
17
17
  require "securerandom"
18
18
  require "base64"
19
19
  require "time"
20
+ require 'socket'
20
21
 
21
22
  require "concurrent/utility/processor_counter"
22
23
  require "terminal-table"
@@ -151,6 +152,8 @@ require "steep/drivers/vendor"
151
152
  require "steep/drivers/worker"
152
153
  require "steep/drivers/diagnostic_printer"
153
154
 
155
+ require "steep/annotations_helper"
156
+
154
157
  if ENV["NO_COLOR"]
155
158
  Rainbow.enabled = false
156
159
  end
@@ -226,6 +229,10 @@ module Steep
226
229
  end
227
230
  end
228
231
 
232
+ def self.can_fork?
233
+ defined?(fork)
234
+ end
235
+
229
236
  class Sampler
230
237
  def initialize()
231
238
  @samples = []
@@ -40,7 +40,7 @@ A type annotation has a syntax error.
40
40
  ### Ruby code
41
41
 
42
42
  ```ruby
43
- # @type var foo: () ->
43
+ # @type var foo: () ->
44
44
  ```
45
45
 
46
46
  ### Diagnostic
@@ -237,6 +237,52 @@ test.rb:4:6: [error] ::Kernel is declared as a module in RBS
237
237
  | - | - | - | - | - |
238
238
  | error | error | error | - | - |
239
239
 
240
+ <a name='Ruby::DeprecatedReference'></a>
241
+ ## Ruby::DeprecatedReference
242
+
243
+ Method call or constant reference is deprecated.
244
+
245
+ ### RBS
246
+
247
+ ```rbs
248
+ %a{deprecated} class Foo end
249
+
250
+ class Bar
251
+ %a{deprecated: since v0.9} def self.bar: () -> void
252
+ end
253
+ ```
254
+
255
+ ### Ruby code
256
+
257
+ ```ruby
258
+ Foo
259
+
260
+ Bar.bar()
261
+ ```
262
+
263
+ ### Diagnostic
264
+
265
+ ```
266
+ lib/deprecated.rb:1:0: [warning] The constant is deprecated
267
+ │ Diagnostic ID: Ruby::DeprecatedReference
268
+
269
+ └ Foo
270
+ ~~~
271
+
272
+ lib/deprecated.rb:3:4: [warning] The method is deprecated: since v0.9
273
+ │ Diagnostic ID: Ruby::DeprecatedReference
274
+
275
+ └ Bar.bar()
276
+ ~~~
277
+ ```
278
+
279
+
280
+ ### Severity
281
+
282
+ | all_error | strict | default | lenient | silent |
283
+ | - | - | - | - | - |
284
+ | error | warning | warning | warning | - |
285
+
240
286
  <a name='Ruby::DifferentMethodParameterKind'></a>
241
287
  ## Ruby::DifferentMethodParameterKind
242
288
 
@@ -703,6 +749,36 @@ test.rb:2:6: [error] Cannot allow method body have type `::Integer` because decl
703
749
  | - | - | - | - | - |
704
750
  | error | error | error | warning | - |
705
751
 
752
+ <a name='Ruby::MethodDefinitionInUndeclaredModule'></a>
753
+ ## Ruby::MethodDefinitionInUndeclaredModule
754
+
755
+ A `def` syntax doesn't have method type because the module/class is undefined in RBS.
756
+
757
+ ### Ruby code
758
+
759
+ ```ruby
760
+ class UndeclaredClass
761
+ def to_s = 123
762
+ end
763
+ ```
764
+
765
+ ### Diagnostic
766
+
767
+ ```
768
+ test.rb:2:6: [error] Method `to_s` is defined in undeclared module
769
+ │ Diagnostic ID: Ruby::MethodDefinitionInUndeclaredModule
770
+
771
+ └ def to_s = 123
772
+ ~~~~
773
+ ```
774
+
775
+
776
+ ### Severity
777
+
778
+ | all_error | strict | default | lenient | silent |
779
+ | - | - | - | - | - |
780
+ | error | warning | information | hint | - |
781
+
706
782
  <a name='Ruby::MethodDefinitionMissing'></a>
707
783
  ## Ruby::MethodDefinitionMissing
708
784
 
@@ -1235,6 +1311,43 @@ test.rb:2:4: [error] Empty hash doesn't have type annotation
1235
1311
  | - | - | - | - | - |
1236
1312
  | error | error | warning | hint | - |
1237
1313
 
1314
+ <a name='Ruby::UndeclaredMethodDefinition'></a>
1315
+ ## Ruby::UndeclaredMethodDefinition
1316
+
1317
+ A `def` syntax doesn't have corresponding RBS method definition.
1318
+
1319
+ ### RBS
1320
+
1321
+ ```rbs
1322
+ class Foo
1323
+ end
1324
+ ```
1325
+
1326
+ ### Ruby code
1327
+
1328
+ ```ruby
1329
+ class Foo
1330
+ def undeclared = nil
1331
+ end
1332
+ ```
1333
+
1334
+ ### Diagnostic
1335
+
1336
+ ```
1337
+ test.rb:2:6: [error] Method `::Foo#undeclared` is not declared in RBS
1338
+ │ Diagnostic ID: Ruby::UndeclaredMethodDefinition
1339
+
1340
+ └ def undeclared = nil
1341
+ ~~~~~~~~~~
1342
+ ```
1343
+
1344
+
1345
+ ### Severity
1346
+
1347
+ | all_error | strict | default | lenient | silent |
1348
+ | - | - | - | - | - |
1349
+ | error | warning | warning | information | - |
1350
+
1238
1351
  <a name='Ruby::UnexpectedBlockGiven'></a>
1239
1352
  ## Ruby::UnexpectedBlockGiven
1240
1353
 
data/sample/Steepfile CHANGED
@@ -5,8 +5,6 @@ target :lib do
5
5
 
6
6
  check "lib" # Directory name
7
7
 
8
- library "rbs"
9
-
10
8
  # configure_code_diagnostics(D::Ruby.strict) # `strict` diagnostics setting
11
9
  # configure_code_diagnostics(D::Ruby.lenient) # `lenient` diagnostics setting
12
10
  # configure_code_diagnostics(D::Ruby.silent) # `silent` diagnostics setting
@@ -7,19 +7,33 @@ class Conference
7
7
  @title = title
8
8
  @year = year
9
9
  end
10
+
11
+ def hello_world
12
+
13
+ end
10
14
  end
11
15
 
12
16
  Conference.new()
13
17
 
14
18
  Konference.new()
15
19
 
20
+ class Hogehogehoge
21
+ def to_s = 123
16
22
 
23
+ def foo = 23
24
+ end
17
25
 
18
26
  # @type var foo: Konference
19
27
 
20
28
  foo = Conference.new
21
29
 
30
+ class Conference
31
+ def hello = 123
32
+ end
33
+
22
34
  class Conference12
35
+ def hello = 123
36
+
23
37
  class Integer
24
38
  end
25
39
  end
@@ -0,0 +1,4 @@
1
+ Foo
2
+
3
+ Bar.bar()
4
+
@@ -0,0 +1,11 @@
1
+ %a{deprecated} class Foo end
2
+
3
+ class Bar
4
+ # Original bar
5
+ def self.bar: %a{deprecated: since v0.9} () -> void
6
+
7
+ # Overloading bar
8
+ def self.bar: (String) -> String | ...
9
+ end
10
+
11
+ %a{deprecated} $test: untyped
data/steep.gemspec CHANGED
@@ -41,10 +41,10 @@ Gem::Specification.new do |spec|
41
41
  spec.add_runtime_dependency "activesupport", ">= 5.1"
42
42
  spec.add_runtime_dependency "rainbow", ">= 2.2.2", "< 4.0"
43
43
  spec.add_runtime_dependency "listen", "~> 3.0"
44
- spec.add_runtime_dependency "language_server-protocol", ">= 3.15", "< 4.0"
45
- spec.add_runtime_dependency "rbs", "~> 3.8"
44
+ spec.add_runtime_dependency "language_server-protocol", ">= 3.17.0.4", "< 4.0"
45
+ spec.add_runtime_dependency "rbs", "~> 3.9.dev"
46
46
  spec.add_runtime_dependency "concurrent-ruby", ">= 1.1.10"
47
- spec.add_runtime_dependency "terminal-table", ">= 2", "< 4"
47
+ spec.add_runtime_dependency "terminal-table", ">= 2", "< 5"
48
48
  spec.add_runtime_dependency "securerandom", ">= 0.1"
49
49
  spec.add_runtime_dependency "json", ">= 2.1.0"
50
50
  spec.add_runtime_dependency "logger", ">= 1.3.0"
@@ -52,4 +52,5 @@ Gem::Specification.new do |spec|
52
52
  spec.add_runtime_dependency "strscan", ">= 1.0.0"
53
53
  spec.add_runtime_dependency "csv", ">= 3.0.9"
54
54
  spec.add_runtime_dependency "uri", ">= 0.12.0"
55
+ spec.add_runtime_dependency "mutex_m", ">= 0.3.0"
55
56
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: steep
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.4
4
+ version: 1.10.0.dev.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-02-04 00:00:00.000000000 Z
10
+ date: 2025-03-07 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: parser
@@ -77,7 +77,7 @@ dependencies:
77
77
  requirements:
78
78
  - - ">="
79
79
  - !ruby/object:Gem::Version
80
- version: '3.15'
80
+ version: 3.17.0.4
81
81
  - - "<"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '4.0'
@@ -87,7 +87,7 @@ dependencies:
87
87
  requirements:
88
88
  - - ">="
89
89
  - !ruby/object:Gem::Version
90
- version: '3.15'
90
+ version: 3.17.0.4
91
91
  - - "<"
92
92
  - !ruby/object:Gem::Version
93
93
  version: '4.0'
@@ -97,14 +97,14 @@ dependencies:
97
97
  requirements:
98
98
  - - "~>"
99
99
  - !ruby/object:Gem::Version
100
- version: '3.8'
100
+ version: 3.9.dev
101
101
  type: :runtime
102
102
  prerelease: false
103
103
  version_requirements: !ruby/object:Gem::Requirement
104
104
  requirements:
105
105
  - - "~>"
106
106
  - !ruby/object:Gem::Version
107
- version: '3.8'
107
+ version: 3.9.dev
108
108
  - !ruby/object:Gem::Dependency
109
109
  name: concurrent-ruby
110
110
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +128,7 @@ dependencies:
128
128
  version: '2'
129
129
  - - "<"
130
130
  - !ruby/object:Gem::Version
131
- version: '4'
131
+ version: '5'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
@@ -138,7 +138,7 @@ dependencies:
138
138
  version: '2'
139
139
  - - "<"
140
140
  - !ruby/object:Gem::Version
141
- version: '4'
141
+ version: '5'
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: securerandom
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -237,6 +237,20 @@ dependencies:
237
237
  - - ">="
238
238
  - !ruby/object:Gem::Version
239
239
  version: 0.12.0
240
+ - !ruby/object:Gem::Dependency
241
+ name: mutex_m
242
+ requirement: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - ">="
245
+ - !ruby/object:Gem::Version
246
+ version: 0.3.0
247
+ type: :runtime
248
+ prerelease: false
249
+ version_requirements: !ruby/object:Gem::Requirement
250
+ requirements:
251
+ - - ">="
252
+ - !ruby/object:Gem::Version
253
+ version: 0.3.0
240
254
  description: Gradual Typing for Ruby
241
255
  email:
242
256
  - matsumoto@soutaro.com
@@ -274,6 +288,7 @@ files:
274
288
  - guides/src/nil-optional/nil-optional.md
275
289
  - lib/steep.rb
276
290
  - lib/steep/annotation_parser.rb
291
+ - lib/steep/annotations_helper.rb
277
292
  - lib/steep/ast/annotation.rb
278
293
  - lib/steep/ast/annotation/collection.rb
279
294
  - lib/steep/ast/builtin.rb
@@ -402,8 +417,10 @@ files:
402
417
  - manual/ruby-diagnostics.md
403
418
  - sample/Steepfile
404
419
  - sample/lib/conference.rb
420
+ - sample/lib/deprecated.rb
405
421
  - sample/lib/length.rb
406
422
  - sample/sig/conference.rbs
423
+ - sample/sig/deprecated.rbs
407
424
  - sample/sig/generics.rbs
408
425
  - sample/sig/length.rbs
409
426
  - steep.gemspec