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.
Files changed (267) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +7 -5
  5. data/.github/workflows/comments.yml +2 -2
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +16 -26
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +1 -1
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +2 -2
  12. data/.vscode/extensions.json +5 -0
  13. data/.vscode/settings.json +19 -0
  14. data/CHANGELOG.md +202 -2
  15. data/Rakefile +9 -23
  16. data/Steepfile +2 -0
  17. data/config.yml +457 -13
  18. data/core/array.rbs +218 -188
  19. data/core/basic_object.rbs +9 -8
  20. data/core/binding.rbs +0 -2
  21. data/core/builtin.rbs +2 -2
  22. data/core/class.rbs +6 -5
  23. data/core/comparable.rbs +45 -31
  24. data/core/complex.rbs +66 -55
  25. data/core/dir.rbs +57 -45
  26. data/core/encoding.rbs +6 -6
  27. data/core/enumerable.rbs +105 -91
  28. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  29. data/core/enumerator.rbs +24 -3
  30. data/core/errno.rbs +3 -2
  31. data/core/errors.rbs +31 -29
  32. data/core/exception.rbs +12 -12
  33. data/core/fiber.rbs +47 -36
  34. data/core/file.rbs +242 -169
  35. data/core/file_test.rbs +2 -2
  36. data/core/float.rbs +42 -68
  37. data/core/gc.rbs +78 -70
  38. data/core/hash.rbs +70 -60
  39. data/core/integer.rbs +32 -75
  40. data/core/io/buffer.rbs +36 -36
  41. data/core/io/wait.rbs +7 -7
  42. data/core/io.rbs +192 -146
  43. data/core/kernel.rbs +198 -147
  44. data/core/marshal.rbs +3 -3
  45. data/core/match_data.rbs +14 -12
  46. data/core/math.rbs +69 -67
  47. data/core/method.rbs +6 -8
  48. data/core/module.rbs +148 -88
  49. data/core/nil_class.rbs +4 -3
  50. data/core/numeric.rbs +53 -50
  51. data/core/object.rbs +6 -8
  52. data/core/object_space.rbs +11 -10
  53. data/core/pathname.rbs +131 -81
  54. data/core/proc.rbs +65 -34
  55. data/core/process.rbs +221 -201
  56. data/core/ractor.rbs +15 -11
  57. data/core/random.rbs +21 -3
  58. data/core/range.rbs +152 -49
  59. data/core/rational.rbs +5 -56
  60. data/core/rbs/unnamed/argf.rbs +58 -51
  61. data/core/rbs/unnamed/env_class.rbs +18 -13
  62. data/core/rbs/unnamed/main_class.rbs +123 -0
  63. data/core/rbs/unnamed/random.rbs +7 -116
  64. data/core/regexp.rbs +236 -197
  65. data/core/ruby.rbs +1 -1
  66. data/core/ruby_vm.rbs +32 -30
  67. data/core/rubygems/config_file.rbs +5 -5
  68. data/core/rubygems/errors.rbs +1 -1
  69. data/core/rubygems/requirement.rbs +5 -5
  70. data/core/rubygems/rubygems.rbs +5 -3
  71. data/core/set.rbs +17 -16
  72. data/core/signal.rbs +2 -2
  73. data/core/string.rbs +318 -298
  74. data/core/struct.rbs +26 -25
  75. data/core/symbol.rbs +25 -24
  76. data/core/thread.rbs +40 -41
  77. data/core/time.rbs +47 -42
  78. data/core/trace_point.rbs +34 -31
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +10 -10
  81. data/core/warning.rbs +7 -7
  82. data/docs/collection.md +1 -1
  83. data/docs/config.md +171 -0
  84. data/docs/inline.md +576 -0
  85. data/docs/syntax.md +46 -16
  86. data/docs/type_fingerprint.md +21 -0
  87. data/exe/rbs +1 -1
  88. data/ext/rbs_extension/ast_translation.c +595 -98
  89. data/ext/rbs_extension/class_constants.c +30 -0
  90. data/ext/rbs_extension/class_constants.h +15 -0
  91. data/ext/rbs_extension/legacy_location.c +30 -53
  92. data/ext/rbs_extension/legacy_location.h +37 -0
  93. data/ext/rbs_extension/main.c +125 -24
  94. data/include/rbs/ast.h +485 -150
  95. data/include/rbs/lexer.h +11 -4
  96. data/include/rbs/location.h +25 -44
  97. data/include/rbs/parser.h +20 -2
  98. data/include/rbs/util/rbs_constant_pool.h +0 -3
  99. data/include/rbs.h +8 -0
  100. data/lib/rbs/ast/annotation.rb +1 -1
  101. data/lib/rbs/ast/comment.rb +1 -1
  102. data/lib/rbs/ast/declarations.rb +10 -10
  103. data/lib/rbs/ast/members.rb +14 -14
  104. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  105. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  106. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  107. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  108. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  109. data/lib/rbs/ast/ruby/members.rb +723 -0
  110. data/lib/rbs/ast/type_param.rb +24 -4
  111. data/lib/rbs/buffer.rb +105 -20
  112. data/lib/rbs/cli/diff.rb +16 -15
  113. data/lib/rbs/cli/validate.rb +62 -125
  114. data/lib/rbs/cli.rb +55 -23
  115. data/lib/rbs/collection/config/lockfile_generator.rb +8 -4
  116. data/lib/rbs/collection/sources/git.rb +1 -0
  117. data/lib/rbs/collection.rb +0 -1
  118. data/lib/rbs/definition.rb +6 -1
  119. data/lib/rbs/definition_builder/ancestor_builder.rb +119 -63
  120. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  121. data/lib/rbs/definition_builder.rb +177 -20
  122. data/lib/rbs/diff.rb +7 -1
  123. data/lib/rbs/environment/class_entry.rb +69 -0
  124. data/lib/rbs/environment/module_entry.rb +66 -0
  125. data/lib/rbs/environment.rb +338 -155
  126. data/lib/rbs/environment_loader.rb +2 -2
  127. data/lib/rbs/errors.rb +30 -20
  128. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  129. data/lib/rbs/inline_parser.rb +542 -0
  130. data/lib/rbs/location_aux.rb +36 -4
  131. data/lib/rbs/locator.rb +5 -1
  132. data/lib/rbs/method_type.rb +5 -3
  133. data/lib/rbs/namespace.rb +0 -7
  134. data/lib/rbs/parser_aux.rb +31 -8
  135. data/lib/rbs/prototype/helpers.rb +57 -0
  136. data/lib/rbs/prototype/rb.rb +3 -28
  137. data/lib/rbs/prototype/rbi.rb +3 -20
  138. data/lib/rbs/prototype/runtime.rb +10 -2
  139. data/lib/rbs/resolver/type_name_resolver.rb +0 -8
  140. data/lib/rbs/source.rb +99 -0
  141. data/lib/rbs/subtractor.rb +4 -3
  142. data/lib/rbs/test/type_check.rb +5 -2
  143. data/lib/rbs/type_name.rb +1 -8
  144. data/lib/rbs/types.rb +88 -78
  145. data/lib/rbs/unit_test/convertibles.rb +1 -0
  146. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  147. data/lib/rbs/validator.rb +2 -2
  148. data/lib/rbs/version.rb +1 -1
  149. data/lib/rbs.rb +12 -1
  150. data/rbs.gemspec +3 -2
  151. data/rust/.gitignore +1 -0
  152. data/rust/Cargo.lock +378 -0
  153. data/rust/Cargo.toml +7 -0
  154. data/rust/ruby-rbs/Cargo.toml +22 -0
  155. data/rust/ruby-rbs/build.rs +764 -0
  156. data/rust/ruby-rbs/examples/locations.rs +60 -0
  157. data/rust/ruby-rbs/src/lib.rs +1 -0
  158. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  159. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  160. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  161. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  162. data/rust/ruby-rbs-sys/build.rs +204 -0
  163. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  164. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  165. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  166. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  167. data/schema/typeParam.json +17 -1
  168. data/sig/ancestor_builder.rbs +1 -1
  169. data/sig/ast/ruby/annotations.rbs +421 -0
  170. data/sig/ast/ruby/comment_block.rbs +127 -0
  171. data/sig/ast/ruby/declarations.rbs +158 -0
  172. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  173. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  174. data/sig/ast/ruby/members.rbs +178 -0
  175. data/sig/buffer.rbs +63 -5
  176. data/sig/cli/diff.rbs +5 -11
  177. data/sig/cli/validate.rbs +12 -8
  178. data/sig/cli.rbs +18 -18
  179. data/sig/definition.rbs +6 -0
  180. data/sig/definition_builder.rbs +3 -1
  181. data/sig/environment/class_entry.rbs +50 -0
  182. data/sig/environment/module_entry.rbs +50 -0
  183. data/sig/environment.rbs +37 -81
  184. data/sig/errors.rbs +26 -20
  185. data/sig/inline_parser/comment_association.rbs +71 -0
  186. data/sig/inline_parser.rbs +124 -0
  187. data/sig/location.rbs +32 -7
  188. data/sig/locator.rbs +0 -2
  189. data/sig/method_builder.rbs +9 -4
  190. data/sig/namespace.rbs +0 -5
  191. data/sig/parser.rbs +47 -13
  192. data/sig/prototype/helpers.rbs +2 -0
  193. data/sig/resolver/type_name_resolver.rbs +0 -3
  194. data/sig/source.rbs +48 -0
  195. data/sig/type_param.rbs +13 -8
  196. data/sig/typename.rbs +0 -5
  197. data/sig/types.rbs +6 -7
  198. data/sig/unit_test/spy.rbs +0 -8
  199. data/sig/unit_test/type_assertions.rbs +11 -0
  200. data/src/ast.c +491 -143
  201. data/src/lexer.c +1552 -1314
  202. data/src/lexer.re +7 -0
  203. data/src/lexstate.c +8 -1
  204. data/src/location.c +8 -48
  205. data/src/parser.c +1107 -409
  206. data/src/util/rbs_constant_pool.c +0 -4
  207. data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
  208. data/stdlib/cgi-escape/0/escape.rbs +4 -4
  209. data/stdlib/coverage/0/coverage.rbs +4 -3
  210. data/stdlib/date/0/date.rbs +33 -28
  211. data/stdlib/date/0/date_time.rbs +24 -23
  212. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  213. data/stdlib/digest/0/digest.rbs +110 -0
  214. data/stdlib/erb/0/erb.rbs +64 -53
  215. data/stdlib/etc/0/etc.rbs +55 -50
  216. data/stdlib/fileutils/0/fileutils.rbs +140 -126
  217. data/stdlib/forwardable/0/forwardable.rbs +10 -10
  218. data/stdlib/io-console/0/io-console.rbs +2 -2
  219. data/stdlib/json/0/json.rbs +158 -131
  220. data/stdlib/monitor/0/monitor.rbs +3 -3
  221. data/stdlib/net-http/0/net-http.rbs +159 -134
  222. data/stdlib/objspace/0/objspace.rbs +8 -30
  223. data/stdlib/open-uri/0/open-uri.rbs +8 -8
  224. data/stdlib/open3/0/open3.rbs +469 -10
  225. data/stdlib/openssl/0/openssl.rbs +144 -129
  226. data/stdlib/optparse/0/optparse.rbs +23 -14
  227. data/stdlib/pathname/0/pathname.rbs +2 -2
  228. data/stdlib/pp/0/pp.rbs +9 -8
  229. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  230. data/stdlib/pstore/0/pstore.rbs +35 -30
  231. data/stdlib/psych/0/psych.rbs +62 -9
  232. data/stdlib/psych/0/store.rbs +2 -4
  233. data/stdlib/pty/0/pty.rbs +9 -6
  234. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  235. data/stdlib/rdoc/0/code_object.rbs +2 -1
  236. data/stdlib/rdoc/0/parser.rbs +1 -1
  237. data/stdlib/rdoc/0/store.rbs +1 -1
  238. data/stdlib/ripper/0/ripper.rbs +20 -17
  239. data/stdlib/securerandom/0/manifest.yaml +2 -0
  240. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  241. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  242. data/stdlib/socket/0/addrinfo.rbs +9 -9
  243. data/stdlib/socket/0/basic_socket.rbs +3 -3
  244. data/stdlib/socket/0/ip_socket.rbs +10 -8
  245. data/stdlib/socket/0/socket.rbs +10 -9
  246. data/stdlib/socket/0/tcp_server.rbs +1 -1
  247. data/stdlib/socket/0/tcp_socket.rbs +1 -1
  248. data/stdlib/socket/0/udp_socket.rbs +1 -1
  249. data/stdlib/socket/0/unix_server.rbs +1 -1
  250. data/stdlib/stringio/0/stringio.rbs +55 -54
  251. data/stdlib/strscan/0/string_scanner.rbs +46 -44
  252. data/stdlib/tempfile/0/tempfile.rbs +24 -20
  253. data/stdlib/time/0/time.rbs +7 -5
  254. data/stdlib/tsort/0/tsort.rbs +7 -6
  255. data/stdlib/uri/0/common.rbs +31 -18
  256. data/stdlib/uri/0/file.rbs +2 -2
  257. data/stdlib/uri/0/generic.rbs +9 -2
  258. data/stdlib/uri/0/http.rbs +2 -2
  259. data/stdlib/uri/0/ldap.rbs +2 -2
  260. data/stdlib/uri/0/mailto.rbs +3 -3
  261. data/stdlib/uri/0/rfc2396_parser.rbs +6 -5
  262. data/stdlib/zlib/0/deflate.rbs +4 -3
  263. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  264. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  265. data/stdlib/zlib/0/inflate.rbs +1 -1
  266. data/stdlib/zlib/0/need_dict.rbs +1 -1
  267. metadata +66 -3
