rbs 0.13.1 → 0.14.0
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/.github/workflows/ruby.yml +1 -1
- data/.gitignore +0 -1
- data/CHANGELOG.md +7 -2
- data/Gemfile +3 -0
- data/README.md +8 -2
- data/Steepfile +1 -0
- data/bin/annotate-with-rdoc +1 -1
- data/bin/setup +0 -2
- data/docs/CONTRIBUTING.md +1 -0
- data/goodcheck.yml +22 -5
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/definition_builder.rb +4 -5
- data/lib/rbs/environment.rb +1 -1
- data/lib/rbs/namespace.rb +1 -1
- data/lib/rbs/parser.rb +3146 -0
- data/lib/rbs/parser.y +7 -2
- data/lib/rbs/test/setup_helper.rb +4 -4
- data/lib/rbs/test/type_check.rb +2 -2
- data/lib/rbs/type_name.rb +1 -1
- data/lib/rbs/variance_calculator.rb +1 -1
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +1 -1
- data/sig/constant.rbs +2 -2
- data/sig/constant_table.rbs +10 -10
- data/sig/declarations.rbs +1 -1
- data/sig/definition.rbs +1 -1
- data/sig/namespace.rbs +3 -3
- data/sig/parser.rbs +25 -0
- data/sig/substitution.rbs +3 -3
- data/sig/typename.rbs +1 -1
- data/sig/types.rbs +1 -1
- data/sig/writer.rbs +15 -15
- data/stdlib/benchmark/benchmark.rbs +2 -2
- data/stdlib/builtin/basic_object.rbs +54 -54
- data/stdlib/builtin/binding.rbs +42 -42
- data/stdlib/builtin/class.rbs +33 -33
- data/stdlib/builtin/complex.rbs +90 -90
- data/stdlib/builtin/encoding.rbs +33 -33
- data/stdlib/builtin/enumerable.rbs +32 -32
- data/stdlib/builtin/enumerator.rbs +35 -35
- data/stdlib/builtin/errors.rbs +1 -1
- data/stdlib/builtin/exception.rbs +50 -50
- data/stdlib/builtin/false_class.rbs +6 -6
- data/stdlib/builtin/fiber.rbs +14 -14
- data/stdlib/builtin/fiber_error.rbs +1 -1
- data/stdlib/builtin/float.rbs +161 -161
- data/stdlib/builtin/gc.rbs +1 -1
- data/stdlib/builtin/io.rbs +83 -83
- data/stdlib/builtin/kernel.rbs +69 -69
- data/stdlib/builtin/match_data.rbs +1 -1
- data/stdlib/builtin/method.rbs +19 -19
- data/stdlib/builtin/nil_class.rbs +20 -20
- data/stdlib/builtin/numeric.rbs +101 -101
- data/stdlib/builtin/object.rbs +172 -172
- data/stdlib/builtin/proc.rbs +91 -91
- data/stdlib/builtin/range.rbs +2 -4
- data/stdlib/builtin/rational.rbs +83 -83
- data/stdlib/builtin/signal.rbs +7 -7
- data/stdlib/builtin/string.rbs +4 -4
- data/stdlib/builtin/string_io.rbs +1 -1
- data/stdlib/builtin/thread.rbs +185 -185
- data/stdlib/builtin/thread_group.rbs +2 -2
- data/stdlib/builtin/true_class.rbs +9 -9
- data/stdlib/builtin/warning.rbs +1 -1
- data/stdlib/date/date.rbs +2 -2
- data/stdlib/find/find.rbs +10 -10
- data/stdlib/pathname/pathname.rbs +1 -1
- data/stdlib/tmpdir/tmpdir.rbs +12 -12
- metadata +3 -2
data/lib/rbs/parser.y
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
class RBS::Parser
|
2
|
-
token tUIDENT tLIDENT tNAMESPACE tINTERFACEIDENT
|
2
|
+
token tUIDENT tLIDENT tNAMESPACE tINTERFACEIDENT tGLOBALIDENT
|
3
|
+
tLKEYWORD tUKEYWORD tLKEYWORD_Q_E tUKEYWORD_Q_E
|
3
4
|
tIVAR tCLASSVAR
|
4
5
|
tANNOTATION
|
5
6
|
tSTRING tSYMBOL tINTEGER tWRITE_ATTR
|
@@ -846,7 +847,7 @@ rule
|
|
846
847
|
result = val[0]
|
847
848
|
}
|
848
849
|
|
849
|
-
keyword: tLKEYWORD | tUKEYWORD
|
850
|
+
keyword: tLKEYWORD | tUKEYWORD | tLKEYWORD_Q_E | tUKEYWORD_Q_E
|
850
851
|
|
851
852
|
function_type:
|
852
853
|
kLPAREN params kRPAREN kARROW simple_type {
|
@@ -1344,8 +1345,12 @@ def next_token
|
|
1344
1345
|
new_token(:tNAMESPACE)
|
1345
1346
|
when input.scan(/[a-z_]\w*:/)
|
1346
1347
|
new_token(:tLKEYWORD, input.matched.chop.to_sym)
|
1348
|
+
when input.scan(/[a-z_]\w*[?!]:/)
|
1349
|
+
new_token(:tLKEYWORD_Q_E, input.matched.chop.to_sym)
|
1347
1350
|
when input.scan(/[A-Z]\w*:/)
|
1348
1351
|
new_token(:tUKEYWORD, input.matched.chop.to_sym)
|
1352
|
+
when input.scan(/[A-Z]\w*[?!]:/)
|
1353
|
+
new_token(:tUKEYWORD_Q_E, input.matched.chop.to_sym)
|
1349
1354
|
when input.scan(/\$[A-Za-z_]\w*/)
|
1350
1355
|
new_token(:tGLOBALIDENT)
|
1351
1356
|
when input.scan(/@[a-zA-Z_]\w*/)
|
@@ -3,15 +3,15 @@ module RBS
|
|
3
3
|
module SetupHelper
|
4
4
|
class InvalidSampleSizeError < StandardError
|
5
5
|
attr_reader :string
|
6
|
-
|
6
|
+
|
7
7
|
def initialize(string)
|
8
8
|
@string = string
|
9
9
|
super("Sample size should be a positive integer: `#{string}`")
|
10
10
|
end
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
DEFAULT_SAMPLE_SIZE = 100
|
14
|
-
|
14
|
+
|
15
15
|
def get_sample_size(string)
|
16
16
|
case string
|
17
17
|
when ""
|
@@ -32,7 +32,7 @@ module RBS
|
|
32
32
|
when 'rspec'
|
33
33
|
['::RSpec::Mocks::Double']
|
34
34
|
when 'minitest'
|
35
|
-
['::Minitest::Mock']
|
35
|
+
['::Minitest::Mock']
|
36
36
|
else
|
37
37
|
RBS.logger.warn "Unknown test suite - defaults to nil"
|
38
38
|
nil
|
data/lib/rbs/test/type_check.rb
CHANGED
@@ -212,7 +212,7 @@ module RBS
|
|
212
212
|
def value(val, type)
|
213
213
|
if is_double?(val)
|
214
214
|
RBS.logger.info("A double (#{val.inspect}) is detected!")
|
215
|
-
return true
|
215
|
+
return true
|
216
216
|
end
|
217
217
|
|
218
218
|
case type
|
@@ -306,7 +306,7 @@ module RBS
|
|
306
306
|
Test.call(val, IS_AP, ::Array) &&
|
307
307
|
type.types.map.with_index {|ty, index| value(val[index], ty) }.all?
|
308
308
|
when Types::Record
|
309
|
-
Test::call(val, IS_AP, ::Hash) &&
|
309
|
+
Test::call(val, IS_AP, ::Hash) &&
|
310
310
|
type.fields.map {|key, type| value(val[key], type) }.all?
|
311
311
|
when Types::Proc
|
312
312
|
Test::call(val, IS_AP, ::Proc)
|
data/lib/rbs/type_name.rb
CHANGED
data/lib/rbs/version.rb
CHANGED
data/lib/rbs/writer.rb
CHANGED
data/sig/constant.rbs
CHANGED
data/sig/constant_table.rbs
CHANGED
@@ -6,25 +6,25 @@ module RBS
|
|
6
6
|
attr_reader env(): Environment
|
7
7
|
|
8
8
|
def initialize: (builder: DefinitionBuilder) -> void
|
9
|
-
|
9
|
+
|
10
10
|
def absolute_type: (Types::t, context: Array[Namespace]) -> Types::t
|
11
|
-
|
11
|
+
|
12
12
|
def absolute_type_name: (TypeName, context: Array[Namespace], location: Location?) -> TypeName
|
13
|
-
|
13
|
+
|
14
14
|
def name_to_constant: (TypeName) -> Constant?
|
15
|
-
|
15
|
+
|
16
16
|
def split_name: (TypeName) -> Array[Symbol]
|
17
|
-
|
17
|
+
|
18
18
|
def resolve_constant_reference: (TypeName name, context: Array[Namespace]) -> Constant?
|
19
|
-
|
19
|
+
|
20
20
|
def resolve_constant_reference_context: (Symbol, context: Array[Namespace]) -> Constant?
|
21
|
-
|
21
|
+
|
22
22
|
def resolve_constant_reference_inherit: (Symbol, scopes: Array[Namespace], ?no_object: bool) -> Constant?
|
23
|
-
|
23
|
+
|
24
24
|
def constant_scopes: (TypeName) -> Array[Namespace]
|
25
|
-
|
25
|
+
|
26
26
|
def constant_scopes_module: (TypeName, scopes: Array[Namespace]) -> Array[Namespace]
|
27
|
-
|
27
|
+
|
28
28
|
def constant_scopes0: (TypeName, ?scopes: Array[Namespace]) -> Array[Namespace]
|
29
29
|
end
|
30
30
|
end
|
data/sig/declarations.rbs
CHANGED
data/sig/definition.rbs
CHANGED
data/sig/namespace.rbs
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module RBS
|
2
2
|
# Namespace instance represents a _prefix of module names_.
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# vvvvvvvvvvvvvv TypeName
|
5
5
|
# RBS::Namespace
|
6
6
|
# ^^^^^ Namespace
|
@@ -44,7 +44,7 @@ module RBS
|
|
44
44
|
# If `other` is an absolute namespace, it returns `other`.
|
45
45
|
#
|
46
46
|
# Namespace("Foo::") + Namespace("::Bar::") # => ::Bar::
|
47
|
-
#
|
47
|
+
#
|
48
48
|
def +: (Namespace other) -> Namespace
|
49
49
|
|
50
50
|
# Add one path component to self.
|
@@ -62,7 +62,7 @@ module RBS
|
|
62
62
|
|
63
63
|
# Returns true if self is absolute namespace.
|
64
64
|
def absolute?: () -> bool
|
65
|
-
|
65
|
+
|
66
66
|
# Returns true if self is relative namespace.
|
67
67
|
def relative?: () -> bool
|
68
68
|
|
data/sig/parser.rbs
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module RBS
|
2
|
+
class Parser
|
3
|
+
class SyntaxError < StandardError
|
4
|
+
attr_reader token_str: String
|
5
|
+
attr_reader error_value: untyped
|
6
|
+
attr_reader value_stack: untyped?
|
7
|
+
|
8
|
+
def initialize: (token_str: String, error_value: untyped, ?value_stack: untyped?) -> void
|
9
|
+
end
|
10
|
+
|
11
|
+
class SemanticsError < StandardError
|
12
|
+
attr_reader subject: untyped
|
13
|
+
attr_reader location: Location
|
14
|
+
attr_reader original_message: String
|
15
|
+
|
16
|
+
def initialize: (String message, subject: untyped, location: Location) -> void
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.parse_method_type: (String | Buffer, ?variables: Array[Symbol], ?eof_re: Regexp?) -> MethodType
|
20
|
+
|
21
|
+
def self.parse_type: (String | Buffer, ?variables: Array[Symbol], ?eof_re: Regexp?) -> Types::t
|
22
|
+
|
23
|
+
def self.parse_signature: (String | Buffer, ?eof_re: Regexp?) -> Array[AST::Declarations::t]
|
24
|
+
end
|
25
|
+
end
|
data/sig/substitution.rbs
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module RBS
|
2
2
|
# Substitution from type variables to types.
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# The substitution construction is in _destructive_ manner.
|
5
5
|
#
|
6
6
|
# sub = Substitution.new
|
@@ -25,7 +25,7 @@ module RBS
|
|
25
25
|
# Utility method to construct a substitution.
|
26
26
|
# Raises an error when `variables.size != types.size`.
|
27
27
|
# `instance_type` defaults to `nil`.
|
28
|
-
#
|
28
|
+
#
|
29
29
|
# Yields types in `types` and the block value is used if block is given.
|
30
30
|
#
|
31
31
|
def self.build: (Array[Symbol] variables, Array[Types::t] types, ?instance_type: Types::t?) ?{ (Types::t) -> Types::t } -> instance
|
@@ -36,4 +36,4 @@ module RBS
|
|
36
36
|
# Returns a substitution without variables given in `vars`.
|
37
37
|
def without: (*Symbol vars) -> Substitution
|
38
38
|
end
|
39
|
-
end
|
39
|
+
end
|
data/sig/typename.rbs
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module RBS
|
2
2
|
# TypeName represents name of types in RBS.
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# TypeNames are one of the three kind, class, alias, and interface.
|
5
5
|
# *class* type names corresponds to Ruby classes and modules.
|
6
6
|
# There are no corresponding Ruby value to *alias* and *interface* type names.
|
data/sig/types.rbs
CHANGED
data/sig/writer.rbs
CHANGED
@@ -4,37 +4,37 @@ module RBS
|
|
4
4
|
attr_reader indentation: Array[String]
|
5
5
|
|
6
6
|
def initialize: (out: IO) -> void
|
7
|
-
|
7
|
+
|
8
8
|
def indent: (?Integer size) { () -> void } -> void
|
9
|
-
|
9
|
+
|
10
10
|
def prefix: () -> String
|
11
|
-
|
11
|
+
|
12
12
|
def puts: (?String) -> void
|
13
|
-
|
13
|
+
|
14
14
|
def write_annotation: (Array[AST::Annotation]) -> void
|
15
|
-
|
15
|
+
|
16
16
|
def write_comment: (AST::Comment?) -> void
|
17
|
-
|
17
|
+
|
18
18
|
def write: (Array[AST::Declarations::t]) -> void
|
19
|
-
|
19
|
+
|
20
20
|
def write_decl: (AST::Declarations::t) -> void
|
21
|
-
|
21
|
+
|
22
22
|
def write_member: (AST::Declarations::Module::member) -> void
|
23
|
-
|
23
|
+
|
24
24
|
def name_and_params: (TypeName, AST::Declarations::ModuleTypeParams) -> String?
|
25
|
-
|
25
|
+
|
26
26
|
def name_and_args: (TypeName, Array[Types::t]) -> String?
|
27
|
-
|
27
|
+
|
28
28
|
def method_name: (Symbol) -> String
|
29
|
-
|
29
|
+
|
30
30
|
def write_def: (AST::Members::MethodDefinition) -> void
|
31
|
-
|
31
|
+
|
32
32
|
def attribute: (:reader | :writer | :accessor, AST::Members::Attribute) -> void
|
33
|
-
|
33
|
+
|
34
34
|
interface _Located
|
35
35
|
def location: () -> Location?
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
def preserve_empty_line: (_Located?, _Located) -> void
|
39
39
|
end
|
40
40
|
end
|
@@ -53,9 +53,9 @@
|
|
53
53
|
# times: 1.000000 0.000000 1.000000 ( 1.003611)
|
54
54
|
# upto: 1.030000 0.000000 1.030000 ( 1.028098)
|
55
55
|
#
|
56
|
-
# * The times for some benchmarks depend on the order in which items are run.
|
56
|
+
# * The times for some benchmarks depend on the order in which items are run.
|
57
57
|
# These differences are due to the cost of memory allocation and garbage
|
58
|
-
# collection. To avoid these discrepancies, the #bmbm method is provided.
|
58
|
+
# collection. To avoid these discrepancies, the #bmbm method is provided.
|
59
59
|
# For example, to compare ways to sort an array of floats:
|
60
60
|
#
|
61
61
|
# require 'benchmark'
|
@@ -1,108 +1,108 @@
|
|
1
1
|
# BasicObject is the parent class of all classes in Ruby. It's an explicit
|
2
2
|
# blank class.
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# BasicObject can be used for creating object hierarchies independent of Ruby's
|
5
5
|
# object hierarchy, proxy objects like the Delegator class, or other uses where
|
6
6
|
# namespace pollution from Ruby's methods and classes must be avoided.
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# To avoid polluting BasicObject for other users an appropriately named subclass
|
9
9
|
# of BasicObject should be created instead of directly modifying BasicObject:
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# class MyObjectSystem < BasicObject
|
12
12
|
# end
|
13
|
-
#
|
13
|
+
#
|
14
14
|
# BasicObject does not include Kernel (for methods like `puts`) and BasicObject
|
15
15
|
# is outside of the namespace of the standard library so common classes will not
|
16
16
|
# be found without using a full class path.
|
17
|
-
#
|
17
|
+
#
|
18
18
|
# A variety of strategies can be used to provide useful portions of the standard
|
19
19
|
# library to subclasses of BasicObject. A subclass could `include Kernel` to
|
20
20
|
# obtain `puts`, `exit`, etc. A custom Kernel-like module could be created and
|
21
21
|
# included or delegation can be used via #method_missing:
|
22
|
-
#
|
22
|
+
#
|
23
23
|
# class MyObjectSystem < BasicObject
|
24
24
|
# DELEGATE = [:puts, :p]
|
25
|
-
#
|
25
|
+
#
|
26
26
|
# def method_missing(name, *args, &block)
|
27
27
|
# super unless DELEGATE.include? name
|
28
28
|
# ::Kernel.send(name, *args, &block)
|
29
29
|
# end
|
30
|
-
#
|
30
|
+
#
|
31
31
|
# def respond_to_missing?(name, include_private = false)
|
32
32
|
# DELEGATE.include?(name) or super
|
33
33
|
# end
|
34
34
|
# end
|
35
|
-
#
|
35
|
+
#
|
36
36
|
# Access to classes and modules from the Ruby standard library can be obtained
|
37
37
|
# in a BasicObject subclass by referencing the desired constant from the root
|
38
38
|
# like `::File` or `::Enumerator`. Like #method_missing, #const_missing can be
|
39
39
|
# used to delegate constant lookup to `Object`:
|
40
|
-
#
|
40
|
+
#
|
41
41
|
# class MyObjectSystem < BasicObject
|
42
42
|
# def self.const_missing(name)
|
43
43
|
# ::Object.const_get(name)
|
44
44
|
# end
|
45
45
|
# end
|
46
|
-
#
|
46
|
+
#
|
47
47
|
class BasicObject
|
48
48
|
# Boolean negate.
|
49
|
-
#
|
49
|
+
#
|
50
50
|
def !: () -> bool
|
51
51
|
|
52
52
|
# Returns true if two objects are not-equal, otherwise false.
|
53
|
-
#
|
53
|
+
#
|
54
54
|
def !=: (untyped other) -> bool
|
55
55
|
|
56
56
|
# Equality --- At the `Object` level, `==` returns `true` only if `obj` and
|
57
57
|
# `other` are the same object. Typically, this method is overridden in
|
58
58
|
# descendant classes to provide class-specific meaning.
|
59
|
-
#
|
59
|
+
#
|
60
60
|
# Unlike `==`, the `equal?` method should never be overridden by subclasses as
|
61
61
|
# it is used to determine object identity (that is, `a.equal?(b)` if and only if
|
62
62
|
# `a` is the same object as `b`):
|
63
|
-
#
|
63
|
+
#
|
64
64
|
# obj = "a"
|
65
65
|
# other = obj.dup
|
66
|
-
#
|
66
|
+
#
|
67
67
|
# obj == other #=> true
|
68
68
|
# obj.equal? other #=> false
|
69
69
|
# obj.equal? obj #=> true
|
70
|
-
#
|
70
|
+
#
|
71
71
|
# The `eql?` method returns `true` if `obj` and `other` refer to the same hash
|
72
72
|
# key. This is used by Hash to test members for equality. For objects of class
|
73
73
|
# `Object`, `eql?` is synonymous with `==`. Subclasses normally continue this
|
74
74
|
# tradition by aliasing `eql?` to their overridden `==` method, but there are
|
75
75
|
# exceptions. `Numeric` types, for example, perform type conversion across
|
76
76
|
# `==`, but not across `eql?`, so:
|
77
|
-
#
|
77
|
+
#
|
78
78
|
# 1 == 1.0 #=> true
|
79
79
|
# 1.eql? 1.0 #=> false
|
80
|
-
#
|
80
|
+
#
|
81
81
|
def ==: (untyped other) -> bool
|
82
82
|
|
83
83
|
# Returns an integer identifier for `obj`.
|
84
|
-
#
|
84
|
+
#
|
85
85
|
# The same number will be returned on all calls to `object_id` for a given
|
86
86
|
# object, and no two active objects will share an id.
|
87
|
-
#
|
87
|
+
#
|
88
88
|
# Note: that some objects of builtin classes are reused for optimization. This
|
89
89
|
# is the case for immediate values and frozen string literals.
|
90
|
-
#
|
90
|
+
#
|
91
91
|
# Immediate values are not passed by reference but are passed by value: `nil`,
|
92
92
|
# `true`, `false`, Fixnums, Symbols, and some Floats.
|
93
|
-
#
|
93
|
+
#
|
94
94
|
# Object.new.object_id == Object.new.object_id # => false
|
95
95
|
# (21 * 2).object_id == (21 * 2).object_id # => true
|
96
96
|
# "hello".object_id == "hello".object_id # => false
|
97
97
|
# "hi".freeze.object_id == "hi".freeze.object_id # => true
|
98
|
-
#
|
98
|
+
#
|
99
99
|
def __id__: () -> Integer
|
100
100
|
|
101
101
|
# Invokes the method identified by *symbol*, passing it any arguments specified.
|
102
102
|
# You can use `__send__` if the name `send` clashes with an existing method in
|
103
103
|
# *obj*. When the method is identified by a string, the string is converted to a
|
104
104
|
# symbol.
|
105
|
-
#
|
105
|
+
#
|
106
106
|
# class Klass
|
107
107
|
# def hello(*args)
|
108
108
|
# "Hello " + args.join(' ')
|
@@ -110,48 +110,48 @@ class BasicObject
|
|
110
110
|
# end
|
111
111
|
# k = Klass.new
|
112
112
|
# k.send :hello, "gentle", "readers" #=> "Hello gentle readers"
|
113
|
-
#
|
113
|
+
#
|
114
114
|
def __send__: (String | Symbol arg0, *untyped args) -> untyped
|
115
115
|
|
116
116
|
# Equality --- At the `Object` level, `==` returns `true` only if `obj` and
|
117
117
|
# `other` are the same object. Typically, this method is overridden in
|
118
118
|
# descendant classes to provide class-specific meaning.
|
119
|
-
#
|
119
|
+
#
|
120
120
|
# Unlike `==`, the `equal?` method should never be overridden by subclasses as
|
121
121
|
# it is used to determine object identity (that is, `a.equal?(b)` if and only if
|
122
122
|
# `a` is the same object as `b`):
|
123
|
-
#
|
123
|
+
#
|
124
124
|
# obj = "a"
|
125
125
|
# other = obj.dup
|
126
|
-
#
|
126
|
+
#
|
127
127
|
# obj == other #=> true
|
128
128
|
# obj.equal? other #=> false
|
129
129
|
# obj.equal? obj #=> true
|
130
|
-
#
|
130
|
+
#
|
131
131
|
# The `eql?` method returns `true` if `obj` and `other` refer to the same hash
|
132
132
|
# key. This is used by Hash to test members for equality. For objects of class
|
133
133
|
# `Object`, `eql?` is synonymous with `==`. Subclasses normally continue this
|
134
134
|
# tradition by aliasing `eql?` to their overridden `==` method, but there are
|
135
135
|
# exceptions. `Numeric` types, for example, perform type conversion across
|
136
136
|
# `==`, but not across `eql?`, so:
|
137
|
-
#
|
137
|
+
#
|
138
138
|
# 1 == 1.0 #=> true
|
139
139
|
# 1.eql? 1.0 #=> false
|
140
|
-
#
|
140
|
+
#
|
141
141
|
def equal?: (untyped other) -> bool
|
142
142
|
|
143
143
|
# Evaluates a string containing Ruby source code, or the given block, within the
|
144
144
|
# context of the receiver (*obj*). In order to set the context, the variable
|
145
145
|
# `self` is set to *obj* while the code is executing, giving the code access to
|
146
146
|
# *obj*'s instance variables and private methods.
|
147
|
-
#
|
147
|
+
#
|
148
148
|
# When `instance_eval` is given a block, *obj* is also passed in as the block's
|
149
149
|
# only argument.
|
150
|
-
#
|
150
|
+
#
|
151
151
|
# When `instance_eval` is given a `String`, the optional second and third
|
152
152
|
# parameters supply a filename and starting line number that are used when
|
153
153
|
# reporting compilation errors.
|
154
|
-
#
|
154
|
+
#
|
155
155
|
# class KlassWithSecret
|
156
156
|
# def initialize
|
157
157
|
# @secret = 99
|
@@ -165,7 +165,7 @@ class BasicObject
|
|
165
165
|
# k.instance_eval { @secret } #=> 99
|
166
166
|
# k.instance_eval { the_secret } #=> "Ssssh! The secret is 99."
|
167
167
|
# k.instance_eval {|obj| obj == self } #=> true
|
168
|
-
#
|
168
|
+
#
|
169
169
|
def instance_eval: (String, ?String filename, ?Integer lineno) -> untyped
|
170
170
|
| [U] () { (self) -> U } -> U
|
171
171
|
|
@@ -173,7 +173,7 @@ class BasicObject
|
|
173
173
|
# to set the context, the variable `self` is set to *obj* while the code is
|
174
174
|
# executing, giving the code access to *obj*'s instance variables. Arguments
|
175
175
|
# are passed as block parameters.
|
176
|
-
#
|
176
|
+
#
|
177
177
|
# class KlassWithSecret
|
178
178
|
# def initialize
|
179
179
|
# @secret = 99
|
@@ -181,11 +181,11 @@ class BasicObject
|
|
181
181
|
# end
|
182
182
|
# k = KlassWithSecret.new
|
183
183
|
# k.instance_exec(5) {|x| @secret+x } #=> 104
|
184
|
-
#
|
184
|
+
#
|
185
185
|
def instance_exec: [U, V] (*V args) { (*V args) -> U } -> U
|
186
186
|
|
187
187
|
# Not documented
|
188
|
-
#
|
188
|
+
#
|
189
189
|
def initialize: () -> void
|
190
190
|
|
191
191
|
private
|
@@ -199,7 +199,7 @@ class BasicObject
|
|
199
199
|
# method. The example below creates a class `Roman`, which responds to methods
|
200
200
|
# with names consisting of roman numerals, returning the corresponding integer
|
201
201
|
# values.
|
202
|
-
#
|
202
|
+
#
|
203
203
|
# class Roman
|
204
204
|
# def roman_to_int(str)
|
205
205
|
# # ...
|
@@ -209,16 +209,16 @@ class BasicObject
|
|
209
209
|
# roman_to_int(str)
|
210
210
|
# end
|
211
211
|
# end
|
212
|
-
#
|
212
|
+
#
|
213
213
|
# r = Roman.new
|
214
214
|
# r.iv #=> 4
|
215
215
|
# r.xxiii #=> 23
|
216
216
|
# r.mm #=> 2000
|
217
|
-
#
|
217
|
+
#
|
218
218
|
def method_missing: (Symbol, *untyped) -> untyped
|
219
219
|
|
220
220
|
# Invoked as a callback whenever a singleton method is added to the receiver.
|
221
|
-
#
|
221
|
+
#
|
222
222
|
# module Chatty
|
223
223
|
# def Chatty.singleton_method_added(id)
|
224
224
|
# puts "Adding #{id.id2name}"
|
@@ -227,18 +227,18 @@ class BasicObject
|
|
227
227
|
# def two() end
|
228
228
|
# def Chatty.three() end
|
229
229
|
# end
|
230
|
-
#
|
230
|
+
#
|
231
231
|
# *produces:*
|
232
|
-
#
|
232
|
+
#
|
233
233
|
# Adding singleton_method_added
|
234
234
|
# Adding one
|
235
235
|
# Adding three
|
236
|
-
#
|
236
|
+
#
|
237
237
|
def singleton_method_added: (Symbol) -> void
|
238
238
|
|
239
239
|
# Invoked as a callback whenever a singleton method is removed from the
|
240
240
|
# receiver.
|
241
|
-
#
|
241
|
+
#
|
242
242
|
# module Chatty
|
243
243
|
# def Chatty.singleton_method_removed(id)
|
244
244
|
# puts "Removing #{id.id2name}"
|
@@ -251,17 +251,17 @@ class BasicObject
|
|
251
251
|
# remove_method :one
|
252
252
|
# end
|
253
253
|
# end
|
254
|
-
#
|
254
|
+
#
|
255
255
|
# *produces:*
|
256
|
-
#
|
256
|
+
#
|
257
257
|
# Removing three
|
258
258
|
# Removing one
|
259
|
-
#
|
259
|
+
#
|
260
260
|
def singleton_method_removed: (Symbol) -> void
|
261
261
|
|
262
262
|
# Invoked as a callback whenever a singleton method is undefined in the
|
263
263
|
# receiver.
|
264
|
-
#
|
264
|
+
#
|
265
265
|
# module Chatty
|
266
266
|
# def Chatty.singleton_method_undefined(id)
|
267
267
|
# puts "Undefining #{id.id2name}"
|
@@ -271,10 +271,10 @@ class BasicObject
|
|
271
271
|
# undef_method(:one)
|
272
272
|
# end
|
273
273
|
# end
|
274
|
-
#
|
274
|
+
#
|
275
275
|
# *produces:*
|
276
|
-
#
|
276
|
+
#
|
277
277
|
# Undefining one
|
278
|
-
#
|
278
|
+
#
|
279
279
|
def singleton_method_undefined: (Symbol) -> void
|
280
280
|
end
|