steep 1.9.3 → 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.
- checksums.yaml +4 -4
- data/Steepfile +5 -2
- data/lib/steep/annotations_helper.rb +18 -0
- data/lib/steep/ast/ignore.rb +3 -4
- data/lib/steep/cli.rb +98 -23
- data/lib/steep/diagnostic/lsp_formatter.rb +14 -3
- data/lib/steep/diagnostic/ruby.rb +75 -0
- data/lib/steep/drivers/langserver.rb +4 -1
- data/lib/steep/drivers/worker.rb +2 -0
- data/lib/steep/interface/builder.rb +2 -2
- data/lib/steep/server/custom_methods.rb +12 -0
- data/lib/steep/server/interaction_worker.rb +14 -2
- data/lib/steep/server/master.rb +158 -52
- data/lib/steep/server/type_check_worker.rb +48 -2
- data/lib/steep/server/worker_process.rb +31 -20
- data/lib/steep/services/completion_provider.rb +24 -2
- data/lib/steep/services/signature_service.rb +1 -1
- data/lib/steep/services/type_check_service.rb +22 -7
- data/lib/steep/source.rb +3 -1
- data/lib/steep/subtyping/check.rb +22 -16
- data/lib/steep/type_construction.rb +102 -8
- data/lib/steep/type_inference/case_when.rb +2 -0
- data/lib/steep/type_inference/logic_type_interpreter.rb +50 -0
- data/lib/steep/type_inference/method_call.rb +5 -3
- data/lib/steep/version.rb +1 -1
- data/lib/steep.rb +7 -0
- data/manual/ruby-diagnostics.md +114 -1
- data/sample/Steepfile +0 -2
- data/sample/lib/conference.rb +14 -0
- data/sample/lib/deprecated.rb +4 -0
- data/sample/sig/deprecated.rbs +11 -0
- data/steep.gemspec +4 -3
- metadata +25 -8
@@ -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
|
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
|
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
|
@@ -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
|
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
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 = []
|
data/manual/ruby-diagnostics.md
CHANGED
@@ -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
|
data/sample/lib/conference.rb
CHANGED
@@ -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
|
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.
|
45
|
-
spec.add_runtime_dependency "rbs", "~> 3.
|
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", "<
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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: '
|
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: '
|
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
|