@@ -0,0 +1,11 @@
1
+ module RBS
2
+ module AST
3
+ module Ruby
4
+ module Helpers
5
+ module ConstantHelper
6
+ def self?.constant_as_type_name: (Prism::node?) -> TypeName?
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module RBS
2
+ module AST
3
+ module Ruby
4
+ module Helpers
5
+ module LocationHelper : _WithBuffer
6
+ interface _WithBuffer
7
+ def buffer: () -> Buffer
8
+ end
9
+
10
+ def rbs_location: (Prism::Location) -> Location
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,178 @@
1
+ module RBS
2
+ module AST
3
+ module Ruby
4
+ module Members
5
+ class Base
6
+ attr_reader buffer: Buffer
7
+
8
+ def initialize: (Buffer) -> void
9
+
10
+ include Helpers::LocationHelper
11
+
12
+ def type_fingerprint: () -> untyped
13
+ end
14
+
15
+ type t = DefMember
16
+ | IncludeMember | ExtendMember | PrependMember
17
+ | AttrReaderMember | AttrWriterMember | AttrAccessorMember
18
+ | InstanceVariableMember
19
+
20
+ class MethodTypeAnnotation
21
+ class DocStyle
22
+ type param_type_annotation = Annotations::ParamTypeAnnotation
23
+ | Annotations::SplatParamTypeAnnotation
24
+ | Annotations::DoubleSplatParamTypeAnnotation
25
+ | Annotations::BlockParamTypeAnnotation
26
+
27
+ attr_accessor return_type_annotation: Annotations::ReturnTypeAnnotation | Annotations::NodeTypeAssertion | nil
28
+
29
+ attr_reader required_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
30
+ attr_reader optional_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
31
+ attr_accessor rest_positionals: Annotations::SplatParamTypeAnnotation | Symbol | true | nil
32
+ attr_reader trailing_positionals: Array[Annotations::ParamTypeAnnotation | Symbol]
33
+ attr_reader required_keywords: Hash[Symbol, Annotations::ParamTypeAnnotation | Symbol]
34
+ attr_reader optional_keywords: Hash[Symbol, Annotations::ParamTypeAnnotation | Symbol]
35
+ attr_accessor rest_keywords: Annotations::DoubleSplatParamTypeAnnotation | Symbol | true | nil
36
+ attr_accessor block: Annotations::BlockParamTypeAnnotation | Symbol | true | nil
37
+
38
+ def initialize: () -> void
39
+
40
+ def self.build: (Array[param_type_annotation], Annotations::ReturnTypeAnnotation | Annotations::NodeTypeAssertion | nil, Prism::DefNode) -> [DocStyle, Array[param_type_annotation]]
41
+
42
+ def all_param_annotations: () -> Array[param_type_annotation | Symbol | true | nil]
43
+
44
+ def map_type_name: () { (TypeName) -> TypeName } -> self
45
+
46
+ def method_type: () -> MethodType
47
+
48
+ def type_fingerprint: () -> untyped
49
+ end
50
+
51
+ type type_annotations = DocStyle | Array[Annotations::ColonMethodTypeAnnotation | Annotations::MethodTypesAnnotation] | nil
52
+
53
+ attr_reader type_annotations: type_annotations
54
+
55
+ def initialize: (type_annotations: type_annotations) -> void
56
+
57
+ def map_type_name: { (TypeName) -> TypeName } -> self
58
+
59
+ # Returns the method type annotations from the comment block
60
+ #
61
+ # Returns a tuple of `DefAnnotations` object, array of unused leading annotations, and unused trailing annotation.
62
+ #
63
+ def self.build: (CommentBlock? leading_block, CommentBlock? trailing_block, Array[Symbol], Prism::DefNode) -> [
64
+ MethodTypeAnnotation,
65
+ Array[Annotations::leading_annotation | CommentBlock::AnnotationSyntaxError],
66
+ Annotations::trailing_annotation | CommentBlock::AnnotationSyntaxError | nil
67
+ ]
68
+
69
+ # Returns `true` if it doesn't have any annotation
70
+ def empty?: () -> bool
71
+
72
+ # Returns the method type overloads
73
+ #
74
+ def overloads: () -> Array[AST::Members::MethodDefinition::Overload]
75
+
76
+ def overloading?: () -> bool
77
+
78
+ def type_fingerprint: () -> untyped
79
+ end
80
+
81
+ class DefMember < Base
82
+ class Overload = AST::Members::MethodDefinition::Overload
83
+
84
+ attr_reader name: Symbol
85
+ attr_reader node: Prism::DefNode
86
+ attr_reader method_type: MethodTypeAnnotation
87
+ attr_reader leading_comment: CommentBlock?
88
+
89
+ def initialize: (Buffer, Symbol name, Prism::DefNode node, MethodTypeAnnotation, CommentBlock? leading_comment) -> void
90
+
91
+ def location: () -> Location
92
+
93
+ def overloads: () -> Array[Overload]
94
+
95
+ def overloading?: () -> bool
96
+
97
+ def annotations: () -> Array[AST::Annotation]
98
+
99
+ def name_location: () -> Location
100
+
101
+ def type_fingerprint: () -> untyped
102
+ end
103
+
104
+ class MixinMember < Base
105
+ attr_reader node: Prism::CallNode
106
+
107
+ attr_reader module_name: TypeName
108
+
109
+ attr_reader annotation: Annotations::TypeApplicationAnnotation | nil
110
+
111
+ def initialize: (Buffer, Prism::CallNode, TypeName, Annotations::TypeApplicationAnnotation | nil) -> void
112
+
113
+ def location: () -> Location
114
+
115
+ def name_location: () -> Location
116
+
117
+ def type_args: () -> Array[Types::t]
118
+
119
+ def type_fingerprint: () -> untyped
120
+ end
121
+
122
+ class IncludeMember < MixinMember
123
+ end
124
+
125
+ class ExtendMember < MixinMember
126
+ end
127
+
128
+ class PrependMember < MixinMember
129
+ end
130
+
131
+ class AttributeMember < Base
132
+ attr_reader node: Prism::CallNode
133
+
134
+ attr_reader name_nodes: Array[Prism::SymbolNode]
135
+
136
+ attr_reader type_annotation: Annotations::NodeTypeAssertion?
137
+
138
+ attr_reader leading_comment: CommentBlock?
139
+
140
+ def initialize: (Buffer, Prism::CallNode, Array[Prism::SymbolNode] name_nodes, RBS::AST::Ruby::CommentBlock? leading_comment, Annotations::NodeTypeAssertion? type_annotation) -> void
141
+
142
+ def names: () -> Array[Symbol]
143
+
144
+ def location: () -> Location
145
+
146
+ def name_locations: () -> Array[Location]
147
+
148
+ def type: () -> Types::t?
149
+
150
+ def type_fingerprint: () -> untyped
151
+ end
152
+
153
+ class AttrReaderMember < AttributeMember
154
+ end
155
+
156
+ class AttrWriterMember < AttributeMember
157
+ end
158
+
159
+ class AttrAccessorMember < AttributeMember
160
+ end
161
+
162
+ class InstanceVariableMember < Base
163
+ attr_reader annotation: Annotations::InstanceVariableAnnotation
164
+
165
+ def initialize: (Buffer, Annotations::InstanceVariableAnnotation) -> void
166
+
167
+ def name: () -> Symbol
168
+
169
+ def type: () -> Types::t
170
+
171
+ def location: () -> Location
172
+
173
+ def type_fingerprint: () -> untyped
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
data/sig/buffer.rbs CHANGED
@@ -6,21 +6,45 @@ module RBS
6
6
  type loc = [Integer, Integer]
