sorbet-runtime 0.4.4472 → 0.4.4475
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/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
|