rbs 3.10.4 → 4.0.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/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +7 -5
- data/.github/workflows/comments.yml +2 -2
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +16 -26
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +1 -1
- data/.github/workflows/windows.yml +2 -2
- data/.rubocop.yml +2 -2
- data/.vscode/extensions.json +5 -0
- data/.vscode/settings.json +19 -0
- data/CHANGELOG.md +202 -2
- data/Rakefile +9 -23
- data/Steepfile +2 -0
- data/config.yml +457 -13
- data/core/array.rbs +218 -188
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +2 -2
- data/core/class.rbs +6 -5
- data/core/comparable.rbs +45 -31
- data/core/complex.rbs +66 -55
- data/core/dir.rbs +57 -45
- data/core/encoding.rbs +6 -6
- data/core/enumerable.rbs +105 -91
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +24 -3
- data/core/errno.rbs +3 -2
- data/core/errors.rbs +31 -29
- data/core/exception.rbs +12 -12
- data/core/fiber.rbs +47 -36
- data/core/file.rbs +242 -169
- data/core/file_test.rbs +2 -2
- data/core/float.rbs +42 -68
- data/core/gc.rbs +78 -70
- data/core/hash.rbs +70 -60
- data/core/integer.rbs +32 -75
- data/core/io/buffer.rbs +36 -36
- data/core/io/wait.rbs +7 -7
- data/core/io.rbs +192 -146
- data/core/kernel.rbs +198 -147
- data/core/marshal.rbs +3 -3
- data/core/match_data.rbs +14 -12
- data/core/math.rbs +69 -67
- data/core/method.rbs +6 -8
- data/core/module.rbs +148 -88
- data/core/nil_class.rbs +4 -3
- data/core/numeric.rbs +53 -50
- data/core/object.rbs +6 -8
- data/core/object_space.rbs +11 -10
- data/core/pathname.rbs +131 -81
- data/core/proc.rbs +65 -34
- data/core/process.rbs +221 -201
- data/core/ractor.rbs +15 -11
- data/core/random.rbs +21 -3
- data/core/range.rbs +152 -49
- data/core/rational.rbs +5 -56
- data/core/rbs/unnamed/argf.rbs +58 -51
- data/core/rbs/unnamed/env_class.rbs +18 -13
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +7 -116
- data/core/regexp.rbs +236 -197
- data/core/ruby.rbs +1 -1
- data/core/ruby_vm.rbs +32 -30
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +1 -1
- data/core/rubygems/requirement.rbs +5 -5
- data/core/rubygems/rubygems.rbs +5 -3
- data/core/set.rbs +17 -16
- data/core/signal.rbs +2 -2
- data/core/string.rbs +318 -298
- data/core/struct.rbs +26 -25
- data/core/symbol.rbs +25 -24
- data/core/thread.rbs +40 -41
- data/core/time.rbs +47 -42
- data/core/trace_point.rbs +34 -31
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +10 -10
- data/core/warning.rbs +7 -7
- data/docs/collection.md +1 -1
- data/docs/config.md +171 -0
- data/docs/inline.md +576 -0
- data/docs/syntax.md +46 -16
- data/docs/type_fingerprint.md +21 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +595 -98
- data/ext/rbs_extension/class_constants.c +30 -0
- data/ext/rbs_extension/class_constants.h +15 -0
- data/ext/rbs_extension/legacy_location.c +30 -53
- data/ext/rbs_extension/legacy_location.h +37 -0
- data/ext/rbs_extension/main.c +125 -24
- data/include/rbs/ast.h +485 -150
- data/include/rbs/lexer.h +11 -4
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +20 -2
- data/include/rbs/util/rbs_constant_pool.h +0 -3
- data/include/rbs.h +8 -0
- data/lib/rbs/ast/annotation.rb +1 -1
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/ast/declarations.rb +10 -10
- data/lib/rbs/ast/members.rb +14 -14
- data/lib/rbs/ast/ruby/annotations.rb +409 -0
- data/lib/rbs/ast/ruby/comment_block.rb +245 -0
- data/lib/rbs/ast/ruby/declarations.rb +281 -0
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/lib/rbs/ast/ruby/members.rb +723 -0
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +105 -20
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +62 -125
- data/lib/rbs/cli.rb +55 -23
- data/lib/rbs/collection/config/lockfile_generator.rb +8 -4
- data/lib/rbs/collection/sources/git.rb +1 -0
- data/lib/rbs/collection.rb +0 -1
- data/lib/rbs/definition.rb +6 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +119 -63
- data/lib/rbs/definition_builder/method_builder.rb +65 -30
- data/lib/rbs/definition_builder.rb +177 -20
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment/class_entry.rb +69 -0
- data/lib/rbs/environment/module_entry.rb +66 -0
- data/lib/rbs/environment.rb +338 -155
- data/lib/rbs/environment_loader.rb +2 -2
- data/lib/rbs/errors.rb +30 -20
- data/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/lib/rbs/inline_parser.rb +542 -0
- data/lib/rbs/location_aux.rb +36 -4
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/namespace.rb +0 -7
- data/lib/rbs/parser_aux.rb +31 -8
- data/lib/rbs/prototype/helpers.rb +57 -0
- data/lib/rbs/prototype/rb.rb +3 -28
- data/lib/rbs/prototype/rbi.rb +3 -20
- data/lib/rbs/prototype/runtime.rb +10 -2
- data/lib/rbs/resolver/type_name_resolver.rb +0 -8
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/subtractor.rb +4 -3
- data/lib/rbs/test/type_check.rb +5 -2
- data/lib/rbs/type_name.rb +1 -8
- data/lib/rbs/types.rb +88 -78
- data/lib/rbs/unit_test/convertibles.rb +1 -0
- data/lib/rbs/unit_test/type_assertions.rb +35 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +12 -1
- data/rbs.gemspec +3 -2
- data/rust/.gitignore +1 -0
- data/rust/Cargo.lock +378 -0
- data/rust/Cargo.toml +7 -0
- data/rust/ruby-rbs/Cargo.toml +22 -0
- data/rust/ruby-rbs/build.rs +764 -0
- data/rust/ruby-rbs/examples/locations.rs +60 -0
- data/rust/ruby-rbs/src/lib.rs +1 -0
- data/rust/ruby-rbs/src/node/mod.rs +742 -0
- data/rust/ruby-rbs/tests/sanity.rs +47 -0
- data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
- data/rust/ruby-rbs-sys/Cargo.toml +23 -0
- data/rust/ruby-rbs-sys/build.rs +204 -0
- data/rust/ruby-rbs-sys/src/lib.rs +50 -0
- data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
- data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
- data/rust/ruby-rbs-sys/wrapper.h +1 -0
- data/schema/typeParam.json +17 -1
- data/sig/ancestor_builder.rbs +1 -1
- data/sig/ast/ruby/annotations.rbs +421 -0
- data/sig/ast/ruby/comment_block.rbs +127 -0
- data/sig/ast/ruby/declarations.rbs +158 -0
- data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/sig/ast/ruby/members.rbs +178 -0
- data/sig/buffer.rbs +63 -5
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/definition.rbs +6 -0
- data/sig/definition_builder.rbs +3 -1
- data/sig/environment/class_entry.rbs +50 -0
- data/sig/environment/module_entry.rbs +50 -0
- data/sig/environment.rbs +37 -81
- data/sig/errors.rbs +26 -20
- data/sig/inline_parser/comment_association.rbs +71 -0
- data/sig/inline_parser.rbs +124 -0
- data/sig/location.rbs +32 -7
- data/sig/locator.rbs +0 -2
- data/sig/method_builder.rbs +9 -4
- data/sig/namespace.rbs +0 -5
- data/sig/parser.rbs +47 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +0 -3
- data/sig/source.rbs +48 -0
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +0 -5
- data/sig/types.rbs +6 -7
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +491 -143
- data/src/lexer.c +1552 -1314
- data/src/lexer.re +7 -0
- data/src/lexstate.c +8 -1
- data/src/location.c +8 -48
- data/src/parser.c +1107 -409
- data/src/util/rbs_constant_pool.c +0 -4
- data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
- data/stdlib/cgi-escape/0/escape.rbs +4 -4
- data/stdlib/coverage/0/coverage.rbs +4 -3
- data/stdlib/date/0/date.rbs +33 -28
- data/stdlib/date/0/date_time.rbs +24 -23
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +64 -53
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +140 -126
- data/stdlib/forwardable/0/forwardable.rbs +10 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +158 -131
- data/stdlib/monitor/0/monitor.rbs +3 -3
- data/stdlib/net-http/0/net-http.rbs +159 -134
- data/stdlib/objspace/0/objspace.rbs +8 -30
- data/stdlib/open-uri/0/open-uri.rbs +8 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +144 -129
- data/stdlib/optparse/0/optparse.rbs +23 -14
- data/stdlib/pathname/0/pathname.rbs +2 -2
- data/stdlib/pp/0/pp.rbs +9 -8
- data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
- data/stdlib/pstore/0/pstore.rbs +35 -30
- data/stdlib/psych/0/psych.rbs +62 -9
- data/stdlib/psych/0/store.rbs +2 -4
- data/stdlib/pty/0/pty.rbs +9 -6
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +2 -1
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/store.rbs +1 -1
- data/stdlib/ripper/0/ripper.rbs +20 -17
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -20
- data/stdlib/shellwords/0/shellwords.rbs +2 -2
- data/stdlib/socket/0/addrinfo.rbs +9 -9
- data/stdlib/socket/0/basic_socket.rbs +3 -3
- data/stdlib/socket/0/ip_socket.rbs +10 -8
- data/stdlib/socket/0/socket.rbs +10 -9
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +1 -1
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +55 -54
- data/stdlib/strscan/0/string_scanner.rbs +46 -44
- data/stdlib/tempfile/0/tempfile.rbs +24 -20
- data/stdlib/time/0/time.rbs +7 -5
- data/stdlib/tsort/0/tsort.rbs +7 -6
- data/stdlib/uri/0/common.rbs +31 -18
- data/stdlib/uri/0/file.rbs +2 -2
- data/stdlib/uri/0/generic.rbs +9 -2
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/ldap.rbs +2 -2
- data/stdlib/uri/0/mailto.rbs +3 -3
- data/stdlib/uri/0/rfc2396_parser.rbs +6 -5
- data/stdlib/zlib/0/deflate.rbs +4 -3
- data/stdlib/zlib/0/gzip_reader.rbs +6 -6
- data/stdlib/zlib/0/gzip_writer.rbs +14 -12
- data/stdlib/zlib/0/inflate.rbs +1 -1
- data/stdlib/zlib/0/need_dict.rbs +1 -1
- metadata +66 -3
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
module RBS
|
|
2
|
+
module AST
|
|
3
|
+
module Ruby
|
|
4
|
+
module Annotations
|
|
5
|
+
type leading_annotation = ColonMethodTypeAnnotation
|
|
6
|
+
| MethodTypesAnnotation
|
|
7
|
+
| SkipAnnotation
|
|
8
|
+
| ReturnTypeAnnotation
|
|
9
|
+
| InstanceVariableAnnotation
|
|
10
|
+
| ParamTypeAnnotation
|
|
11
|
+
| SplatParamTypeAnnotation
|
|
12
|
+
| DoubleSplatParamTypeAnnotation
|
|
13
|
+
| BlockParamTypeAnnotation
|
|
14
|
+
|
|
15
|
+
type trailing_annotation = NodeTypeAssertion
|
|
16
|
+
| TypeApplicationAnnotation
|
|
17
|
+
| ClassAliasAnnotation
|
|
18
|
+
| ModuleAliasAnnotation
|
|
19
|
+
|
|
20
|
+
type t = leading_annotation | trailing_annotation
|
|
21
|
+
|
|
22
|
+
class Base
|
|
23
|
+
# Location that covers all of the annotation
|
|
24
|
+
#
|
|
25
|
+
attr_reader location: Location
|
|
26
|
+
|
|
27
|
+
# Location of `@rbs`, `@rbs!`, or `:` prefix
|
|
28
|
+
#
|
|
29
|
+
attr_reader prefix_location: Location
|
|
30
|
+
|
|
31
|
+
def initialize: (Location location, Location prefix_location) -> void
|
|
32
|
+
|
|
33
|
+
def buffer: () -> Buffer
|
|
34
|
+
|
|
35
|
+
# Returns the type fingerprint for this annotation
|
|
36
|
+
def type_fingerprint: () -> untyped
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# `: TYPE` annotation attached to nodes
|
|
40
|
+
#
|
|
41
|
+
class NodeTypeAssertion < Base
|
|
42
|
+
attr_reader type: Types::t
|
|
43
|
+
|
|
44
|
+
def initialize: (location: Location, prefix_location: Location, type: Types::t) -> void
|
|
45
|
+
|
|
46
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
47
|
+
|
|
48
|
+
def type_fingerprint: () -> untyped
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class AliasAnnotation < Base
|
|
52
|
+
attr_reader keyword_location: Location
|
|
53
|
+
|
|
54
|
+
attr_reader type_name_location: Location?
|
|
55
|
+
|
|
56
|
+
# The name of the module that will be the target of the alias
|
|
57
|
+
#
|
|
58
|
+
# - `nil` if the module/class name is unspecified
|
|
59
|
+
# - `TypeName` object if the module/class name is specified
|
|
60
|
+
#
|
|
61
|
+
attr_reader type_name: TypeName?
|
|
62
|
+
|
|
63
|
+
def initialize: (location: Location, prefix_location: Location, keyword_location: Location, type_name: TypeName?, type_name_location: Location?) -> void
|
|
64
|
+
|
|
65
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# `: class-alias` annotation
|
|
69
|
+
#
|
|
70
|
+
# ```
|
|
71
|
+
# : class-alias Foo::Bar
|
|
72
|
+
# ^ -- prefix_location
|
|
73
|
+
# ^^^^^^^^^^^^ -- keyword_location
|
|
74
|
+
# ^^^^^^^^ -- type_name_location
|
|
75
|
+
# ```
|
|
76
|
+
#
|
|
77
|
+
class ClassAliasAnnotation < AliasAnnotation
|
|
78
|
+
def type_fingerprint: () -> untyped
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# `: module-alias` annotation
|
|
82
|
+
#
|
|
83
|
+
# ```
|
|
84
|
+
# : module-alias Foo::Bar
|
|
85
|
+
# ^ -- prefix_location
|
|
86
|
+
# ^^^^^^^^^^^^ -- keyword_location
|
|
87
|
+
# ^^^^^^^^ -- type_name_location
|
|
88
|
+
# ```
|
|
89
|
+
#
|
|
90
|
+
class ModuleAliasAnnotation < AliasAnnotation
|
|
91
|
+
def type_fingerprint: () -> untyped
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# `: METHOD-TYPE` annotation in leading comments
|
|
95
|
+
#
|
|
96
|
+
class ColonMethodTypeAnnotation < Base
|
|
97
|
+
attr_reader annotations: Array[AST::Annotation]
|
|
98
|
+
|
|
99
|
+
attr_reader method_type: MethodType
|
|
100
|
+
|
|
101
|
+
def initialize: (location: Location, prefix_location: Location, annotations: Array[AST::Annotation], method_type: MethodType) -> void
|
|
102
|
+
|
|
103
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
104
|
+
|
|
105
|
+
def type_fingerprint: () -> untyped
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# `@rbs METHOD-TYPEs` annotation in leading comments
|
|
109
|
+
#
|
|
110
|
+
# ```
|
|
111
|
+
# @rbs () -> void | %a{foo} () -> String | ...
|
|
112
|
+
# ^^^^ -- prefix_location
|
|
113
|
+
# ^ -- vertical_bar_locations[0]
|
|
114
|
+
# ^ -- vertical_bar_locations[1]
|
|
115
|
+
# ^^^ -- dot3_location
|
|
116
|
+
# ```
|
|
117
|
+
class MethodTypesAnnotation < Base
|
|
118
|
+
class Overload = AST::Members::MethodDefinition::Overload
|
|
119
|
+
|
|
120
|
+
attr_reader overloads: Array[Overload]
|
|
121
|
+
|
|
122
|
+
attr_reader vertical_bar_locations: Array[Location]
|
|
123
|
+
|
|
124
|
+
attr_reader dot3_location: Location?
|
|
125
|
+
|
|
126
|
+
def initialize: (location: Location, prefix_location: Location, overloads: Array[Overload], vertical_bar_locations: Array[Location], dot3_location: Location?) -> void
|
|
127
|
+
|
|
128
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
129
|
+
|
|
130
|
+
def type_fingerprint: () -> untyped
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# `@rbs skip -- comment` annotation in leading comments
|
|
134
|
+
#
|
|
135
|
+
class SkipAnnotation < Base
|
|
136
|
+
attr_reader skip_location: Location
|
|
137
|
+
attr_reader comment_location: Location?
|
|
138
|
+
|
|
139
|
+
def initialize: (location: Location, prefix_location: Location, skip_location: Location, comment_location: Location?) -> void
|
|
140
|
+
|
|
141
|
+
def type_fingerprint: () -> untyped
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# `@rbs return: T -- comment` annotation in leading comments
|
|
145
|
+
#
|
|
146
|
+
# ```
|
|
147
|
+
# @rbs return: String -- Returns a string
|
|
148
|
+
# ^^^ -- prefix_location
|
|
149
|
+
# ^^^^^^ -- return_location
|
|
150
|
+
# ^ -- colon_location
|
|
151
|
+
# ^^^^^^^^^^^^^^^^^^^ -- comment
|
|
152
|
+
# ```
|
|
153
|
+
class ReturnTypeAnnotation < Base
|
|
154
|
+
attr_reader return_location: Location
|
|
155
|
+
|
|
156
|
+
attr_reader colon_location: Location
|
|
157
|
+
|
|
158
|
+
attr_reader return_type: Types::t
|
|
159
|
+
|
|
160
|
+
attr_reader comment_location: Location?
|
|
161
|
+
|
|
162
|
+
def initialize: (
|
|
163
|
+
location: Location,
|
|
164
|
+
prefix_location: Location,
|
|
165
|
+
return_location: Location,
|
|
166
|
+
colon_location: Location,
|
|
167
|
+
return_type: Types::t,
|
|
168
|
+
comment_location: Location?,
|
|
169
|
+
) -> void
|
|
170
|
+
|
|
171
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
172
|
+
|
|
173
|
+
def type_fingerprint: () -> untyped
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# `[T1, T2, ...]` annotation in trailing comments
|
|
177
|
+
#
|
|
178
|
+
# ```
|
|
179
|
+
# #[String, Integer]
|
|
180
|
+
# ^ -- prefix_location
|
|
181
|
+
# ^ -- comma_locations[0]
|
|
182
|
+
# ^ -- close_bracket_location
|
|
183
|
+
# ```
|
|
184
|
+
#
|
|
185
|
+
class TypeApplicationAnnotation < Base
|
|
186
|
+
attr_reader type_args: Array[Types::t]
|
|
187
|
+
|
|
188
|
+
attr_reader close_bracket_location: Location
|
|
189
|
+
|
|
190
|
+
attr_reader comma_locations: Array[Location]
|
|
191
|
+
|
|
192
|
+
def initialize: (
|
|
193
|
+
location: Location,
|
|
194
|
+
prefix_location: Location,
|
|
195
|
+
type_args: Array[Types::t],
|
|
196
|
+
close_bracket_location: Location,
|
|
197
|
+
comma_locations: Array[Location],
|
|
198
|
+
) -> void
|
|
199
|
+
|
|
200
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
201
|
+
|
|
202
|
+
def type_fingerprint: () -> untyped
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# `@rbs IVAR-NAME : TYPE` annotation in leading comments
|
|
206
|
+
#
|
|
207
|
+
# ```
|
|
208
|
+
# @rbs @foo : String -- comment
|
|
209
|
+
# ^^^^ -- prefix_location
|
|
210
|
+
# ^^^^ -- ivar_name_location
|
|
211
|
+
# ^ -- colon_location
|
|
212
|
+
# ^^^^^^^^^^ -- comment_location
|
|
213
|
+
# ```
|
|
214
|
+
class InstanceVariableAnnotation < Base
|
|
215
|
+
attr_reader ivar_name: Symbol
|
|
216
|
+
|
|
217
|
+
attr_reader ivar_name_location: Location
|
|
218
|
+
|
|
219
|
+
attr_reader colon_location: Location
|
|
220
|
+
|
|
221
|
+
attr_reader type: Types::t
|
|
222
|
+
|
|
223
|
+
attr_reader comment_location: Location?
|
|
224
|
+
|
|
225
|
+
def initialize: (
|
|
226
|
+
location: Location,
|
|
227
|
+
prefix_location: Location,
|
|
228
|
+
ivar_name: Symbol,
|
|
229
|
+
ivar_name_location: Location,
|
|
230
|
+
colon_location: Location,
|
|
231
|
+
type: Types::t,
|
|
232
|
+
comment_location: Location?,
|
|
233
|
+
) -> void
|
|
234
|
+
|
|
235
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
236
|
+
|
|
237
|
+
def type_fingerprint: () -> untyped
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
class ParamTypeAnnotation < Base
|
|
241
|
+
attr_reader name_location: Location
|
|
242
|
+
|
|
243
|
+
attr_reader colon_location: Location
|
|
244
|
+
|
|
245
|
+
attr_reader param_type: Types::t
|
|
246
|
+
|
|
247
|
+
attr_reader comment_location: Location?
|
|
248
|
+
|
|
249
|
+
def initialize: (
|
|
250
|
+
location: Location,
|
|
251
|
+
prefix_location: Location,
|
|
252
|
+
name_location: Location,
|
|
253
|
+
colon_location: Location,
|
|
254
|
+
param_type: Types::t,
|
|
255
|
+
comment_location: Location?,
|
|
256
|
+
) -> void
|
|
257
|
+
|
|
258
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
259
|
+
|
|
260
|
+
def type_fingerprint: () -> untyped
|
|
261
|
+
|
|
262
|
+
%a{pure}
|
|
263
|
+
def name: () -> Symbol
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
# `@rbs *name: Type -- comment` annotation in leading comments
|
|
267
|
+
#
|
|
268
|
+
# ```
|
|
269
|
+
# @rbs *a: String -- comment
|
|
270
|
+
# ^^^^ -- prefix_location
|
|
271
|
+
# ^ -- star_location
|
|
272
|
+
# ^ -- name_location
|
|
273
|
+
# ^ -- colon_location
|
|
274
|
+
# ^^^^^^^^^^ -- comment_location
|
|
275
|
+
# ```
|
|
276
|
+
#
|
|
277
|
+
# ```
|
|
278
|
+
# @rbs *: String
|
|
279
|
+
# ^^^^ -- prefix_location
|
|
280
|
+
# ^ -- star_location
|
|
281
|
+
# ^ -- colon_location
|
|
282
|
+
# ```
|
|
283
|
+
#
|
|
284
|
+
class SplatParamTypeAnnotation < Base
|
|
285
|
+
attr_reader star_location: Location
|
|
286
|
+
|
|
287
|
+
attr_reader name_location: Location?
|
|
288
|
+
|
|
289
|
+
attr_reader colon_location: Location
|
|
290
|
+
|
|
291
|
+
attr_reader param_type: Types::t
|
|
292
|
+
|
|
293
|
+
attr_reader comment_location: Location?
|
|
294
|
+
|
|
295
|
+
def initialize: (
|
|
296
|
+
location: Location,
|
|
297
|
+
prefix_location: Location,
|
|
298
|
+
star_location: Location,
|
|
299
|
+
name_location: Location?,
|
|
300
|
+
colon_location: Location,
|
|
301
|
+
param_type: Types::t,
|
|
302
|
+
comment_location: Location?,
|
|
303
|
+
) -> void
|
|
304
|
+
|
|
305
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
306
|
+
|
|
307
|
+
def type_fingerprint: () -> untyped
|
|
308
|
+
|
|
309
|
+
%a{pure}
|
|
310
|
+
def name: () -> Symbol?
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
# `@rbs **name: Type -- comment` annotation in leading comments
|
|
314
|
+
#
|
|
315
|
+
# ```
|
|
316
|
+
# @rbs **b: bool -- comment
|
|
317
|
+
# ^^^^ -- prefix_location
|
|
318
|
+
# ^^ -- star2_location
|
|
319
|
+
# ^ -- name_location
|
|
320
|
+
# ^ -- colon_location
|
|
321
|
+
# ^^^^^^^^^^ -- comment_location
|
|
322
|
+
# ```
|
|
323
|
+
#
|
|
324
|
+
# ```
|
|
325
|
+
# @rbs **: bool
|
|
326
|
+
# ^^^^ -- prefix_location
|
|
327
|
+
# ^^ -- star2_location
|
|
328
|
+
# ^ -- colon_location
|
|
329
|
+
# ```
|
|
330
|
+
#
|
|
331
|
+
class DoubleSplatParamTypeAnnotation < Base
|
|
332
|
+
attr_reader star2_location: Location
|
|
333
|
+
|
|
334
|
+
attr_reader name_location: Location?
|
|
335
|
+
|
|
336
|
+
attr_reader colon_location: Location
|
|
337
|
+
|
|
338
|
+
attr_reader param_type: Types::t
|
|
339
|
+
|
|
340
|
+
attr_reader comment_location: Location?
|
|
341
|
+
|
|
342
|
+
def initialize: (
|
|
343
|
+
location: Location,
|
|
344
|
+
prefix_location: Location,
|
|
345
|
+
star2_location: Location,
|
|
346
|
+
name_location: Location?,
|
|
347
|
+
colon_location: Location,
|
|
348
|
+
param_type: Types::t,
|
|
349
|
+
comment_location: Location?,
|
|
350
|
+
) -> void
|
|
351
|
+
|
|
352
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
353
|
+
|
|
354
|
+
def type_fingerprint: () -> untyped
|
|
355
|
+
|
|
356
|
+
%a{pure}
|
|
357
|
+
def name: () -> Symbol?
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
# `@rbs &name: TYPE -- comment` annotation in leading comments
|
|
361
|
+
#
|
|
362
|
+
# ```
|
|
363
|
+
# @rbs &block: () -> void -- comment
|
|
364
|
+
# ^^^^ -- prefix_location
|
|
365
|
+
# ^ -- ampersand_location
|
|
366
|
+
# ^^^^^ -- name_location
|
|
367
|
+
# ^ -- colon_location
|
|
368
|
+
# ^^^^^^^^^^ -- type_location
|
|
369
|
+
# ^^^^^^^^^^ -- comment_location
|
|
370
|
+
# ```
|
|
371
|
+
#
|
|
372
|
+
# ```
|
|
373
|
+
# @rbs &: ? () -> void
|
|
374
|
+
# ^^^^ -- prefix_location
|
|
375
|
+
# ^ -- ampersand_location
|
|
376
|
+
# ^ -- colon_location
|
|
377
|
+
# ^ -- question_location
|
|
378
|
+
# ^^^^^^^^^^ -- type_location
|
|
379
|
+
# ```
|
|
380
|
+
#
|
|
381
|
+
class BlockParamTypeAnnotation < Base
|
|
382
|
+
attr_reader ampersand_location: Location
|
|
383
|
+
|
|
384
|
+
attr_reader name_location: Location?
|
|
385
|
+
|
|
386
|
+
attr_reader colon_location: Location
|
|
387
|
+
|
|
388
|
+
attr_reader type_location: Location
|
|
389
|
+
|
|
390
|
+
attr_reader type: Types::function
|
|
391
|
+
|
|
392
|
+
attr_reader question_location: Location?
|
|
393
|
+
|
|
394
|
+
attr_reader comment_location: Location?
|
|
395
|
+
|
|
396
|
+
def initialize: (
|
|
397
|
+
location: Location,
|
|
398
|
+
prefix_location: Location,
|
|
399
|
+
ampersand_location: Location,
|
|
400
|
+
name_location: Location?,
|
|
401
|
+
colon_location: Location,
|
|
402
|
+
question_location: Location?,
|
|
403
|
+
type_location: Location,
|
|
404
|
+
type: Types::function,
|
|
405
|
+
comment_location: Location?,
|
|
406
|
+
) -> void
|
|
407
|
+
|
|
408
|
+
def map_type_name: () { (TypeName) -> TypeName } -> self
|
|
409
|
+
|
|
410
|
+
def type_fingerprint: () -> untyped
|
|
411
|
+
|
|
412
|
+
%a{pure} def name: () -> Symbol?
|
|
413
|
+
|
|
414
|
+
def optional?: () -> bool
|
|
415
|
+
|
|
416
|
+
def required?: () -> bool
|
|
417
|
+
end
|
|
418
|
+
end
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
use Prism::Comment
|
|
2
|
+
|
|
3
|
+
module RBS
|
|
4
|
+
module AST
|
|
5
|
+
module Ruby
|
|
6
|
+
# CommentBlock is a collection of comments
|
|
7
|
+
#
|
|
8
|
+
# ```ruby
|
|
9
|
+
# # Comment1 < block1
|
|
10
|
+
# # Comment2 <
|
|
11
|
+
#
|
|
12
|
+
# # Comment3 < block2
|
|
13
|
+
# ```
|
|
14
|
+
#
|
|
15
|
+
# A comment block is a *leading* block or *trailing* block.
|
|
16
|
+
#
|
|
17
|
+
# ```ruby
|
|
18
|
+
# # This is leading block.
|
|
19
|
+
# # This is the second line of the leading block.
|
|
20
|
+
#
|
|
21
|
+
# foo # This is trailing block.
|
|
22
|
+
# # This is second line of the trailing block.
|
|
23
|
+
# ```
|
|
24
|
+
#
|
|
25
|
+
# A leading block is a comment block where all of the comments are at the start of the line content.
|
|
26
|
+
# A trailing block is a comment block where the first comment of the block has something at the line before the comment.
|
|
27
|
+
#
|
|
28
|
+
class CommentBlock
|
|
29
|
+
attr_reader name: Pathname
|
|
30
|
+
|
|
31
|
+
# Sub buffer of the contents of the comments
|
|
32
|
+
#
|
|
33
|
+
attr_reader comment_buffer: Buffer
|
|
34
|
+
|
|
35
|
+
attr_reader offsets: Array[
|
|
36
|
+
[
|
|
37
|
+
Comment,
|
|
38
|
+
Integer, # -- prefix size
|
|
39
|
+
]
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
def initialize: (Buffer source_buffer, Array[Comment]) -> void
|
|
43
|
+
|
|
44
|
+
# Build comment block instances
|
|
45
|
+
def self.build: (Buffer, Array[Comment]) -> Array[instance]
|
|
46
|
+
|
|
47
|
+
# Returns true if the comment block is a *leading* comment, which is attached to the successor node
|
|
48
|
+
def leading?: () -> bool
|
|
49
|
+
|
|
50
|
+
# Returns true if the comment block is a *trailing* comment, which is attached to the predecessor node
|
|
51
|
+
def trailing?: () -> bool
|
|
52
|
+
|
|
53
|
+
# The line number of the first comment in the block
|
|
54
|
+
def start_line: () -> Integer
|
|
55
|
+
|
|
56
|
+
# The line number of the last comment in the block
|
|
57
|
+
def end_line: () -> Integer
|
|
58
|
+
|
|
59
|
+
# The character index of `#comment_buffer` at the start of the lines
|
|
60
|
+
#
|
|
61
|
+
def line_starts: () -> Array[Integer]
|
|
62
|
+
|
|
63
|
+
# Returns the text content of the comment
|
|
64
|
+
def text: (Integer index) -> String
|
|
65
|
+
|
|
66
|
+
# Yields paragraph and annotation
|
|
67
|
+
#
|
|
68
|
+
# A paragraph is a sequence of lines that are separated by annotations.
|
|
69
|
+
# An annotation starts with a line starting with `@rbs` or `:`, and may continue with lines that has more leading spaces.
|
|
70
|
+
#
|
|
71
|
+
# ```
|
|
72
|
+
# # Line 1 ^ Paragraph 1
|
|
73
|
+
# # Line 2 |
|
|
74
|
+
# # |
|
|
75
|
+
# # Line 3 v
|
|
76
|
+
# # @rbs ... < Annotation 1
|
|
77
|
+
# # @rbs ... ^ Annotation 2
|
|
78
|
+
# # ... |
|
|
79
|
+
# # |
|
|
80
|
+
# # ... v
|
|
81
|
+
# # ^ Paragraph 2
|
|
82
|
+
# # Line 4 |
|
|
83
|
+
# # Line 5 v
|
|
84
|
+
# ```
|
|
85
|
+
#
|
|
86
|
+
def each_paragraph: (Array[Symbol] variables) { (Location | AST::Ruby::Annotations::leading_annotation | AnnotationSyntaxError) -> void } -> void
|
|
87
|
+
| (Array[Symbol] variables) -> Enumerator[Location | AST::Ruby::Annotations::leading_annotation | AnnotationSyntaxError]
|
|
88
|
+
|
|
89
|
+
# Returns a trailing annotation if it exists
|
|
90
|
+
#
|
|
91
|
+
# * Returns `nil` if the block is not a type annotation
|
|
92
|
+
# * Returns an annotation if the block has a type annotation
|
|
93
|
+
# * Returns AnnotationSyntaxError if the annotation has a syntax error
|
|
94
|
+
#
|
|
95
|
+
def trailing_annotation: (Array[Symbol] variables) -> (AST::Ruby::Annotations::trailing_annotation | AnnotationSyntaxError | nil)
|
|
96
|
+
|
|
97
|
+
class AnnotationSyntaxError
|
|
98
|
+
attr_reader location: Location
|
|
99
|
+
|
|
100
|
+
attr_reader error: ParsingError
|
|
101
|
+
|
|
102
|
+
def initialize: (Location, ParsingError) -> void
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
private def yield_paragraph: (Integer start_line, Integer current_line, Array[Symbol] variables) { (Location | AST::Ruby::Annotations::leading_annotation | AnnotationSyntaxError) -> void } -> void
|
|
106
|
+
|
|
107
|
+
private def yield_annotation: (Integer start_line, Integer end_line, Integer current_line, Array[Symbol] variables) { (Location | AST::Ruby::Annotations::leading_annotation | AnnotationSyntaxError) -> void } -> void
|
|
108
|
+
|
|
109
|
+
private def parse_annotation_lines: (Integer start_line, Integer end_line, Array[Symbol] variables) -> (AST::Ruby::Annotations::leading_annotation | AnnotationSyntaxError)
|
|
110
|
+
|
|
111
|
+
def comments: () -> Array[Comment]
|
|
112
|
+
|
|
113
|
+
def line_location: (Integer start_line, Integer end_line) -> Location
|
|
114
|
+
|
|
115
|
+
def location: () -> Location
|
|
116
|
+
|
|
117
|
+
private def leading_annotation?: (Integer index) -> bool
|
|
118
|
+
|
|
119
|
+
# Returns an comment object that contains the docs of from the comment block
|
|
120
|
+
#
|
|
121
|
+
# It ignores type annotations and syntax errors.
|
|
122
|
+
#
|
|
123
|
+
def as_comment: () -> AST::Comment?
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
module RBS
|
|
2
|
+
module AST
|
|
3
|
+
module Ruby
|
|
4
|
+
module Declarations
|
|
5
|
+
type t = ClassDecl | ModuleDecl | ConstantDecl | ClassModuleAliasDecl
|
|
6
|
+
|
|
7
|
+
class Base
|
|
8
|
+
attr_reader buffer: Buffer
|
|
9
|
+
|
|
10
|
+
include Helpers::ConstantHelper
|
|
11
|
+
include Helpers::LocationHelper
|
|
12
|
+
|
|
13
|
+
def initialize: (Buffer) -> void
|
|
14
|
+
|
|
15
|
+
def type_fingerprint: () -> untyped
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class ClassDecl < Base
|
|
19
|
+
class SuperClass
|
|
20
|
+
attr_reader operator_location: Location
|
|
21
|
+
|
|
22
|
+
attr_reader type_name_location: Location
|
|
23
|
+
|
|
24
|
+
attr_reader type_name: TypeName
|
|
25
|
+
|
|
26
|
+
attr_reader type_annotation: Annotations::TypeApplicationAnnotation?
|
|
27
|
+
|
|
28
|
+
def type_args: () -> Array[Types::t]
|
|
29
|
+
|
|
30
|
+
alias name type_name
|
|
31
|
+
|
|
32
|
+
alias args type_args
|
|
33
|
+
|
|
34
|
+
def initialize: (Location type_name_location, Location operator_location, TypeName, RBS::AST::Ruby::Annotations::TypeApplicationAnnotation?) -> void
|
|
35
|
+
|
|
36
|
+
def location: () -> Location
|
|
37
|
+
|
|
38
|
+
def type_fingerprint: () -> untyped
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
type member = t | Members::t
|
|
42
|
+
|
|
43
|
+
attr_reader class_name: TypeName
|
|
44
|
+
|
|
45
|
+
attr_reader node: Prism::ClassNode
|
|
46
|
+
|
|
47
|
+
attr_reader super_class: SuperClass?
|
|
48
|
+
|
|
49
|
+
attr_reader members: Array[member]
|
|
50
|
+
|
|
51
|
+
def initialize: (Buffer, TypeName, Prism::ClassNode, SuperClass?) -> void
|
|
52
|
+
|
|
53
|
+
def each_decl: () { (t) -> void } -> void
|
|
54
|
+
| () -> Enumerator[t]
|
|
55
|
+
|
|
56
|
+
def type_params: () -> Array[AST::TypeParam]
|
|
57
|
+
|
|
58
|
+
def location: () -> Location
|
|
59
|
+
|
|
60
|
+
def name_location: () -> Location
|
|
61
|
+
|
|
62
|
+
def type_fingerprint: () -> untyped
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
class ModuleDecl < Base
|
|
66
|
+
type member = t | Members::t
|
|
67
|
+
|
|
68
|
+
attr_reader module_name: TypeName
|
|
69
|
+
|
|
70
|
+
attr_reader node: Prism::ModuleNode
|
|
71
|
+
|
|
72
|
+
attr_reader members: Array[member]
|
|
73
|
+
|
|
74
|
+
def initialize: (Buffer, TypeName, Prism::ModuleNode) -> void
|
|
75
|
+
|
|
76
|
+
def each_decl: () { (t) -> void } -> void
|
|
77
|
+
| () -> Enumerator[t]
|
|
78
|
+
|
|
79
|
+
def type_params: () -> Array[AST::TypeParam]
|
|
80
|
+
|
|
81
|
+
def location: () -> Location
|
|
82
|
+
|
|
83
|
+
def self_types: () -> Array[AST::Declarations::Module::Self]
|
|
84
|
+
|
|
85
|
+
def name_location: () -> Location
|
|
86
|
+
|
|
87
|
+
def type_fingerprint: () -> untyped
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
class ConstantDecl < Base
|
|
91
|
+
type node = Prism::ConstantWriteNode | Prism::ConstantPathWriteNode
|
|
92
|
+
|
|
93
|
+
attr_reader leading_comment: CommentBlock?
|
|
94
|
+
|
|
95
|
+
attr_reader constant_name: TypeName
|
|
96
|
+
|
|
97
|
+
attr_reader node: node
|
|
98
|
+
|
|
99
|
+
attr_reader type_annotation: Annotations::NodeTypeAssertion?
|
|
100
|
+
|
|
101
|
+
def initialize: (Buffer, TypeName, node, CommentBlock?, Annotations::NodeTypeAssertion?) -> void
|
|
102
|
+
|
|
103
|
+
def location: () -> Location
|
|
104
|
+
|
|
105
|
+
def name_location: () -> Location
|
|
106
|
+
|
|
107
|
+
# Returns the type of the constant
|
|
108
|
+
#
|
|
109
|
+
# - When type_anntoation is given, it returns the type from the annotation.
|
|
110
|
+
# - When type_annotation is not given, it returns infered type from the right-hand-side of the constant assignment
|
|
111
|
+
# - Or it returns `untyped` type
|
|
112
|
+
#
|
|
113
|
+
def type: () -> Types::t
|
|
114
|
+
|
|
115
|
+
# Returns the comment content extracted from the leading comment block
|
|
116
|
+
#
|
|
117
|
+
def comment: () -> AST::Comment?
|
|
118
|
+
|
|
119
|
+
def type_fingerprint: () -> untyped
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
class ClassModuleAliasDecl < Base
|
|
123
|
+
type node = Prism::ConstantWriteNode | Prism::ConstantPathWriteNode
|
|
124
|
+
|
|
125
|
+
type annotation = Annotations::ClassAliasAnnotation | Annotations::ModuleAliasAnnotation
|
|
126
|
+
|
|
127
|
+
attr_reader node: node
|
|
128
|
+
|
|
129
|
+
attr_reader leading_comment: CommentBlock?
|
|
130
|
+
|
|
131
|
+
attr_reader new_name: TypeName
|
|
132
|
+
|
|
133
|
+
# The infered old name from the right-hand side of the constant declaration
|
|
134
|
+
#
|
|
135
|
+
# - `nil` if the annotation has the type name
|
|
136
|
+
#
|
|
137
|
+
attr_reader infered_old_name: TypeName?
|
|
138
|
+
|
|
139
|
+
attr_reader annotation: annotation
|
|
140
|
+
|
|
141
|
+
def initialize: (Buffer, node, TypeName, TypeName?, CommentBlock?, annotation) -> void
|
|
142
|
+
|
|
143
|
+
def name_location: () -> Location
|
|
144
|
+
|
|
145
|
+
def location: () -> Location
|
|
146
|
+
|
|
147
|
+
# Returns the old name of the class/module alias
|
|
148
|
+
#
|
|
149
|
+
def old_name: () -> TypeName
|
|
150
|
+
|
|
151
|
+
def comment: () -> Comment?
|
|
152
|
+
|
|
153
|
+
def type_fingerprint: () -> untyped
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|