7
7
 
8
8
  # Name to identify Buffer.
9
- attr_reader name: untyped
9
+ attr_reader name: Pathname
10
10
 
11
11
  # The content of the buffer.
12
12
  attr_reader content: String
13
13
 
14
- @lines: Array[String]
14
+ attr_reader parent: [Buffer, Array[Range[Integer]]]?
15
15
 
16
- @ranges: Array[Range[Integer]]
17
-
18
- def initialize: (name: untyped name, content: String content) -> void
16
+ def initialize: (name: Pathname name, content: String content) -> void
17
+ | (content: String content, parent: [Buffer, Array[Range[Integer]]] parent) -> void
19
18
 
19
+ # Array of lines of the content, without the EOL
20
+ #
21
+ # ```rb
22
+ # buffer = Buffer.new(name: name, content: "123\nabc")
23
+ # buffer.lines # => ["123", "abc"]
24
+ # ```
25
+ #
26
+ # If the input has EOL at the end of the file, the `lines` has an empty string at the end.
27
+ #
28
+ # ```rb
29
+ # buffer = Buffer.new(name: name, content: "123\nabc\n")
30
+ # buffer.lines # => ["123", "abc", ""]
31
+ # ```
32
+ #
20
33
  def lines: () -> Array[String]
21
34
 
