Skip to content

Commit 39e6a65

Browse files
committed
gotta now fix assert visibility
1 parent 34f9a76 commit 39e6a65

3 files changed

Lines changed: 101 additions & 37 deletions

File tree

core/module.rbs

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ class Module
735735
#
736736
# Also see Module#const_defined?.
737737
#
738-
def constants: (?boolish inherit) -> ::Array[Symbol]
738+
def constants: (?boolish inherit) -> Array[Symbol]
739739

740740
# <!--
741741
# rdoc-file=proc.c
@@ -795,8 +795,7 @@ class Module
795795
# HTTP::NOT_FOUND
796796
# # warning: constant HTTP::NOT_FOUND is deprecated
797797
#
798-
def deprecate_constant: () -> self
799-
| (interned name, *interned more_names) -> self
798+
def deprecate_constant: (*interned names) -> self
800799

801800
def equal?: (untyped other) -> bool
802801

@@ -830,7 +829,7 @@ class Module
830829

831830
# <!--
832831
# rdoc-file=object.c
833-
# - extended(othermod)
832+
# - (othermod)
834833
# -->
835834
# The equivalent of `included`, but for extended modules.
836835
#
@@ -952,8 +951,9 @@ class Module
952951
# Assign the module to a constant (name starting uppercase) if you want to treat
953952
# it like a regular module.
954953
#
955-
def initialize: () -> void
956-
| () { (Module arg0) -> untyped } -> void
954+
def initialize: () ?{ (Module mod) [self: self] -> void } -> void
955+
956+
def initialize_clone: (Module source, ?freeze: bool?) -> void
957957

958958
# <!--
959959
# rdoc-file=proc.c
@@ -1021,7 +1021,7 @@ class Module
10211021
# end
10221022
# C.instance_methods(false).sort #=> [:method2, :method3, :method4]
10231023
#
1024-
def instance_methods: (?boolish include_super) -> ::Array[Symbol]
1024+
def instance_methods: (?boolish include_super) -> Array[Symbol]
10251025

10261026
# <!--
10271027
# rdoc-file=object.c
@@ -1339,8 +1339,7 @@ class Module
13391339
# -->
13401340
# Makes a list of existing constants private.
13411341
#
1342-
def private_constant: () -> self
1343-
| (interned name, *interned more_names) -> self
1342+
def private_constant: (*interned names) -> self
13441343

13451344
# <!--
13461345
# rdoc-file=object.c
@@ -1357,7 +1356,7 @@ class Module
13571356
# Mod.instance_methods #=> [:method2]
13581357
# Mod.private_instance_methods #=> [:method1]
13591358
#
1360-
def private_instance_methods: (?boolish include_super) -> ::Array[Symbol]
1359+
def private_instance_methods: (?boolish include_super) -> Array[Symbol]
13611360

13621361
# <!--
13631362
# rdoc-file=vm_method.c
@@ -1463,7 +1462,7 @@ class Module
14631462
# Returns a list of the protected instance methods defined in *mod*. If the
14641463
# optional parameter is `false`, the methods of any ancestors are not included.
14651464
#
1466-
def protected_instance_methods: (?boolish include_super) -> ::Array[Symbol]
1465+
def protected_instance_methods: (?boolish include_super) -> Array[Symbol]
14671466

14681467
# <!--
14691468
# rdoc-file=vm_method.c
@@ -1540,8 +1539,7 @@ class Module
15401539
# -->
15411540
# Makes a list of existing constants public.
15421541
#
1543-
def public_constant: () -> self
1544-
| (interned name, *interned more_names) -> self
1542+
def public_constant: (*interned names) -> self
15451543

15461544
# <!--
15471545
# rdoc-file=proc.c

lib/rbs/unit_test/type_assertions.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ def assert_const_type(type, constant_name)
297297
end
298298

299299
def assert_visibility(vis, receiver, method)
300-
omit 'TODO: visibility for types'
300+
puts 'TODO: visibility for types'
301301
end
302302

303303
def assert_type(type, value)

test/stdlib/Module_test.rb

Lines changed: 89 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ def bar; end
312312
end
313313

314314
# With the array version
315-
assert_send_type '(Array[String]) -> Array[String]',
315+
assert_send_type '(Array[Symbol]) -> Array[Symbol]',
316316
mod, visibility, [:foo]
317317
with_string 'foo' do |foo|
318318
assert_send_type '[T < _ToStr] (Array[T]) -> Array[T]',
@@ -346,8 +346,10 @@ def self.foo; end
346346
def self.bar; end
347347
end
348348

349-
assert_send_type '() -> Module',
350-
mod, :private_class_method
349+
disable_verbose do
350+
assert_send_type '() -> Module',
351+
mod, :private_class_method
352+
end
351353

352354
with_interned :foo do |foo|
353355
assert_send_type '(interned) -> Module',
@@ -368,8 +370,10 @@ def self.foo; end
368370
def self.bar; end
369371
end
370372

371-
assert_send_type '() -> Module',
372-
mod, :public_class_method
373+
disable_verbose do
374+
assert_send_type '() -> Module',
375+
mod, :public_class_method
376+
end
373377

