sorbet-runtime 0.6.13256 → 0.6.13258
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
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f1f96e18b171fe61567c35fd4a5dc5a12b0cd94cfb3df8855237557c4d125b24
|
|
4
|
+
data.tar.gz: cc38050090b08d0ffe16eaa41cacd8d37d500c95593ac699a46836341ea24e7f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 45b877512b1af1af599c7b4d6879b35e5bc04205c8cb81a4ba8af5091992b5c86aa470d68896e73f8cfe8ed8f0f30fc22f600c25096dfbcde1dcb62572bf653c
|
|
7
|
+
data.tar.gz: a8c74b733ebb4dd5687d3fcdc1675fc42b2e2beb67c7664b5dc0bbd5027043783c3166b4687819f595a3524f777191c8d027f69eed89912baebae0223504ae41
|
|
@@ -246,12 +246,16 @@ class T::Private::Methods::Signature
|
|
|
246
246
|
end
|
|
247
247
|
|
|
248
248
|
def method_desc
|
|
249
|
-
|
|
249
|
+
self.class.method_desc(@method, @method_name)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def self.method_desc(method, method_name, source_loc=method.source_location)
|
|
253
|
+
loc = if source_loc
|
|
250
254
|
source_loc.join(':')
|
|
251
255
|
else
|
|
252
256
|
"<unknown location>"
|
|
253
257
|
end
|
|
254
|
-
"#{
|
|
258
|
+
"#{method.owner}##{method_name} at #{loc}"
|
|
255
259
|
end
|
|
256
260
|
|
|
257
261
|
def force_type_init
|
|
@@ -92,15 +92,15 @@ module T::Private::Methods::SignatureValidation
|
|
|
92
92
|
validate_override_visibility(signature, super_signature)
|
|
93
93
|
end
|
|
94
94
|
else
|
|
95
|
-
validate_non_override_mode(signature)
|
|
95
|
+
validate_non_override_mode(signature.mode, signature.method_name, signature.method)
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
99
|
-
private_class_method def self.pretty_mode(
|
|
100
|
-
if
|
|
101
|
-
'
|
|
99
|
+
private_class_method def self.pretty_mode(mode)
|
|
100
|
+
if mode == Modes.overridable_override
|
|
101
|
+
'overridable.override'
|
|
102
102
|
else
|
|
103
|
-
|
|
103
|
+
mode
|
|
104
104
|
end
|
|
105
105
|
end
|
|
106
106
|
|
|
@@ -138,10 +138,10 @@ module T::Private::Methods::SignatureValidation
|
|
|
138
138
|
end
|
|
139
139
|
end
|
|
140
140
|
|
|
141
|
-
def self.validate_non_override_mode(
|
|
142
|
-
case
|
|
141
|
+
def self.validate_non_override_mode(mode, method_name, method, source_loc=method.source_location)
|
|
142
|
+
case mode
|
|
143
143
|
when Modes.override
|
|
144
|
-
if
|
|
144
|
+
if method_name == :each && method.owner < Enumerable
|
|
145
145
|
# Enumerable#each is the only method in Sorbet's RBI payload that defines an abstract method.
|
|
146
146
|
# Enumerable#each does not actually exist at runtime, but it is required to be implemented by
|
|
147
147
|
# any class which includes Enumerable. We want to declare Enumerable#each as abstract so that
|
|
@@ -151,25 +151,25 @@ module T::Private::Methods::SignatureValidation
|
|
|
151
151
|
# This is a one-off hack, and we should think carefully before adding more methods here.
|
|
152
152
|
nil
|
|
153
153
|
else
|
|
154
|
-
raise "You marked `#{
|
|
154
|
+
raise "You marked `#{method_name}` as #{pretty_mode(mode)}, but that method doesn't already exist in this class/module to be overridden.\n" \
|
|
155
155
|
" Either check for typos and for missing includes or super classes to make the parent method shows up\n" \
|
|
156
|
-
" ... or remove #{pretty_mode(
|
|
156
|
+
" ... or remove #{pretty_mode(mode)} here: #{T::Private::Methods::Signature.method_desc(method, method_name, source_loc)}\n"
|
|
157
157
|
end
|
|
158
158
|
when Modes.standard, *Modes::NON_OVERRIDE_MODES
|
|
159
159
|
# Peaceful
|
|
160
160
|
nil
|
|
161
161
|
else
|
|
162
|
-
raise "Unexpected mode: #{
|
|
162
|
+
raise "Unexpected mode: #{mode}. Please report this bug at https://github.com/sorbet/sorbet/issues"
|
|
163
163
|
end
|
|
164
164
|
|
|
165
165
|
# Given a singleton class, we can check if it belongs to a
|
|
166
166
|
# module by looking at its superclass; given `module M`,
|
|
167
167
|
# `M.singleton_class.superclass == Module`, which is not true
|
|
168
168
|
# for any class.
|
|
169
|
-
owner =
|
|
170
|
-
if (
|
|
169
|
+
owner = method.owner
|
|
170
|
+
if (mode == Modes.abstract || Modes::OVERRIDABLE_MODES.include?(mode)) &&
|
|
171
171
|
owner.singleton_class? && Class === owner && owner.superclass == Module
|
|
172
|
-
raise "Defining an overridable class method (via #{pretty_mode(
|
|
172
|
+
raise "Defining an overridable class method (via #{pretty_mode(mode)}) " \
|
|
173
173
|
"on a module is not allowed. Class methods on " \
|
|
174
174
|
"modules do not get inherited and thus cannot be overridden."
|
|
175
175
|
end
|