35
+ @ranges: Array[Range[Integer]]?
36
+ # Array of ranges that stores the ranges of the each line, without the EOL
37
+ #
38
+ # ```rb
39
+ # buffer = Buffer.new(name: name, content: "123\nabc\n")
40
+ # buffer.ranges # => [0...3, 4...7, 8...8]
41
+ # ```
42
+ #
22
43
  def ranges: () -> Array[Range[Integer]]
23
44
 
45
+ # Returns the number of the lines
46
+ def line_count: () -> Integer
47
+
24
48
  # Translate position to location.
25
49
  def pos_to_loc: (Integer pos) -> loc
26
50
 
@@ -28,5 +52,39 @@ module RBS
28
52
  def loc_to_pos: (loc loc) -> Integer
29
53
 
30
54
  def last_position: () -> Integer
55
+
56
+ # Translate `Prism::Location` to `RBS::Location` attached to this buffer
57
+ #
58
+ # It assumes the `Prism::Location` has a source which is equivalent to `self`.
59
+ #
60
+ def rbs_location: (Prism::Location) -> Location
61
+ | (Prism::Location, Prism::Location) -> Location
62
+
63
+ # Construct a buffer from substrings of this buffer.
64
+ #
65
+ # The returned buffer contains lines from given ranges.
66
+ #
67
+ # ```rb
68
+ # buffer = Buffer.new(name: name, content: <<TEXT)
69
+ # 12345
70
+ # abcde
71
+ # ABCDE
72
+ # TEXT
73
+ #
74
+ # buffer.sub_buffer(lines: [0...1, 2...3]) # => Buffer with content = 1\n34
75
+ # buffer.sub_buffer(lines: [5..7]) # => Raises an error because the range contains newline
76
+ # ```
77
+ #
78
+ %a{pure} def sub_buffer: (lines: Array[Range[Integer]]) -> Buffer
79
+
80
+ %a{pure} def parent_buffer: () -> Buffer?
81
+
82
+ %a{pure} def parent_position: (Integer) -> Integer?
83
+
84
+ %a{pure} def absolute_position: (Integer) -> Integer?
85
+
86
+ %a{pure} def top_buffer: () -> Buffer
87
+
88
+ %a{pure} def detach: () -> Buffer
31
89
  end