374378
with_interned :foo do |foo|
375379
assert_send_type '(interned) -> Module',
@@ -455,8 +459,8 @@ def test_attr_accessor
455459

456460
def test_ruby2_keywords
457461
mod = Module.new do
458-
def a(*x) = 3
459-
def b(*x) = 3
462+
def foo(*x) = 3
463+
def bar(*x) = 3
460464
end
461465

462466
assert_visibility :private,
@@ -612,7 +616,22 @@ def test_const_get
612616
end
613617

614618
def test_const_missing
615-
omit 'todo'
619+
assert_type_meth = method(:assert_type)
620+
mod = Module.new do
621+
define_singleton_method :const_missing do |name|
622+
assert_type_meth.call('Symbol', name)
623+
1r
624+
end
625+
end
626+
627+
assert_type 'Rational',
628+
mod::Foo # Test the `::` syntax works
629+
630+
# Make sure that `const_get` also always passes a symbol
631+
with_interned :Foo do |name|
632+
assert_send_type '(interned) -> Rational',
633+
mod, :const_get, name
634+
end
616635
end
617636

618637
def test_const_set
@@ -625,7 +644,19 @@ def test_const_set
625644
end
626645

627646
def test_define_method
628-
omit 'todo'
647+
with_interned :meth do |name|
648+
assert_send_type '(interned, ^(?) [self: top] -> untyped) -> Symbol',
649+
Module.new, :define_method, name, proc {}
650+
651+
assert_send_type '(interned, Method) -> Symbol',
652+
Module.new, :define_method, name, method(:puts)
653+
654+
assert_send_type '(interned, UnboundMethod) -> Symbol',
655+
Module.new, :define_method, name, method(:puts).unbind
656+
657+
assert_send_type '(interned) { (?) [self: top] -> untyped } -> Symbol',
658+
Module.new, :define_method, name do end
659+
end
629660
end
630661

631662
def constant_visibility_helper(method)
@@ -668,11 +699,22 @@ def test_included_modules
668699
end
669700

670701
def test_initialize
671-
omit 'todo'
702+
assert_send_type '() -> void',
703+
Module.new, :initialize
704+
705+
assert_send_type '() { (Module) [self: Module] -> void } -> void',
706+
Module.new, :initialize do end
672707
end
673708

674709
def test_initialize_clone
675-
omit 'todo'
710+
assert_send_type '(Module) -> void',
711+
Module.new, :initialize_clone, Module.new
712+
713+
714+
with_bool.and_nil do |freeze|
715+
assert_send_type '(Module, freeze: bool?) -> void',
716+
Module.new, :initialize_clone, Module.new, freeze: freeze
717+
end
676718
end
677719

678720
def test_instance_method
@@ -1027,50 +1069,74 @@ def foo = 4
10271069
end
10281070

10291071
def test_append_features
1030-
omit 'todo' # private
1072+
assert_visibility :private,
1073+
Module.new, :append_features
1074+
omit 'todo'
10311075
end
10321076

10331077
def test_const_added
1034-
omit 'todo' # private
1078+
assert_visibility :private,
1079+
Module.new, :const_added
1080+
omit 'todo'
10351081
end
10361082

10371083
def test_extend_object
1038-
omit 'todo' # private
1084+
assert_visibility :private,
1085+
Module.new, :extend_object
1086+
omit 'todo'
10391087
end
10401088

10411089
def test_extended
1042-
omit 'todo' # private
1090+
assert_visibility :private,
1091+
Module.new, :extended
1092+
omit 'todo'
10431093
end
10441094

10451095
def test_included
1046-
omit 'todo' # private
1096+
assert_visibility :private,
1097+
Module.new, :included
1098+
omit 'todo'
10471099
end
10481100

10491101
def test_method_added
1050-
omit 'todo' # private
1102+
assert_visibility :private,
1103+
Module.new, :method_added
1104+
omit 'todo'
10511105
end
10521106

10531107
def test_method_removed
1054-
omit 'todo' # private
1108+
assert_visibility :private,
1109+
Module.new, :method_removed
1110+
omit 'todo'
10551111
end
10561112

10571113
def test_method_undefined
1058-
omit 'todo' # private
1114+
assert_visibility :private,
1115+
Module.new, :method_undefined
1116+
omit 'todo'
10591117
end
10601118

10611119
def test_prepend_features
1062-
omit 'todo' # private
1120+
assert_visibility :private,
1121+
Module.new, :prepend_features
1122+
omit 'todo'
10631123
end
10641124

10651125
def test_prepended
1066-
omit 'todo' # private
1126+
assert_visibility :private,
1127+
Module.new, :prepended
1128+
omit 'todo'
10671129
end
10681130

10691131
def test_remove_const
1070-
omit 'todo' # private
1132+
assert_visibility :private,
1133+
Module.new, :remove_const
1134+
omit 'todo'
10711135
end
10721136

10731137
def test_using
1074-
omit 'todo' # private
1138+
assert_visibility :private,
1139+
Module.new, :using
1140+
omit 'todo'
10751141
end
10761142
end

0 commit comments

Comments
 (0)