sorbet-runtime 0.4.4472 → 0.4.4475
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/types/configuration.rb +5 -5
- data/lib/types/private/methods/_methods.rb +28 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5727cbfa118b02720b1f3da2109beee29cf1b67
|
4
|
+
data.tar.gz: 0b623c19e8d55101802f76519b96b1a029f0b377
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49bff1319ddf918e15f48259afd4a411583384810e4f03cad56cc2ac8a70b864f22e318faa124c402792594da7054b8e1eec7854fece8a20ae90775a47e6c9cd
|
7
|
+
data.tar.gz: 37a01bdeb5d6792737bf44d54e4a6135a9bd0e4f54f854bda52605e293f5ab6ad6c32d3f27e774739c32eca38e06e15c0fbcab5f4752e46a295bad075c5bb38f
|
data/lib/types/configuration.rb
CHANGED
@@ -32,14 +32,14 @@ module T::Configuration
|
|
32
32
|
# def foo; end
|
33
33
|
# end
|
34
34
|
# ```
|
35
|
-
def self.
|
36
|
-
T::Private::Methods.
|
35
|
+
def self.enable_final_checks_on_hooks
|
36
|
+
T::Private::Methods.set_final_checks_on_hooks(true)
|
37
37
|
end
|
38
38
|
|
39
39
|
# Undo the effects of a previous call to
|
40
|
-
# `
|
41
|
-
def self.
|
42
|
-
T::Private::Methods.
|
40
|
+
# `enable_final_checks_on_hooks`.
|
41
|
+
def self.reset_final_checks_on_hooks
|
42
|
+
T::Private::Methods.set_final_checks_on_hooks(false)
|
43
43
|
end
|
44
44
|
|
45
45
|
# Configure the default checked level for a sig with no explicit `.checked`
|
@@ -11,13 +11,18 @@ module T::Private::Methods
|
|
11
11
|
# - they are done possibly before any sig block has run.
|
12
12
|
# - they are done even if the method being defined doesn't have a sig.
|
13
13
|
@final_methods = Set.new
|
14
|
-
# a
|
14
|
+
# a non-singleton is a module for which at least one of the following is true:
|
15
15
|
# - is declared final
|
16
16
|
# - defines a method that is declared final
|
17
|
-
# - includes an
|
18
|
-
# - extends an
|
17
|
+
# - includes an non-singleton
|
18
|
+
# - extends an non-singleton
|
19
|
+
# a singleton is the singleton_class of a non-singleton.
|
20
|
+
# modules_with_final is the set of singletons and non-singletons.
|
19
21
|
@modules_with_final = Set.new
|
20
|
-
|
22
|
+
# this stores the old [included, extended] hooks for Module and inherited hook for Class that we override when
|
23
|
+
# enabling final checks for when those hooks are called. the 'hooks' here don't have anything to do with the 'hooks'
|
24
|
+
# in installed_hooks.
|
25
|
+
@old_hooks = nil
|
21
26
|
|
22
27
|
ARG_NOT_PROVIDED = Object.new
|
23
28
|
PROC_TYPE = Object.new
|
@@ -126,6 +131,9 @@ module T::Private::Methods
|
|
126
131
|
# the final instance methods of target and source_method_names. so, for every m in source_method_names, check if there
|
127
132
|
# is already a method defined on one of target_ancestors with the same name that is final.
|
128
133
|
def self._check_final_ancestors(target, target_ancestors, source_method_names)
|
134
|
+
if !module_with_final?(target)
|
135
|
+
return
|
136
|
+
end
|
129
137
|
# use reverse_each to check farther-up ancestors first, for better error messages. we could avoid this if we were on
|
130
138
|
# the version of ruby that adds the optional argument to method_defined? that allows you to exclude ancestors.
|
131
139
|
target_ancestors.reverse_each do |ancestor|
|
@@ -154,6 +162,7 @@ module T::Private::Methods
|
|
154
162
|
|
155
163
|
def self.add_module_with_final(mod)
|
156
164
|
@modules_with_final.add(mod)
|
165
|
+
@modules_with_final.add(mod.singleton_class)
|
157
166
|
end
|
158
167
|
|
159
168
|
private_class_method def self.module_with_final?(mod)
|
@@ -231,7 +240,9 @@ module T::Private::Methods
|
|
231
240
|
@sig_wrappers[key] = sig_block
|
232
241
|
if current_declaration.final
|
233
242
|
add_final_method(key)
|
234
|
-
|
243
|
+
# use hook_mod, not mod, because for example, we want class C to be marked as having final if we def C.foo as
|
244
|
+
# final. change this to mod to see some final_method tests fail.
|
245
|
+
add_module_with_final(hook_mod)
|
235
246
|
end
|
236
247
|
end
|
237
248
|
|
@@ -369,7 +380,7 @@ module T::Private::Methods
|
|
369
380
|
|
370
381
|
# the module target is adding the methods from the module source to itself. we need to check that for all instance
|
371
382
|
# methods M on source, M is not defined on any of target's ancestors.
|
372
|
-
def self.
|
383
|
+
def self._hook_impl(target, target_ancestors, source)
|
373
384
|
if !module_with_final?(target) && !module_with_final?(source)
|
374
385
|
return
|
375
386
|
end
|
@@ -378,24 +389,28 @@ module T::Private::Methods
|
|
378
389
|
_check_final_ancestors(target, target_ancestors - source.ancestors, source.instance_methods)
|
379
390
|
end
|
380
391
|
|
381
|
-
def self.
|
382
|
-
is_enabled = @
|
392
|
+
def self.set_final_checks_on_hooks(enable)
|
393
|
+
is_enabled = @old_hooks != nil
|
383
394
|
if enable == is_enabled
|
384
395
|
return
|
385
396
|
end
|
386
397
|
if is_enabled
|
387
|
-
@
|
388
|
-
@
|
398
|
+
@old_hooks.each(&:restore)
|
399
|
+
@old_hooks = nil
|
389
400
|
else
|
390
401
|
old_included = T::Private::ClassUtils.replace_method(Module, :included) do |arg|
|
391
402
|
old_included.bind(self).call(arg)
|
392
|
-
::T::Private::Methods.
|
403
|
+
::T::Private::Methods._hook_impl(arg, arg.ancestors, self)
|
393
404
|
end
|
394
405
|
old_extended = T::Private::ClassUtils.replace_method(Module, :extended) do |arg|
|
395
406
|
old_extended.bind(self).call(arg)
|
396
|
-
::T::Private::Methods.
|
407
|
+
::T::Private::Methods._hook_impl(arg, arg.singleton_class.ancestors, self)
|
408
|
+
end
|
409
|
+
old_inherited = T::Private::ClassUtils.replace_method(Class, :inherited) do |arg|
|
410
|
+
old_inherited.bind(self).call(arg)
|
411
|
+
::T::Private::Methods._hook_impl(arg, arg.ancestors, self)
|
397
412
|
end
|
398
|
-
@
|
413
|
+
@old_hooks = [old_included, old_extended, old_inherited]
|
399
414
|
end
|
400
415
|
end
|
401
416
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sorbet-runtime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4475
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stripe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|