32
90
  end
data/sig/cli/diff.rbs CHANGED
@@ -1,21 +1,15 @@
1
1
  module RBS
2
2
  class CLI
3
3
  class Diff
4
- @format: String
5
4
  @stdout: _IO
6
5
  @stderr: _IO
7
- @diff: RBS::Diff
8
6
 
9
- def initialize: (
10
- argv: Array[String],
11
- library_options: RBS::CLI::LibraryOptions,
12
- ?stdout: _IO,
13
- ?stderr: _IO,
14
- ) -> void
7
+ def initialize: (?stdout: _IO, ?stderr: _IO) -> void
15
8
 
16
- def run: () -> void
17
- def run_diff: () -> void
18
- def run_markdown: () -> void
9
+ def run: (library_options: RBS::CLI::LibraryOptions, argv: Array[String]) -> Integer
10
+
11
+ def run_diff: (RBS::Diff) -> void
12
+ def run_markdown: (RBS::Diff) -> void
19
13
  end
20
14
  end
21
15
  end
data/sig/cli/validate.rbs CHANGED
@@ -3,15 +3,22 @@ module RBS
3
3
  class Validate
4
4
  class Errors
5
5
  @limit: Integer?
6
- @exit_error: boolish
7
- @has_syntax_error: bool
8
6
  @errors: Array[BaseError]
