sorbet-runtime 0.5.10888 → 0.5.10894
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0e4ca50e40dba17d9e6525f9d45385b3e9323e1a0768501766dfaa16b55f50a
|
4
|
+
data.tar.gz: d10b11ea6372bbdb52e16f384d8ed10d47319aab9815f88f0cfa3d4facb435f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 196f8cd6fcc9c7adb30db052111187c41c7f6ea85aae010cc48bc5ea0149a1cd496547be98bc2a308c6d8307633e253fc680eec1e0352d840829658ab231ac3e
|
7
|
+
data.tar.gz: deb86d5588fb3decdb5bb4826ebc0a2901b7b425cdeadfdb2f0436d92939c24978ca2004fbeb22459525dafd33e83a93ea0414cff23f691358407158819db9ae
|
@@ -91,10 +91,13 @@ module T::Private::ClassUtils
|
|
91
91
|
end
|
92
92
|
|
93
93
|
# Replaces a method, either by overwriting it (if it is defined directly on `mod`) or by
|
94
|
-
# overriding it (if it is defined by one of mod's ancestors).
|
95
|
-
# on which you can call `bind(...).call(...)`
|
96
|
-
#
|
97
|
-
|
94
|
+
# overriding it (if it is defined by one of mod's ancestors). If `original_only` is
|
95
|
+
# false, returns a ReplacedMethod instance on which you can call `bind(...).call(...)`
|
96
|
+
# to call the original method, or `restore` to restore the original method (by
|
97
|
+
# overwriting or removing the override).
|
98
|
+
#
|
99
|
+
# If `original_only` is true, return the `UnboundMethod` representing the original method.
|
100
|
+
def self.replace_method(mod, name, original_only=false, &blk)
|
98
101
|
original_method = mod.instance_method(name)
|
99
102
|
original_visibility = visibility_method_name(mod, name)
|
100
103
|
original_owner = original_method.owner
|
@@ -120,8 +123,12 @@ module T::Private::ClassUtils
|
|
120
123
|
def_with_visibility(mod, name, original_visibility, &blk)
|
121
124
|
end
|
122
125
|
end
|
123
|
-
new_method = mod.instance_method(name)
|
124
126
|
|
125
|
-
|
127
|
+
if original_only
|
128
|
+
original_method
|
129
|
+
else
|
130
|
+
new_method = mod.instance_method(name)
|
131
|
+
ReplacedMethod.new(mod, original_method, new_method, overwritten, original_visibility)
|
132
|
+
end
|
126
133
|
end
|
127
134
|
end
|
@@ -252,7 +252,7 @@ module T::Private::Methods
|
|
252
252
|
# (or unwrap back to the original method).
|
253
253
|
key = method_owner_and_name_to_key(mod, method_name)
|
254
254
|
unless current_declaration.raw
|
255
|
-
T::Private::ClassUtils.replace_method(mod, method_name) do |*args, &blk|
|
255
|
+
T::Private::ClassUtils.replace_method(mod, method_name, true) do |*args, &blk|
|
256
256
|
method_sig = T::Private::Methods.maybe_run_sig_block_for_key(key)
|
257
257
|
method_sig ||= T::Private::Methods._handle_missing_method_signature(
|
258
258
|
self,
|
@@ -501,19 +501,37 @@ module T::Private::Methods
|
|
501
501
|
return
|
502
502
|
end
|
503
503
|
if is_enabled
|
504
|
-
|
504
|
+
# A cut-down version of T::Private::ClassUtils::ReplacedMethod#restore, because we
|
505
|
+
# should only be resetting final hooks during tests.
|
506
|
+
T::Configuration.without_ruby_warnings do
|
507
|
+
Module.define_method(:included, @old_hooks[0])
|
508
|
+
Module.define_method(:extended, @old_hooks[1])
|
509
|
+
Class.define_method(:inherited, @old_hooks[2])
|
510
|
+
end
|
505
511
|
@old_hooks = nil
|
506
512
|
else
|
507
|
-
old_included = T::Private::ClassUtils.replace_method(Module, :included) do |arg|
|
508
|
-
|
513
|
+
old_included = T::Private::ClassUtils.replace_method(Module, :included, true) do |arg|
|
514
|
+
if T::Configuration::AT_LEAST_RUBY_2_7
|
515
|
+
old_included.bind_call(self, arg)
|
516
|
+
else
|
517
|
+
old_included.bind(self).call(arg)
|
518
|
+
end
|
509
519
|
::T::Private::Methods._hook_impl(arg, false, self)
|
510
520
|
end
|
511
|
-
old_extended = T::Private::ClassUtils.replace_method(Module, :extended) do |arg|
|
512
|
-
|
521
|
+
old_extended = T::Private::ClassUtils.replace_method(Module, :extended, true) do |arg|
|
522
|
+
if T::Configuration::AT_LEAST_RUBY_2_7
|
523
|
+
old_extended.bind_call(self, arg)
|
524
|
+
else
|
525
|
+
old_extended.bind(self).call(arg)
|
526
|
+
end
|
513
527
|
::T::Private::Methods._hook_impl(arg, true, self)
|
514
528
|
end
|
515
|
-
old_inherited = T::Private::ClassUtils.replace_method(Class, :inherited) do |arg|
|
516
|
-
|
529
|
+
old_inherited = T::Private::ClassUtils.replace_method(Class, :inherited, true) do |arg|
|
530
|
+
if T::Configuration::AT_LEAST_RUBY_2_7
|
531
|
+
old_inherited.bind_call(self, arg)
|
532
|
+
else
|
533
|
+
old_inherited.bind(self).call(arg)
|
534
|
+
end
|
517
535
|
::T::Private::Methods._hook_impl(arg, false, self)
|
518
536
|
end
|
519
537
|
@old_hooks = [old_included, old_extended, old_inherited]
|
@@ -14,7 +14,7 @@ module T::Private::Methods::CallValidation
|
|
14
14
|
def self.wrap_method_if_needed(mod, method_sig, original_method)
|
15
15
|
original_visibility = visibility_method_name(mod, method_sig.method_name)
|
16
16
|
if method_sig.mode == T::Private::Methods::Modes.abstract
|
17
|
-
T::Private::ClassUtils.replace_method(mod, method_sig.method_name) do |*args, &blk|
|
17
|
+
T::Private::ClassUtils.replace_method(mod, method_sig.method_name, true) do |*args, &blk|
|
18
18
|
# TODO: write a cop to ensure that abstract methods have an empty body
|
19
19
|
#
|
20
20
|
# We allow abstract methods to be implemented by things further down the ancestor chain.
|
data/lib/types/struct.rb
CHANGED
@@ -10,7 +10,7 @@ end
|
|
10
10
|
class T::Struct < T::InexactStruct
|
11
11
|
def self.inherited(subclass)
|
12
12
|
super(subclass)
|
13
|
-
T::Private::ClassUtils.replace_method(subclass.singleton_class, :inherited) do |s|
|
13
|
+
T::Private::ClassUtils.replace_method(subclass.singleton_class, :inherited, true) do |s|
|
14
14
|
super(s)
|
15
15
|
raise "#{self.name} is a subclass of T::Struct and cannot be subclassed"
|
16
16
|
end
|
@@ -23,7 +23,7 @@ class T::ImmutableStruct < T::InexactStruct
|
|
23
23
|
def self.inherited(subclass)
|
24
24
|
super(subclass)
|
25
25
|
|
26
|
-
T::Private::ClassUtils.replace_method(subclass.singleton_class, :inherited) do |s|
|
26
|
+
T::Private::ClassUtils.replace_method(subclass.singleton_class, :inherited, true) do |s|
|
27
27
|
super(s)
|
28
28
|
raise "#{self.name} is a subclass of T::ImmutableStruct and cannot be subclassed"
|
29
29
|
end
|
data/lib/types/types/simple.rb
CHANGED
@@ -4,6 +4,9 @@
|
|
4
4
|
module T::Types
|
5
5
|
# Validates that an object belongs to the specified class.
|
6
6
|
class Simple < Base
|
7
|
+
NAME_METHOD = Module.instance_method(:name)
|
8
|
+
private_constant(:NAME_METHOD)
|
9
|
+
|
7
10
|
attr_reader :raw_type
|
8
11
|
|
9
12
|
def initialize(raw_type)
|
@@ -16,7 +19,7 @@ module T::Types
|
|
16
19
|
#
|
17
20
|
# `name` isn't normally a hot path for types, but it is used in initializing a T::Types::Union,
|
18
21
|
# and so in `T.nilable`, and so in runtime constructions like `x = T.let(nil, T.nilable(Integer))`.
|
19
|
-
@name ||= @raw_type.name.freeze
|
22
|
+
@name ||= (NAME_METHOD.bind(@raw_type).call || @raw_type.name).freeze
|
20
23
|
end
|
21
24
|
|
22
25
|
# overrides Base
|
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.5.
|
4
|
+
version: 0.5.10894
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stripe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-06-
|
11
|
+
date: 2023-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|