rbs 1.7.1 → 1.8.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/CHANGELOG.md +23 -0
- data/core/array.rbs +3 -3
- data/core/builtin.rbs +4 -0
- data/core/enumerable.rbs +3 -3
- data/docs/syntax.md +23 -20
- data/ext/rbs_extension/parser.c +96 -94
- data/ext/rbs_extension/ruby_objs.c +8 -6
- data/ext/rbs_extension/ruby_objs.h +2 -2
- data/lib/rbs/ast/declarations.rb +6 -2
- data/lib/rbs/cli.rb +1 -1
- data/lib/rbs/definition_builder.rb +29 -2
- data/lib/rbs/environment.rb +1 -0
- data/lib/rbs/environment_walker.rb +4 -1
- data/lib/rbs/errors.rb +12 -0
- data/lib/rbs/type_alias_regularity.rb +115 -0
- data/lib/rbs/types.rb +10 -22
- data/lib/rbs/validator.rb +40 -7
- data/lib/rbs/variance_calculator.rb +52 -24
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +1 -1
- data/lib/rbs.rb +1 -0
- data/schema/decls.json +13 -1
- data/schema/types.json +8 -2
- data/sig/declarations.rbs +9 -6
- data/sig/definition_builder.rbs +29 -0
- data/sig/environment_walker.rbs +26 -0
- data/sig/errors.rbs +10 -0
- data/sig/type_alias_regularity.rbs +92 -0
- data/sig/types.rbs +11 -8
- data/sig/validator.rbs +7 -0
- data/sig/variance_calculator.rbs +50 -0
- data/stdlib/date/0/date.rbs +2 -2
- data/stdlib/set/0/set.rbs +3 -3
- data/steep/Gemfile.lock +10 -10
- metadata +4 -2
data/sig/types.rbs
CHANGED
@@ -227,18 +227,21 @@ module RBS
|
|
227
227
|
end
|
228
228
|
|
229
229
|
class Alias
|
230
|
-
|
230
|
+
# foo
|
231
|
+
# ^^^ => name
|
232
|
+
#
|
233
|
+
# foo[bar, baz]
|
234
|
+
# ^^^ => name
|
235
|
+
# ^^^^^^^^^^ => args
|
236
|
+
#
|
237
|
+
type loc = Location[:name, :args]
|
231
238
|
|
232
|
-
|
239
|
+
attr_reader location: loc?
|
233
240
|
|
234
|
-
def initialize: (name: TypeName, location: loc?) -> void
|
241
|
+
def initialize: (name: TypeName, args: Array[t], location: loc?) -> void
|
235
242
|
|
236
243
|
include _TypeBase
|
237
|
-
include
|
238
|
-
include NoSubst
|
239
|
-
include EmptyEachType
|
240
|
-
|
241
|
-
attr_reader location: loc?
|
244
|
+
include Application
|
242
245
|
end
|
243
246
|
|
244
247
|
class Tuple
|
data/sig/validator.rbs
CHANGED
@@ -1,8 +1,15 @@
|
|
1
1
|
module RBS
|
2
2
|
class Validator
|
3
3
|
attr_reader env: Environment
|
4
|
+
|
4
5
|
attr_reader resolver: TypeNameResolver
|
5
6
|
|
7
|
+
attr_reader definition_builder: DefinitionBuilder
|
8
|
+
|
9
|
+
attr_reader type_alias_dependency: TypeAliasDependency
|
10
|
+
|
11
|
+
attr_reader type_alias_regularity: TypeAliasRegularity
|
12
|
+
|
6
13
|
def initialize: (env: Environment, resolver: TypeNameResolver) -> void
|
7
14
|
|
8
15
|
def absolute_type: (Types::t, context: TypeNameResolver::context) { (Types::t) -> TypeName } -> Types::t
|
data/sig/variance_calculator.rbs
CHANGED
@@ -1,7 +1,47 @@
|
|
1
1
|
module RBS
|
2
|
+
# Calculate the use variances of type variables in declaration.
|
3
|
+
#
|
4
|
+
# ```rb
|
5
|
+
# calculator = VarianceCalculator.new(builder: builder)
|
6
|
+
#
|
7
|
+
# # Calculates variances in a method type
|
8
|
+
# result = calculator.in_method_type(method_type: method_type, variables: variables)
|
9
|
+
#
|
10
|
+
# # Calculates variances in a inheritance/mixin/...
|
11
|
+
# result = calculator.in_inherit(name: name, args: args, variables: variables)
|
12
|
+
#
|
13
|
+
# # Calculates variances in a type alias
|
14
|
+
# result = calculator.in_type_alias(name: name, args: args, variables: variables)
|
15
|
+
# ```
|
16
|
+
#
|
17
|
+
# See `RBS::VarianceCaluculator::Result` for information recorded in the `Result` object.
|
18
|
+
#
|
2
19
|
class VarianceCalculator
|
3
20
|
type variance = :unused | :covariant | :contravariant | :invariant
|
4
21
|
|
22
|
+
# Result contains the set of type variables and it's variance in a occurrence.
|
23
|
+
#
|
24
|
+
# ```rb
|
25
|
+
# # Enumerates recorded type variables
|
26
|
+
# result.each do |name, variance|
|
27
|
+
# # name is the name of a type variable
|
28
|
+
# # variance is one of :unused | :covariant | :contravariant | :invariant
|
29
|
+
# end
|
30
|
+
# ```
|
31
|
+
#
|
32
|
+
# You can test with `compatible?` method if the type variable occurrences are compatible with specified (annotated) variance.
|
33
|
+
#
|
34
|
+
# ```rb
|
35
|
+
# # When T is declared as `out T`
|
36
|
+
# result.compatible?(:T, with_annotation: :covariant)
|
37
|
+
#
|
38
|
+
# # When T is declared as `in T`
|
39
|
+
# result.compatible?(:T, with_annotation: :contravariant)
|
40
|
+
#
|
41
|
+
# # When T is declared as `T`
|
42
|
+
# result.compatible?(:T, with_annotation: :invariant)
|
43
|
+
# ```
|
44
|
+
#
|
5
45
|
class Result
|
6
46
|
attr_reader result: Hash[Symbol, variance]
|
7
47
|
|
@@ -18,6 +58,8 @@ module RBS
|
|
18
58
|
def include?: (Symbol) -> bool
|
19
59
|
|
20
60
|
def compatible?: (Symbol, with_annotation: variance) -> bool
|
61
|
+
|
62
|
+
def incompatible?: (AST::Declarations::ModuleTypeParams) -> Set[Symbol]?
|
21
63
|
end
|
22
64
|
|
23
65
|
attr_reader builder: DefinitionBuilder
|
@@ -30,6 +72,14 @@ module RBS
|
|
30
72
|
|
31
73
|
def in_inherit: (name: TypeName, args: Array[Types::t], variables: Array[Symbol]) -> Result
|
32
74
|
|
75
|
+
def in_type_alias: (name: TypeName) -> Result
|
76
|
+
|
77
|
+
private
|
78
|
+
|
33
79
|
def type: (Types::t, result: Result, context: variance) -> void
|
80
|
+
|
81
|
+
def function: (Types::Function, result: Result, context: variance) -> void
|
82
|
+
|
83
|
+
def negate: (variance) -> variance
|
34
84
|
end
|
35
85
|
end
|
data/stdlib/date/0/date.rbs
CHANGED
@@ -446,7 +446,7 @@ class Date
|
|
446
446
|
# DateTime.jd(0,12) + DateTime.new(2001,2,3).ajd
|
447
447
|
# #=> #<DateTime: 2001-02-03T00:00:00+00:00 ...>
|
448
448
|
#
|
449
|
-
def +: (
|
449
|
+
def +: ((Numeric & _ToR) other) -> Date
|
450
450
|
|
451
451
|
# Returns the difference between the two dates if the other is a date object.
|
452
452
|
# If the other is a numeric value, returns a date object pointing `other` days
|
@@ -461,7 +461,7 @@ class Date
|
|
461
461
|
# DateTime.new(2001,2,3) - DateTime.new(2001,2,2,12)
|
462
462
|
# #=> (1/2)
|
463
463
|
#
|
464
|
-
def -: (
|
464
|
+
def -: ((Numeric & _ToR) other) -> Date
|
465
465
|
| (Date other) -> Rational
|
466
466
|
|
467
467
|
# Returns a date object pointing `n` months before self. The argument `n` should
|
data/stdlib/set/0/set.rbs
CHANGED
@@ -122,7 +122,7 @@ class Set[A]
|
|
122
122
|
#
|
123
123
|
# See also Enumerable#include?
|
124
124
|
#
|
125
|
-
def include?: (
|
125
|
+
def include?: (A) -> bool
|
126
126
|
|
127
127
|
alias member? include?
|
128
128
|
|
@@ -168,12 +168,12 @@ class Set[A]
|
|
168
168
|
# Deletes the given object from the set and returns self. Use `subtract` to
|
169
169
|
# delete many items at once.
|
170
170
|
#
|
171
|
-
def delete: (
|
171
|
+
def delete: (A) -> self
|
172
172
|
|
173
173
|
# Deletes the given object from the set and returns self. If the object is not
|
174
174
|
# in the set, returns nil.
|
175
175
|
#
|
176
|
-
def delete?: (
|
176
|
+
def delete?: (A) -> self?
|
177
177
|
|
178
178
|
# Deletes every element of the set for which block evaluates to true, and
|
179
179
|
# returns self. Returns an enumerator if no block is given.
|
data/steep/Gemfile.lock
CHANGED
@@ -9,37 +9,37 @@ GEM
|
|
9
9
|
zeitwerk (~> 2.3)
|
10
10
|
ast (2.4.2)
|
11
11
|
concurrent-ruby (1.1.9)
|
12
|
-
ffi (1.15.
|
13
|
-
i18n (1.8.
|
12
|
+
ffi (1.15.4)
|
13
|
+
i18n (1.8.11)
|
14
14
|
concurrent-ruby (~> 1.0)
|
15
15
|
language_server-protocol (3.16.0.3)
|
16
16
|
listen (3.7.0)
|
17
17
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
18
18
|
rb-inotify (~> 0.9, >= 0.9.10)
|
19
19
|
minitest (5.14.4)
|
20
|
-
parallel (1.
|
21
|
-
parser (3.0.
|
20
|
+
parallel (1.21.0)
|
21
|
+
parser (3.0.3.1)
|
22
22
|
ast (~> 2.4.1)
|
23
23
|
rainbow (3.0.0)
|
24
24
|
rb-fsevent (0.11.0)
|
25
25
|
rb-inotify (0.10.1)
|
26
26
|
ffi (~> 1.0)
|
27
|
-
rbs (1.
|
28
|
-
steep (0.
|
27
|
+
rbs (1.7.1)
|
28
|
+
steep (0.47.0)
|
29
29
|
activesupport (>= 5.1)
|
30
30
|
language_server-protocol (>= 3.15, < 4.0)
|
31
31
|
listen (~> 3.0)
|
32
32
|
parallel (>= 1.0.0)
|
33
33
|
parser (>= 3.0)
|
34
34
|
rainbow (>= 2.2.2, < 4.0)
|
35
|
-
rbs (
|
35
|
+
rbs (~> 1.7.0)
|
36
36
|
terminal-table (>= 2, < 4)
|
37
|
-
terminal-table (3.0.
|
37
|
+
terminal-table (3.0.2)
|
38
38
|
unicode-display_width (>= 1.1.1, < 3)
|
39
39
|
tzinfo (2.0.4)
|
40
40
|
concurrent-ruby (~> 1.0)
|
41
|
-
unicode-display_width (2.
|
42
|
-
zeitwerk (2.
|
41
|
+
unicode-display_width (2.1.0)
|
42
|
+
zeitwerk (2.5.1)
|
43
43
|
|
44
44
|
PLATFORMS
|
45
45
|
ruby
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Soutaro Matsumoto
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: RBS is the language for type signatures for Ruby and standard library
|
14
14
|
definitions.
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- lib/rbs/test/tester.rb
|
175
175
|
- lib/rbs/test/type_check.rb
|
176
176
|
- lib/rbs/type_alias_dependency.rb
|
177
|
+
- lib/rbs/type_alias_regularity.rb
|
177
178
|
- lib/rbs/type_name.rb
|
178
179
|
- lib/rbs/type_name_resolver.rb
|
179
180
|
- lib/rbs/types.rb
|
@@ -225,6 +226,7 @@ files:
|
|
225
226
|
- sig/repository.rbs
|
226
227
|
- sig/substitution.rbs
|
227
228
|
- sig/type_alias_dependency.rbs
|
229
|
+
- sig/type_alias_regularity.rbs
|
228
230
|
- sig/type_name_resolver.rbs
|
229
231
|
- sig/typename.rbs
|
230
232
|
- sig/types.rbs
|