9
7
 
10
- def initialize: (limit: Integer?, exit_error: boolish) -> void
8
+ # The tag that will be thrown in #finish method
9
+ @tag: top
10
+
11
+ def initialize: (limit: Integer?) -> void
11
12
 
12
13
  def add: (BaseError) -> void
13
14
 
14
- def finish: () -> void
15
+ # Throws the `@tag` with 0 or 1
16
+ #
17
+ # Must be called from the block passed to `#try` method.
18
+ #
19
+ def finish: () -> Integer
20
+
21
+ def try: () { () -> void } -> Integer
15
22
 
16
23
  private
17
24
 
@@ -25,7 +32,7 @@ module RBS
25
32
 
26
33
  def initialize: (args: Array[String], options: LibraryOptions) -> void
27
34
 
28
- def run: () -> void
35
+ def run: () -> Integer
29
36
 
30
37
  private
31
38
 
@@ -35,9 +42,6 @@ module RBS
35
42
  def validate_constant: () -> void
36
43
  def validate_global: () -> void
37
44
  def validate_type_alias: () -> void
38
- def no_self_type_validator: (::RBS::Types::t | ::RBS::MethodType type) -> void
39
- def no_classish_type_validator: (::RBS::Types::t | ::RBS::MethodType type) -> void
40
- def void_type_context_validator: (::RBS::Types::t | ::RBS::MethodType type, ?bool allowed_here) -> void
41
45
  end
