rbs 2.7.0 → 2.8.0.pre.1
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 +29 -0
- data/Gemfile.lock +18 -18
- data/Steepfile +2 -4
- data/core/io/buffer.rbs +15 -0
- data/core/io.rbs +6 -0
- data/docs/syntax.md +77 -32
- data/docs/tools.md +16 -0
- data/ext/rbs_extension/lexer.h +2 -0
- data/ext/rbs_extension/lexstate.c +9 -3
- data/ext/rbs_extension/parser.c +28 -11
- data/ext/rbs_extension/parserstate.c +7 -3
- data/ext/rbs_extension/parserstate.h +1 -1
- data/lib/rbs/cli.rb +4 -3
- data/lib/rbs/collection/config/lockfile_generator.rb +28 -2
- data/lib/rbs/collection/config.rb +21 -0
- data/lib/rbs/definition_builder/ancestor_builder.rb +6 -0
- data/lib/rbs/errors.rb +21 -1
- data/lib/rbs/parser_aux.rb +9 -6
- data/lib/rbs/version.rb +1 -1
- data/sig/collection/config.rbs +8 -0
- data/sig/errors.rbs +14 -0
- data/sig/manifest.yaml +0 -1
- data/sig/parser.rbs +41 -11
- data/stdlib/ipaddr/0/ipaddr.rbs +15 -0
- data/stdlib/socket/0/addrinfo.rbs +2 -1
- data/stdlib/socket/0/constants.rbs +2295 -0
- data/stdlib/socket/0/socket.rbs +899 -8
- data/stdlib/socket/0/socket_error.rbs +5 -0
- data/stdlib/yaml/0/dbm.rbs +1 -49
- data/stdlib/yaml/0/yaml.rbs +171 -0
- data/steep/Gemfile.lock +21 -9
- metadata +8 -4
data/lib/rbs/errors.rb
CHANGED
@@ -148,7 +148,27 @@ module RBS
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def self.check!(type_name, env:, location:)
|
151
|
-
env.class_decls
|
151
|
+
if decl = env.class_decls[type_name]
|
152
|
+
return
|
153
|
+
end
|
154
|
+
|
155
|
+
raise new(type_name: type_name, location: location)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
class InheritModuleError < DefinitionError
|
160
|
+
attr_reader :super_decl
|
161
|
+
|
162
|
+
def initialize(super_decl)
|
163
|
+
@super_decl = super_decl
|
164
|
+
|
165
|
+
super "#{Location.to_string(super_decl.location)}: Cannot inherit a module: #{super_decl.name}"
|
166
|
+
end
|
167
|
+
|
168
|
+
def self.check!(super_decl, env:)
|
169
|
+
return if env.class_decls[super_decl.name].is_a?(Environment::ClassEntry)
|
170
|
+
|
171
|
+
raise new(super_decl)
|
152
172
|
end
|
153
173
|
end
|
154
174
|
|
data/lib/rbs/parser_aux.rb
CHANGED
@@ -2,16 +2,19 @@
|
|
2
2
|
|
3
3
|
module RBS
|
4
4
|
class Parser
|
5
|
-
def self.parse_type(source, line:
|
6
|
-
|
5
|
+
def self.parse_type(source, line: nil, column: nil, range: nil, variables: [])
|
6
|
+
buf = buffer(source)
|
7
|
+
_parse_type(buf, range&.begin || 0, range&.end || buf.last_position, variables, range.nil?)
|
7
8
|
end
|
8
9
|
|
9
|
-
def self.parse_method_type(source, line:
|
10
|
-
|
10
|
+
def self.parse_method_type(source, line: nil, column: nil, range: nil, variables: [])
|
11
|
+
buf = buffer(source)
|
12
|
+
_parse_method_type(buf, range&.begin || 0, range&.end || buf.last_position, variables, range.nil?)
|
11
13
|
end
|
12
14
|
|
13
|
-
def self.parse_signature(source, line:
|
14
|
-
|
15
|
+
def self.parse_signature(source, line: nil, column: nil)
|
16
|
+
buf = buffer(source)
|
17
|
+
_parse_signature(buf, buf.last_position)
|
15
18
|
end
|
16
19
|
|
17
20
|
def self.buffer(source)
|
data/lib/rbs/version.rb
CHANGED
data/sig/collection/config.rbs
CHANGED
@@ -24,6 +24,8 @@ module RBS
|
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
|
+
def validate_gemfile_lock_path!: (lock: Config?, gemfile_lock_path: Pathname) -> void
|
28
|
+
|
27
29
|
def assign_gem: (name: String, version: String?) -> void
|
28
30
|
|
29
31
|
def upsert_gem: (gem_entry? old, gem_entry new) -> void
|
@@ -52,6 +54,8 @@ module RBS
|
|
52
54
|
|
53
55
|
@sources: Array[Sources::_Source]
|
54
56
|
|
57
|
+
def self.find_config_path: () -> Pathname?
|
58
|
+
|
55
59
|
def self.generate_lockfile: (config_path: Pathname, gemfile_lock_path: Pathname, ?with_lockfile: boolish) -> Config
|
56
60
|
|
57
61
|
def self.from_path: (Pathname path) -> Config
|
@@ -75,6 +79,10 @@ module RBS
|
|
75
79
|
|
76
80
|
def gems: () -> Array[gem_entry]
|
77
81
|
|
82
|
+
def gemfile_lock_path=: (Pathname) -> Pathname
|
83
|
+
|
84
|
+
def gemfile_lock_path: () -> Pathname?
|
85
|
+
|
78
86
|
def check_rbs_availability!: () -> void
|
79
87
|
end
|
80
88
|
end
|
data/sig/errors.rbs
CHANGED
@@ -197,6 +197,8 @@ module RBS
|
|
197
197
|
def location: () -> Location[untyped, untyped]?
|
198
198
|
end
|
199
199
|
|
200
|
+
# MixinClassError is raised if a include/prepend/extend has a class (not a module) to mix-in
|
201
|
+
#
|
200
202
|
class MixinClassError < DefinitionError
|
201
203
|
type member = AST::Members::Include | AST::Members::Prepend | AST::Members::Extend
|
202
204
|
|
@@ -212,6 +214,18 @@ module RBS
|
|
212
214
|
def mixin_name: () -> String
|
213
215
|
end
|
214
216
|
|
217
|
+
# InheritModuleError is raised if a class definition inherits a module (not a class)
|
218
|
+
#
|
219
|
+
class InheritModuleError < DefinitionError
|
220
|
+
attr_reader super_decl: AST::Declarations::Class::Super
|
221
|
+
|
222
|
+
def initialize: (AST::Declarations::Class::Super) -> void
|
223
|
+
|
224
|
+
def location: () -> Location[untyped, untyped]?
|
225
|
+
|
226
|
+
def self.check!: (AST::Declarations::Class::Super, env: Environment) -> void
|
227
|
+
end
|
228
|
+
|
215
229
|
class RecursiveTypeAliasError < BaseError
|
216
230
|
attr_reader alias_names: Array[TypeName]
|
217
231
|
attr_reader location: Location[untyped, untyped]?
|
data/sig/manifest.yaml
CHANGED
data/sig/parser.rbs
CHANGED
@@ -1,10 +1,43 @@
|
|
1
1
|
module RBS
|
2
2
|
class Parser
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
# Parse a method type and return it
|
4
|
+
#
|
5
|
+
# When `pos` keyword is specified, skips the first `pos` characters from the input.
|
6
|
+
# If no token is left in the input, it returns `nil`.
|
7
|
+
#
|
8
|
+
# ```ruby
|
9
|
+
# RBS::Parser.parse_method_type("() -> void", range: 0...) # => `() -> void`
|
10
|
+
# RBS::Parser.parse_method_type("() -> void () -> String", range: 11...) # => `() -> String`
|
11
|
+
# RBS::Parser.parse_method_type("() -> void () -> String", range: 23...) # => nil
|
12
|
+
# ```
|
13
|
+
#
|
14
|
+
# `line` and `column` is deprecated and are ignored.
|
15
|
+
#
|
16
|
+
def self.parse_method_type: (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol]) -> MethodType?
|
17
|
+
| (Buffer | String, ?line: top, ?column: top, ?variables: Array[Symbol]) -> MethodType
|
18
|
+
|
19
|
+
# Parse a type and return it
|
20
|
+
#
|
21
|
+
# When `pos` keyword is specified, skips the first `pos` characters from the input.
|
22
|
+
# If no token is left in the input, it returns `nil`.
|
23
|
+
#
|
24
|
+
# ```ruby
|
25
|
+
# RBS::Parser.parse_type("String", range: 0...) # => `String`
|
26
|
+
# RBS::Parser.parse_type("String Integer", pos: 7...) # => `Integer`
|
27
|
+
# RBS::Parser.parse_type("String Integer", pos: 14...) # => nil
|
28
|
+
# ```
|
29
|
+
#
|
30
|
+
# `line` and `column` is deprecated and are ignored.
|
31
|
+
#
|
32
|
+
def self.parse_type: (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol]) -> Types::t?
|
33
|
+
| (Buffer | String, ?line: top, ?column: top, ?variables: Array[Symbol]) -> Types::t
|
34
|
+
|
35
|
+
# Parse whole RBS file and return an array of declarations
|
36
|
+
#
|
37
|
+
# `line` and `column` is deprecated and are ignored.
|
38
|
+
#
|
39
|
+
def self.parse_signature: (Buffer | String) -> Array[AST::Declarations::t]
|
40
|
+
| (Buffer | String, ?line: top, ?column: top) -> Array[AST::Declarations::t]
|
8
41
|
|
9
42
|
KEYWORDS: Hash[String, bot]
|
10
43
|
|
@@ -12,14 +45,11 @@ module RBS
|
|
12
45
|
|
13
46
|
def self.buffer: (String | Buffer source) -> Buffer
|
14
47
|
|
15
|
-
|
16
|
-
def self._parse_type: (Buffer, Integer line, Integer column, Array[Symbol] variables) -> Types::t
|
48
|
+
def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, boolish eof) -> Types::t?
|
17
49
|
|
18
|
-
|
19
|
-
def self._parse_method_type: (Buffer, Integer line, Integer column, Array[Symbol] variables) -> MethodType
|
50
|
+
def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, boolish eof) -> MethodType?
|
20
51
|
|
21
|
-
|
22
|
-
def self._parse_signature: (Buffer, Integer line, Integer column) -> Array[AST::Declarations::t]
|
52
|
+
def self._parse_signature: (Buffer, Integer end_pos) -> Array[AST::Declarations::t]
|
23
53
|
|
24
54
|
class LocatedValue
|
25
55
|
end
|
data/stdlib/ipaddr/0/ipaddr.rbs
CHANGED
@@ -406,3 +406,18 @@ IPAddr::IN6FORMAT: String
|
|
406
406
|
# 128 bit mask for IPv6
|
407
407
|
#
|
408
408
|
IPAddr::IN6MASK: Integer
|
409
|
+
|
410
|
+
# <!-- rdoc-file=lib/ipaddr.rb -->
|
411
|
+
# Regexp *internally* used for parsing IPv4 address.
|
412
|
+
#
|
413
|
+
IPAddr::RE_IPV4ADDRLIKE: Regexp
|
414
|
+
|
415
|
+
# <!-- rdoc-file=lib/ipaddr.rb -->
|
416
|
+
# Regexp *internally* used for parsing IPv6 address.
|
417
|
+
#
|
418
|
+
IPAddr::RE_IPV6ADDRLIKE_COMPRESSED: Regexp
|
419
|
+
|
420
|
+
# <!-- rdoc-file=lib/ipaddr.rb -->
|
421
|
+
# Regexp *internally* used for parsing IPv6 address.
|
422
|
+
#
|
423
|
+
IPAddr::RE_IPV6ADDRLIKE_FULL: Regexp
|
@@ -57,7 +57,8 @@ class Addrinfo
|
|
57
57
|
# #=> [#<Addrinfo: 203.178.141.194:80 TCP (www.kame.net)>,
|
58
58
|
# # #<Addrinfo: [2001:200:dff:fff1:216:3eff:feb1:44d7]:80 TCP (www.kame.net)>]
|
59
59
|
#
|
60
|
-
def self.getaddrinfo: (String nodename, ?String | Integer service, ?Symbol? family, ?Symbol | Integer protocol) -> Array[Addrinfo]
|
60
|
+
def self.getaddrinfo: (String nodename, ?String | Integer | nil service, ?Symbol? family, ?Symbol | Integer protocol) -> Array[Addrinfo]
|
61
|
+
| (String? nodename, ?String | Integer service, ?Symbol? family, ?Symbol | Integer protocol) -> Array[Addrinfo]
|
61
62
|
|
62
63
|
# <!--
|
63
64
|
# rdoc-file=ext/socket/raddrinfo.c
|