typeprof 0.6.0 → 0.9.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/Gemfile.lock +7 -5
- data/doc/doc.ja.md +3 -4
- data/doc/doc.md +3 -4
- data/lib/typeprof/analyzer.rb +214 -133
- data/lib/typeprof/arguments.rb +14 -6
- data/lib/typeprof/block.rb +6 -2
- data/lib/typeprof/builtin.rb +223 -71
- data/lib/typeprof/cli.rb +33 -34
- data/lib/typeprof/config.rb +6 -4
- data/lib/typeprof/container-type.rb +154 -99
- data/lib/typeprof/export.rb +23 -17
- data/lib/typeprof/import.rb +49 -42
- data/lib/typeprof/iseq.rb +23 -7
- data/lib/typeprof/method.rb +63 -147
- data/lib/typeprof/type.rb +63 -7
- data/lib/typeprof/version.rb +1 -1
- data/smoke/alias.rb +5 -4
- data/smoke/alias2.rb +4 -4
- data/smoke/any1.rb +2 -1
- data/smoke/any2.rb +3 -2
- data/smoke/arguments.rb +3 -2
- data/smoke/arguments2.rb +11 -10
- data/smoke/array-each.rb +2 -1
- data/smoke/array-each2.rb +2 -1
- data/smoke/array-each3.rb +2 -1
- data/smoke/array-ltlt.rb +2 -1
- data/smoke/array-ltlt2.rb +2 -1
- data/smoke/array-map.rb +2 -1
- data/smoke/array-map2.rb +2 -1
- data/smoke/array-map3.rb +4 -3
- data/smoke/array-mul.rb +3 -2
- data/smoke/array-plus1.rb +2 -1
- data/smoke/array-plus2.rb +2 -2
- data/smoke/array-pop.rb +2 -1
- data/smoke/array-range-aref.rb +71 -0
- data/smoke/array-replace.rb +2 -1
- data/smoke/array-s-aref.rb +2 -1
- data/smoke/array1.rb +6 -5
- data/smoke/array10.rb +2 -1
- data/smoke/array11.rb +2 -1
- data/smoke/array12.rb +4 -3
- data/smoke/array13.rb +5 -4
- data/smoke/array14.rb +2 -1
- data/smoke/array15.rb +16 -0
- data/smoke/array2.rb +4 -3
- data/smoke/array3.rb +4 -4
- data/smoke/array4.rb +2 -1
- data/smoke/array5.rb +2 -1
- data/smoke/array6.rb +3 -2
- data/smoke/array7.rb +2 -1
- data/smoke/array8.rb +1 -1
- data/smoke/array9.rb +2 -1
- data/smoke/attr-module.rb +26 -0
- data/smoke/attr.rb +5 -5
- data/smoke/autoload.rb +14 -0
- data/smoke/backtrace.rb +4 -3
- data/smoke/block-ambiguous.rb +9 -8
- data/smoke/block-args1-rest.rb +12 -11
- data/smoke/block-args1.rb +11 -10
- data/smoke/block-args2-rest.rb +12 -11
- data/smoke/block-args2.rb +11 -10
- data/smoke/block-args3-rest.rb +14 -13
- data/smoke/block-args3.rb +13 -12
- data/smoke/block-blockarg.rb +5 -4
- data/smoke/block-kwarg.rb +11 -10
- data/smoke/block1.rb +2 -1
- data/smoke/block10.rb +2 -1
- data/smoke/block11.rb +6 -5
- data/smoke/block12.rb +3 -2
- data/smoke/block14.rb +3 -2
- data/smoke/block2.rb +2 -1
- data/smoke/block3.rb +3 -3
- data/smoke/block4.rb +3 -2
- data/smoke/block5.rb +3 -2
- data/smoke/block6.rb +3 -2
- data/smoke/block7.rb +2 -1
- data/smoke/block8.rb +4 -3
- data/smoke/block9.rb +2 -1
- data/smoke/blown.rb +2 -1
- data/smoke/break1.rb +3 -2
- data/smoke/break2.rb +2 -1
- data/smoke/break3.rb +13 -0
- data/smoke/case.rb +2 -1
- data/smoke/case2.rb +2 -1
- data/smoke/case3.rb +17 -0
- data/smoke/class-hierarchy.rb +5 -5
- data/smoke/class-hierarchy2.rb +3 -3
- data/smoke/class-new.rb +15 -0
- data/smoke/class_instance_var.rb +1 -1
- data/smoke/class_method.rb +2 -2
- data/smoke/class_method2.rb +2 -2
- data/smoke/class_method3.rb +4 -2
- data/smoke/constant1.rb +6 -6
- data/smoke/constant2.rb +5 -4
- data/smoke/constant3.rb +2 -1
- data/smoke/constant4.rb +2 -1
- data/smoke/context-sensitive1.rb +2 -1
- data/smoke/cvar.rb +6 -5
- data/smoke/cvar2.rb +2 -2
- data/smoke/define_method.rb +16 -0
- data/smoke/define_method2.rb +18 -0
- data/smoke/define_method3.rb +13 -0
- data/smoke/define_method3.rbs +3 -0
- data/smoke/define_method4.rb +15 -0
- data/smoke/define_method4.rbs +3 -0
- data/smoke/define_method5.rb +12 -0
- data/smoke/demo.rb +7 -6
- data/smoke/demo1.rb +2 -1
- data/smoke/demo10.rb +3 -2
- data/smoke/demo11.rb +2 -1
- data/smoke/demo2.rb +2 -1
- data/smoke/demo3.rb +2 -1
- data/smoke/demo4.rb +3 -3
- data/smoke/demo5.rb +1 -1
- data/smoke/demo6.rb +3 -3
- data/smoke/demo7.rb +2 -1
- data/smoke/demo8.rb +3 -2
- data/smoke/demo9.rb +3 -2
- data/smoke/dummy-execution1.rb +3 -2
- data/smoke/dummy-execution2.rb +2 -2
- data/smoke/dummy_element.rb +14 -0
- data/smoke/ensure1.rb +3 -2
- data/smoke/enumerator.rb +3 -2
- data/smoke/expandarray1.rb +2 -1
- data/smoke/expandarray2.rb +2 -1
- data/smoke/fib.rb +2 -2
- data/smoke/flip-flop.rb +28 -0
- data/smoke/flow1.rb +2 -1
- data/smoke/flow2.rb +2 -1
- data/smoke/flow3.rb +2 -1
- data/smoke/flow5.rb +2 -1
- data/smoke/flow6.rb +2 -1
- data/smoke/flow7.rb +2 -1
- data/smoke/flow8.rb +2 -1
- data/smoke/flow9.rb +12 -0
- data/smoke/freeze.rb +2 -1
- data/smoke/function.rb +3 -2
- data/smoke/gvar.rb +3 -2
- data/smoke/gvar2.rb +3 -2
- data/smoke/hash-bot.rb +12 -0
- data/smoke/hash-fetch.rb +4 -3
- data/smoke/hash-merge-bang.rb +2 -1
- data/smoke/hash1.rb +3 -2
- data/smoke/hash2.rb +2 -1
- data/smoke/hash3.rb +2 -1
- data/smoke/hash4.rb +2 -1
- data/smoke/hash5.rb +1 -1
- data/smoke/inheritance.rb +4 -4
- data/smoke/inheritance2.rb +2 -2
- data/smoke/initialize.rb +6 -5
- data/smoke/instance_eval.rb +2 -2
- data/smoke/instance_eval2.rb +10 -0
- data/smoke/instance_eval3.rb +25 -0
- data/smoke/int_times.rb +2 -1
- data/smoke/integer.rb +2 -1
- data/smoke/ivar.rb +5 -4
- data/smoke/ivar2.rb +4 -4
- data/smoke/ivar3.rb +2 -2
- data/smoke/ivar4.rb +20 -0
- data/smoke/kernel-class.rb +2 -1
- data/smoke/keyword1.rb +2 -1
- data/smoke/keyword2.rb +2 -1
- data/smoke/keyword3.rb +2 -1
- data/smoke/keyword4.rb +2 -1
- data/smoke/keyword5.rb +2 -1
- data/smoke/kwrest.rb +12 -0
- data/smoke/kwrest.rbs +3 -0
- data/smoke/kwsplat1.rb +5 -4
- data/smoke/kwsplat2.rb +2 -1
- data/smoke/lit-complex.rb +10 -0
- data/smoke/lit-encoding.rb +10 -0
- data/smoke/manual-rbs.rb +4 -3
- data/smoke/manual-rbs2.rb +2 -1
- data/smoke/manual-rbs3.rb +2 -2
- data/smoke/masgn1.rb +2 -1
- data/smoke/masgn2.rb +3 -2
- data/smoke/masgn3.rb +2 -1
- data/smoke/method_in_branch.rb +3 -2
- data/smoke/method_missing.rb +28 -0
- data/smoke/module1.rb +2 -2
- data/smoke/module2.rb +1 -1
- data/smoke/module3.rb +2 -2
- data/smoke/module4.rb +2 -2
- data/smoke/module5.rb +17 -0
- data/smoke/module6.rb +40 -0
- data/smoke/module_function1.rb +3 -3
- data/smoke/module_function2.rb +3 -3
- data/smoke/multiple-include.rb +1 -1
- data/smoke/multiple-superclass.rb +1 -1
- data/smoke/next1.rb +3 -2
- data/smoke/next2.rb +2 -1
- data/smoke/object-send1.rb +4 -3
- data/smoke/object-send2.rb +10 -0
- data/smoke/object-send3.rb +18 -0
- data/smoke/once.rb +2 -1
- data/smoke/optional1.rb +2 -1
- data/smoke/optional2.rb +2 -1
- data/smoke/optional3.rb +2 -1
- data/smoke/parameterizedd-self.rb +3 -2
- data/smoke/parameterizedd-self2.rb +1 -1
- data/smoke/pathname1.rb +2 -1
- data/smoke/pathname2.rb +2 -1
- data/smoke/pattern-match1.rb +2 -1
- data/smoke/pattern-match2.rb +2 -1
- data/smoke/printf.rb +2 -2
- data/smoke/proc.rb +3 -2
- data/smoke/proc2.rb +2 -1
- data/smoke/proc3.rb +2 -1
- data/smoke/proc4.rb +2 -1
- data/smoke/proc5.rb +19 -0
- data/smoke/public.rb +34 -0
- data/smoke/range.rb +2 -1
- data/smoke/rbs-alias.rb +2 -1
- data/smoke/rbs-attr.rb +6 -5
- data/smoke/rbs-attr2.rb +11 -0
- data/smoke/rbs-attr2.rbs +3 -0
- data/smoke/rbs-extend.rb +2 -1
- data/smoke/rbs-interface.rb +5 -4
- data/smoke/rbs-module.rb +26 -0
- data/smoke/rbs-module.rbs +4 -0
- data/smoke/rbs-opt-and-rest.rb +10 -0
- data/smoke/rbs-opt-and-rest.rbs +3 -0
- data/smoke/rbs-proc1.rb +2 -1
- data/smoke/rbs-proc2.rb +3 -2
- data/smoke/rbs-proc3.rb +2 -1
- data/smoke/rbs-record.rb +3 -2
- data/smoke/rbs-tyvar.rb +3 -2
- data/smoke/rbs-tyvar2.rb +3 -2
- data/smoke/rbs-tyvar3.rb +3 -2
- data/smoke/rbs-tyvar4.rb +3 -3
- data/smoke/rbs-tyvar5.rb +2 -1
- data/smoke/rbs-tyvar6.rb +4 -3
- data/smoke/rbs-tyvar7.rb +12 -0
- data/smoke/rbs-tyvar7.rbs +7 -0
- data/smoke/rbs-vars.rb +7 -8
- data/smoke/redo1.rb +3 -2
- data/smoke/redo2.rb +3 -2
- data/smoke/req-keyword.rb +2 -1
- data/smoke/rescue1.rb +3 -2
- data/smoke/rescue2.rb +3 -2
- data/smoke/rescue3.rb +19 -0
- data/smoke/rescue4.rb +17 -0
- data/smoke/respond_to.rb +2 -1
- data/smoke/rest-farg.rb +2 -1
- data/smoke/rest1.rb +3 -2
- data/smoke/rest2.rb +2 -1
- data/smoke/rest3.rb +7 -6
- data/smoke/rest4.rb +3 -2
- data/smoke/rest5.rb +2 -1
- data/smoke/rest6.rb +2 -1
- data/smoke/retry1.rb +3 -2
- data/smoke/return.rb +2 -1
- data/smoke/singleton_method.rb +1 -1
- data/smoke/step.rb +4 -3
- data/smoke/string-split.rb +2 -1
- data/smoke/struct-keyword_init.rb +20 -0
- data/smoke/struct.rb +1 -1
- data/smoke/struct2.rb +5 -4
- data/smoke/struct3.rb +2 -2
- data/smoke/struct4.rb +7 -0
- data/smoke/struct5.rb +16 -0
- data/smoke/struct6.rb +15 -0
- data/smoke/struct7.rb +17 -0
- data/smoke/stub-keyword.rb +10 -0
- data/smoke/super1.rb +5 -4
- data/smoke/super2.rb +1 -1
- data/smoke/super3.rb +3 -3
- data/smoke/super4.rb +5 -5
- data/smoke/super5.rb +4 -4
- data/smoke/svar1.rb +2 -1
- data/smoke/symbol-proc-attr.rb +22 -0
- data/smoke/symbol-proc-attr2.rb +15 -0
- data/smoke/symbol-proc-bot.rb +13 -0
- data/smoke/symbol-proc.rb +4 -3
- data/smoke/tap1.rb +3 -2
- data/smoke/toplevel.rb +2 -1
- data/smoke/two-map.rb +3 -2
- data/smoke/type_var.rb +2 -1
- data/smoke/typed_method.rb +2 -1
- data/smoke/uninitialize-var.rb +2 -1
- data/smoke/union-recv.rb +2 -2
- data/smoke/user-demo.rb +3 -3
- data/smoke/wrong-extend.rb +2 -2
- data/smoke/wrong-include.rb +2 -2
- data/smoke/wrong-include2.rb +17 -0
- data/typeprof.gemspec +1 -1
- metadata +56 -5
- data/tools/stackprof-wrapper.rb +0 -10
data/lib/typeprof/type.rb
CHANGED
@@ -149,6 +149,10 @@ module TypeProf
|
|
149
149
|
raise "cannot substitute abstract type: #{ self.class }"
|
150
150
|
end
|
151
151
|
|
152
|
+
def generate_substitution
|
153
|
+
{}
|
154
|
+
end
|
155
|
+
|
152
156
|
DummySubstitution = Object.new
|
153
157
|
def DummySubstitution.[](_)
|
154
158
|
Type.any
|
@@ -203,11 +207,12 @@ module TypeProf
|
|
203
207
|
local = nil
|
204
208
|
tys.each do |ty|
|
205
209
|
raise ty.inspect unless ty.is_a?(Type)
|
206
|
-
local = true if ty.is_a?(
|
210
|
+
local = true if ty.is_a?(Local)
|
207
211
|
end
|
208
212
|
raise if local && elems
|
209
213
|
|
210
214
|
@elems = elems
|
215
|
+
raise elems.inspect if elems && !elems.is_a?(::Hash)
|
211
216
|
end
|
212
217
|
|
213
218
|
def each_free_type_variable(&blk)
|
@@ -285,7 +290,7 @@ module TypeProf
|
|
285
290
|
types.delete(Type::Instance.new(Type::Builtin[:true]))
|
286
291
|
bool = true
|
287
292
|
end
|
288
|
-
types.delete(Type.any) unless Config.options[:
|
293
|
+
types.delete(Type.any) unless Config.options[:show_untyped]
|
289
294
|
proc_tys, types = types.partition {|ty| ty.is_a?(Proc) }
|
290
295
|
types = types.map {|ty| ty.screen_name(scratch) }
|
291
296
|
types << scratch.show_proc_signature(proc_tys) unless proc_tys.empty?
|
@@ -310,9 +315,14 @@ module TypeProf
|
|
310
315
|
def globalize(env, visited, depth)
|
311
316
|
return Type.any if depth <= 0
|
312
317
|
tys = Utils::Set[]
|
313
|
-
|
318
|
+
if @elems
|
319
|
+
# XXX: If @elems is non nil, the Union type should global, so calling globalize against such a type should not occur.
|
320
|
+
# However, currently, ActualArguments may contain global types for flag_args_kw_splat case.
|
321
|
+
# This should be fixed in future in ActualArguments side. See Scratch#setup_actual_arguments.
|
322
|
+
#raise
|
323
|
+
end
|
314
324
|
|
315
|
-
elems = {}
|
325
|
+
elems = @elems ? @elems.dup : {}
|
316
326
|
@types.each do |ty|
|
317
327
|
ty = ty.globalize(env, visited, depth - 1)
|
318
328
|
case ty
|
@@ -430,17 +440,17 @@ module TypeProf
|
|
430
440
|
end
|
431
441
|
|
432
442
|
class Class < Type # or Module
|
433
|
-
def initialize(kind, idx, type_params, superclass,
|
443
|
+
def initialize(kind, idx, type_params, superclass, name)
|
434
444
|
@kind = kind # :class | :module
|
435
445
|
@idx = idx
|
436
446
|
@type_params = type_params
|
437
447
|
@superclass = superclass
|
438
448
|
raise if @kind == :class && !@superclass
|
439
|
-
@superclass_type_args = superclass_type_args
|
440
449
|
@_name = name
|
441
450
|
end
|
442
451
|
|
443
|
-
attr_reader :kind, :idx, :type_params, :superclass
|
452
|
+
attr_reader :kind, :idx, :type_params, :superclass
|
453
|
+
attr_accessor :superclass_type_args
|
444
454
|
|
445
455
|
def inspect
|
446
456
|
if @_name
|
@@ -487,6 +497,8 @@ module TypeProf
|
|
487
497
|
def initialize(klass)
|
488
498
|
raise unless klass
|
489
499
|
raise if klass == Type.any
|
500
|
+
raise if klass.is_a?(Type::Instance)
|
501
|
+
raise if klass.is_a?(Type::Union)
|
490
502
|
@klass = klass
|
491
503
|
end
|
492
504
|
|
@@ -677,6 +689,8 @@ module TypeProf
|
|
677
689
|
Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:int]))
|
678
690
|
when ::Rational
|
679
691
|
Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:rational]))
|
692
|
+
when ::Complex
|
693
|
+
Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:complex]))
|
680
694
|
when ::Float
|
681
695
|
Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:float]))
|
682
696
|
when ::Class
|
@@ -713,6 +727,8 @@ module TypeProf
|
|
713
727
|
Type.nil
|
714
728
|
when ::Range
|
715
729
|
Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:range]))
|
730
|
+
when ::Encoding
|
731
|
+
Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:encoding]))
|
716
732
|
else
|
717
733
|
raise "unknown object: #{ obj.inspect }"
|
718
734
|
end
|
@@ -815,8 +831,10 @@ module TypeProf
|
|
815
831
|
def initialize(lead_tys, opt_tys, rest_ty, post_tys, kw_tys, kw_rest_ty, blk_ty)
|
816
832
|
@lead_tys = lead_tys
|
817
833
|
@opt_tys = opt_tys
|
834
|
+
raise unless opt_tys.is_a?(Array)
|
818
835
|
@rest_ty = rest_ty
|
819
836
|
@post_tys = post_tys
|
837
|
+
raise unless post_tys
|
820
838
|
@kw_tys = kw_tys
|
821
839
|
kw_tys.each {|a| raise if a.size != 3 } if kw_tys
|
822
840
|
@kw_rest_ty = kw_rest_ty
|
@@ -836,6 +854,44 @@ module TypeProf
|
|
836
854
|
MethodSignature.new(lead_tys, opt_tys, rest_ty, post_tys, kw_tys, kw_rest_ty, blk_ty)
|
837
855
|
end
|
838
856
|
|
857
|
+
def merge_as_block_arguments(other)
|
858
|
+
lead_tys1, opt_tys1, rest_ty1, post_tys1 = @lead_tys, @opt_tys, @rest_ty, @post_tys
|
859
|
+
lead_tys2, opt_tys2, rest_ty2, post_tys2 = other.lead_tys, other.opt_tys, other.rest_ty, other.post_tys
|
860
|
+
|
861
|
+
case
|
862
|
+
when lead_tys1.size > lead_tys2.size
|
863
|
+
n = lead_tys2.size
|
864
|
+
lead_tys1, opt_tys1 = lead_tys1[0, n], lead_tys1[n..] + opt_tys1
|
865
|
+
when lead_tys1.size < lead_tys2.size
|
866
|
+
n = lead_tys1.size
|
867
|
+
lead_tys2, opt_tys2 = lead_tys2[0, n], lead_tys2[n..] + opt_tys2
|
868
|
+
end
|
869
|
+
case
|
870
|
+
when post_tys1.size > post_tys2.size
|
871
|
+
i = post_tys1.size - post_tys2.size
|
872
|
+
if rest_ty1
|
873
|
+
rest_ty1 = post_tys[0, i].inject(rest_ty1) {|ty1, ty2| ty1.union(ty2) }
|
874
|
+
post_tys1 = post_tys1[i..]
|
875
|
+
else
|
876
|
+
opt_tys1, post_tys1 = opt_tys1 + post_tys1[0, i], post_tys1[i..]
|
877
|
+
end
|
878
|
+
when post_tys1.size < post_tys2.size
|
879
|
+
i = post_tys2.size - post_tys1.size
|
880
|
+
if rest_ty2
|
881
|
+
rest_ty2 = post_tys[0, i].inject(rest_ty2) {|ty1, ty2| ty1.union(ty2) }
|
882
|
+
post_tys2 = post_tys2[i..]
|
883
|
+
else
|
884
|
+
opt_tys2, post_tys2 = opt_tys2 + post_tys2[0, i], post_tys2[i..]
|
885
|
+
end
|
886
|
+
end
|
887
|
+
|
888
|
+
# XXX: tweak keywords too
|
889
|
+
|
890
|
+
msig1 = MethodSignature.new(lead_tys1, opt_tys1, rest_ty1, post_tys1, @kw_tys, @kw_rest_ty, @blk_ty)
|
891
|
+
msig2 = MethodSignature.new(lead_tys2, opt_tys2, rest_ty2, post_tys2, other.kw_tys, other.kw_rest_ty, other.blk_ty)
|
892
|
+
msig1.merge(msig2)
|
893
|
+
end
|
894
|
+
|
839
895
|
def merge(other)
|
840
896
|
raise if @lead_tys.size != other.lead_tys.size
|
841
897
|
raise if @post_tys.size != other.post_tys.size
|
data/lib/typeprof/version.rb
CHANGED
data/smoke/alias.rb
CHANGED
@@ -20,11 +20,12 @@ Test.new.qux("str")
|
|
20
20
|
__END__
|
21
21
|
# Classes
|
22
22
|
class Object
|
23
|
-
|
24
|
-
def
|
23
|
+
private
|
24
|
+
def foo: (Integer) -> Integer
|
25
|
+
def bar: (String) -> String
|
25
26
|
end
|
26
27
|
|
27
28
|
class Test
|
28
|
-
def baz
|
29
|
-
def qux
|
29
|
+
def baz: (Integer) -> Integer
|
30
|
+
def qux: (String) -> String
|
30
31
|
end
|
data/smoke/alias2.rb
CHANGED
data/smoke/any1.rb
CHANGED
data/smoke/any2.rb
CHANGED
data/smoke/arguments.rb
CHANGED
data/smoke/arguments2.rb
CHANGED
@@ -42,14 +42,15 @@ f10 {|n| }
|
|
42
42
|
__END__
|
43
43
|
# Classes
|
44
44
|
class Object
|
45
|
-
|
46
|
-
def
|
47
|
-
def
|
48
|
-
def
|
49
|
-
def
|
50
|
-
def
|
51
|
-
def
|
52
|
-
def
|
53
|
-
def
|
54
|
-
def
|
45
|
+
private
|
46
|
+
def f1: -> nil
|
47
|
+
def f2: (:x, :y, :z) -> nil
|
48
|
+
def f3: (?String, ?String) -> nil
|
49
|
+
def f4: (*:a | :b | :c) -> nil
|
50
|
+
def f5: (:x, ?String, :z) -> nil
|
51
|
+
def f6: (k: :kk) -> nil
|
52
|
+
def f7: (?k: Integer) -> nil
|
53
|
+
def f8: (?k: String) -> nil
|
54
|
+
def f9: (**{k: :kk}) -> nil
|
55
|
+
def f10: { (Integer) -> nil } -> nil
|
55
56
|
end
|
data/smoke/array-each.rb
CHANGED
data/smoke/array-each2.rb
CHANGED
data/smoke/array-each3.rb
CHANGED
data/smoke/array-ltlt.rb
CHANGED
data/smoke/array-ltlt2.rb
CHANGED
data/smoke/array-map.rb
CHANGED
data/smoke/array-map2.rb
CHANGED
data/smoke/array-map3.rb
CHANGED
@@ -16,7 +16,8 @@ map_bang_test_known_bug([1, 2, 3])
|
|
16
16
|
__END__
|
17
17
|
# Classes
|
18
18
|
class Object
|
19
|
-
|
20
|
-
def
|
21
|
-
def
|
19
|
+
private
|
20
|
+
def map_test: ([Integer, Integer, Integer]) -> Array[String]
|
21
|
+
def map_bang_test: ([Integer, Integer, Integer]) -> (Array[Integer | String])
|
22
|
+
def map_bang_test_known_bug: ([Integer, Integer, Integer]) -> [Integer, Integer, Integer]
|
22
23
|
end
|
data/smoke/array-mul.rb
CHANGED
@@ -12,6 +12,7 @@ bar([1, 2, 3])
|
|
12
12
|
__END__
|
13
13
|
# Classes
|
14
14
|
class Object
|
15
|
-
|
16
|
-
def
|
15
|
+
private
|
16
|
+
def foo: ([Integer, Integer, Integer]) -> Array[Integer]
|
17
|
+
def bar: ([Integer, Integer, Integer]) -> String
|
17
18
|
end
|
data/smoke/array-plus1.rb
CHANGED
data/smoke/array-plus2.rb
CHANGED
data/smoke/array-pop.rb
CHANGED
@@ -0,0 +1,71 @@
|
|
1
|
+
def f1(*ary)
|
2
|
+
ary[1..3]
|
3
|
+
end
|
4
|
+
|
5
|
+
def f2(*ary)
|
6
|
+
ary[1...3]
|
7
|
+
end
|
8
|
+
|
9
|
+
def f3(*ary)
|
10
|
+
ary[1..-3]
|
11
|
+
end
|
12
|
+
|
13
|
+
def f4(*ary)
|
14
|
+
ary[1...-3]
|
15
|
+
end
|
16
|
+
|
17
|
+
def f5(*ary)
|
18
|
+
ary[-4..3]
|
19
|
+
end
|
20
|
+
|
21
|
+
def f6(*ary)
|
22
|
+
ary[-4...3]
|
23
|
+
end
|
24
|
+
|
25
|
+
def f7(*ary)
|
26
|
+
ary[-4..-3]
|
27
|
+
end
|
28
|
+
|
29
|
+
def f8(*ary)
|
30
|
+
ary[-4...-3]
|
31
|
+
end
|
32
|
+
|
33
|
+
def f9(*ary)
|
34
|
+
ary[...3]
|
35
|
+
end
|
36
|
+
|
37
|
+
def f10(*ary)
|
38
|
+
ary[3..]
|
39
|
+
end
|
40
|
+
|
41
|
+
def dispatch(*ary)
|
42
|
+
f1(*ary)
|
43
|
+
f2(*ary)
|
44
|
+
f3(*ary)
|
45
|
+
f4(*ary)
|
46
|
+
f5(*ary)
|
47
|
+
f6(*ary)
|
48
|
+
f7(*ary)
|
49
|
+
f8(*ary)
|
50
|
+
f9(*ary)
|
51
|
+
f10(*ary)
|
52
|
+
end
|
53
|
+
|
54
|
+
dispatch(:a, :b, :c, :d, :e)
|
55
|
+
|
56
|
+
__END__
|
57
|
+
# Classes
|
58
|
+
class Object
|
59
|
+
private
|
60
|
+
def f1: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
61
|
+
def f2: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
62
|
+
def f3: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
63
|
+
def f4: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
64
|
+
def f5: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
65
|
+
def f6: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
66
|
+
def f7: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
67
|
+
def f8: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
68
|
+
def f9: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
69
|
+
def f10: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
70
|
+
def dispatch: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
|
71
|
+
end
|
data/smoke/array-replace.rb
CHANGED