42
46
  end
43
47
  end
data/sig/cli.rbs CHANGED
@@ -46,41 +46,41 @@ module RBS
46
46
 
47
47
  def has_parser?: () -> bool
48
48
 
49
- def run: (Array[String] args) -> void
49
+ def run: (Array[String] args) -> Integer
50
50
 
51
- def run_ast: (Array[String], LibraryOptions) -> void
51
+ def run_ast: (Array[String], LibraryOptions) -> Integer
52
52
 
53
- def run_list: (Array[String], LibraryOptions) -> void
53
+ def run_list: (Array[String], LibraryOptions) -> Integer
54
54
 
55
- def run_ancestors: (Array[String], LibraryOptions) -> void
55
+ def run_ancestors: (Array[String], LibraryOptions) -> Integer
56
56
 
57
- def run_methods: (Array[String], LibraryOptions) -> void
57
+ def run_methods: (Array[String], LibraryOptions) -> Integer
58
58
 
59
- def run_method: (Array[String], LibraryOptions) -> void
59
+ def run_method: (Array[String], LibraryOptions) -> Integer
60
60
 
61
- def run_validate: (Array[String], LibraryOptions) -> void
61
+ def run_validate: (Array[String], LibraryOptions) -> Integer
62
62
 
63
- def run_constant: (Array[String], LibraryOptions) -> void
63
+ def run_constant: (Array[String], LibraryOptions) -> Integer
64
64
 
65
- def run_paths: (Array[String], LibraryOptions) -> void
65
+ def run_paths: (Array[String], LibraryOptions) -> Integer
66
66
 
67
- def run_prototype: (Array[String], LibraryOptions) -> void
67
+ def run_prototype: (Array[String], LibraryOptions) -> Integer
68
68
 
69
- def run_prototype_file: (String format, Array[String]) -> void
69
+ def run_prototype_file: (String format, Array[String]) -> Integer
70
70
 
71
- def run_vendor: (Array[String], LibraryOptions) -> void
71
+ def run_vendor: (Array[String], LibraryOptions) -> Integer
72
72
 
73
- def run_parse: (Array[String], LibraryOptions) -> void
73
+ def run_parse: (Array[String], LibraryOptions) -> Integer
74
74
 
75
- def run_test: (Array[String], LibraryOptions) -> void
75
+ def run_test: (Array[String], LibraryOptions) -> Integer
76
76
 
77
- def run_collection: (Array[String], LibraryOptions) -> void
77
+ def run_collection: (Array[String], LibraryOptions) -> Integer
78
78
 
79
- def run_annotate: (Array[String], top) -> void
79
+ def run_annotate: (Array[String], top) -> Integer
80
80
 
81
- def run_subtract: (Array[String], top) -> void
81
+ def run_subtract: (Array[String], top) -> Integer
82
82
 
83
- def run_diff: (Array[String], LibraryOptions) -> void
83
+ def run_diff: (Array[String], LibraryOptions) -> Integer
84
84
 
85
85
  def test_opt: (LibraryOptions) -> String?
86
86
 
data/sig/definition.rbs CHANGED
@@ -12,6 +12,10 @@ module RBS
12
12
  | AST::Members::InstanceVariable
13
13
  | AST::Members::ClassVariable
14
14
  | AST::Members::ClassInstanceVariable
15
+ | AST::Ruby::Members::AttrReaderMember
16
+ | AST::Ruby::Members::AttrWriterMember
17
+ | AST::Ruby::Members::AttrAccessorMember
18
+ | AST::Ruby::Members::InstanceVariableMember
15
19
  attr_reader source: source
16
20
 
17
21
  def initialize: (parent_variable: Variable?, type: Types::t, declared_in: TypeName, source: source) -> void
@@ -21,6 +25,7 @@ module RBS
21
25
 
22
26
  class Method
23
27
  type method_member = AST::Members::MethodDefinition | AST::Members::AttrReader | AST::Members::AttrAccessor | AST::Members::AttrWriter
28
+ | AST::Ruby::Members::DefMember | AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember
24
29
 
25
30
  class TypeDef
26
31
  attr_reader type: MethodType
@@ -154,6 +159,7 @@ module RBS
154
159
  type source = :super # Inheritance
155
160
  | nil # Itself
156
161
  | AST::Members::Include | AST::Members::Extend | AST::Members::Prepend # AST
162
+ | AST::Ruby::Members::IncludeMember | AST::Ruby::Members::ExtendMember | AST::Ruby::Members::PrependMember # Ruby AST
157
163
  | AST::Declarations::Module::Self
158
164
 
159
165
  attr_reader name: TypeName
@@ -97,13 +97,15 @@ module RBS
97
97
  #
98
98
  def interface_methods: (Array[Definition::Ancestor::Instance] interface_ancestors) -> interface_methods
99
99
 
100
+ def special_accessibility: (bool, Symbol) -> Definition::accessibility?
101
+
100
102
  def try_cache: (TypeName, cache: Hash[TypeName, Definition | false | nil]) { () -> Definition } -> Definition
101
103
 
102
104
  def validate_params_with: (Array[AST::TypeParam], result: VarianceCalculator::Result) { (AST::TypeParam) -> void } -> void
103
105
 
104
106
  def validate_type_params: (Definition, ancestors: AncestorBuilder::OneAncestors, methods: MethodBuilder::Methods) -> void
105
107
 
106
- def source_location: (Definition::Ancestor::Instance::source, AST::Declarations::t) -> Location[untyped, untyped]?
108
+ def source_location: (Definition::Ancestor::Instance::source, AST::Declarations::t | AST::Ruby::Declarations::t) -> Location[untyped, untyped]?
107
109
 
108
110
  def validate_variable: (Definition::Variable) -> void
109
111
 
@@ -0,0 +1,50 @@
1
+ module RBS
2
+ class Environment
3
+ # Represents a class entry in the environment
4
+ #
5
+ # ```rb
6
+ # entry = ClassEntry.new(TypeName.parse("::String"))
7
+ # entry << [nil, declaration]
8
+ # entry << [[nil, TypeName.parse("::Kernel")], declaration]
9
+ # ```
10
+ class ClassEntry
11
+ attr_reader name: TypeName
12
+
13
+ type declaration = AST::Declarations::Class | AST::Ruby::Declarations::ClassDecl
14
+
15
+ type context_decl = [Resolver::context, declaration]
16
+
17
+ attr_reader context_decls: Array[context_decl]
18
+
19
+ @primary_decl: declaration?
20
+
21
+ def initialize: (TypeName) -> void
22
+
23
+ def <<: (context_decl) -> self
24
+
25
+ def each_decl: { (declaration) -> void } -> void
26
+ | () -> Enumerator[declaration]
27
+
28
+ # Returns true if the entry doesn't have any declaration
29
+ #
30
+ def empty?: () -> bool
31
+
32
+ # Find the *primary* declaration of the class
33
+ #
34
+ # * Returns the first declaration with super class
35
+ # * Returns the first declaration if the declaration doesn't have super class
36
+ #
37
+ %a{pure} def primary_decl: () -> declaration
38
+
39
+ # Returns the generics declaration
40
+ #
41
+ def type_params: () -> Array[AST::TypeParam]
42
+
43
+ # Confirms if the type parameters in the declaration are compatible
44
+ #
45
+ # * Raises `GenericParameterMismatchError` if incompatible declaration is detected.
46
+ #
47
+ def validate_type_params: () -> void
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,50 @@
1
+ module RBS
2
+ class Environment
3
+ # Represents a class entry in the environment
4
+ #
5
+ # ```rb
6
+ # entry = ModuleEntry.new(TypeName.parse("::Kernel"))
7
+ # entry << [nil, declaration]
8
+ # entry << [[nil, TypeName.parse("::Object")], declaration]
9
+ # ```
10
+ #
11
+ class ModuleEntry
12
+ attr_reader name: TypeName
13
+
14
+ type declaration = AST::Declarations::Module | AST::Ruby::Declarations::ModuleDecl
15
+
16
+ type context_decl = [Resolver::context, declaration]
17
+
18
+ attr_reader context_decls: Array[context_decl]
19
+
20
+ def initialize: (TypeName) -> void
21
+
22
+ def <<: (context_decl) -> self
23
+
24
+ def each_decl: { (declaration) -> void } -> void
25
+ | () -> Enumerator[declaration]
26
+
27
+ # Returns true if the entry doesn't have any declaration
28
+ #
29
+ def empty?: () -> bool
30
+
31
+ # Returns the first declaration
32
+ #
33
+ # This method helps using the class with `ClassEntry` objects.
34
+ #
35
+ def primary_decl: () -> declaration
36
+
37
+ # Returns the generics declaration
38
+ #
39
+ def type_params: () -> Array[AST::TypeParam]
40
+
41
+ # Confirms if the type parameters in the declaration are compatible
42
+ #
43
+ # * Raises `GenericParameterMismatchError` if incompatible declaration is detected.
44
+ #
45
+ def validate_type_params: () -> void
46
+
47
+ def self_types: () -> Array[AST::Declarations::Module::Self]
48
+ end
49
+ end
50
+ end