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
data/sig/environment.rbs CHANGED
@@ -2,81 +2,20 @@ module RBS
2
2
  class Environment
3
3
  type module_decl = AST::Declarations::Class | AST::Declarations::Module
4
4
 
5
- interface _ModuleOrClass
6
- def name: () -> TypeName
7
-
8
- def type_params: () -> Array[AST::TypeParam]
9
- end
10
-
11
- interface _NamedDecl
12
- def name: () -> TypeName
13
- end
14
-
15
- module ContextUtil
16
- def calculate_context: (Array[_NamedDecl]) -> Resolver::context
17
- end
18
-
19
- # Name of object, it's (multiple) declarations with the outer module declarations
20
- #
21
- class MultiEntry[M < _ModuleOrClass]
22
- class D[M < _ModuleOrClass]
23
- attr_reader decl: M
24
- attr_reader outer: Array[module_decl]
25
-
26
- def initialize: (decl: M, outer: Array[module_decl]) -> void
27
-
28
- include ContextUtil
29
-
30
- @context: Resolver::context
31
-
32
- def context: () -> Resolver::context
33
- end
34
-
35
- attr_reader name: TypeName
36
- attr_reader decls: Array[D[M]]
37
-
38
- @primary: D[M]?
39
-
40
- def initialize: (name: TypeName) -> void
41
-
42
- def insert: (decl: M, outer: Array[module_decl]) -> void
43
-
44
- def validate_type_params: () -> void
45
-
46
- def compatible_params?: (Array[AST::TypeParam], Array[AST::TypeParam]) -> boolish
47
-
48
- def type_params: () -> Array[AST::TypeParam]
49
-
50
- def primary: () -> D[M]
51
- end
52
-
53
- class ModuleEntry < MultiEntry[AST::Declarations::Module]
54
- def self_types: () -> Array[AST::Declarations::Module::Self]
55
- end
56
-
57
- class ClassEntry < MultiEntry[AST::Declarations::Class]
58
- end
59
-
60
5
  # Name of object, it's (single) declaration, and the outer module declarations
61
6
  #
62
7
  class SingleEntry[N, D]
63
8
  attr_reader name: N
64
9
  attr_reader decl: D
65
- attr_reader outer: Array[module_decl]
66
-
67
- def initialize: (name: N, decl: D, outer: Array[module_decl]) -> void
68
-
69
- include ContextUtil
70
-
71
- @context: Resolver::context
10
+ attr_reader context: Resolver::context
72
11
 
73
- def context: () -> Resolver::context
12
+ def initialize: (name: N, decl: D, context: Resolver::context) -> void
74
13
  end
75
14
 
76
- class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias]
15
+ class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias | AST::Ruby::Declarations::ClassModuleAliasDecl]
77
16
  end
78
17
 
79
- class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias]
18
+ class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias | AST::Ruby::Declarations::ClassModuleAliasDecl]
80
19
  end
81
20
 
82
21
  class InterfaceEntry < SingleEntry[TypeName, AST::Declarations::Interface]
@@ -85,14 +24,18 @@ module RBS
85
24
  class TypeAliasEntry < SingleEntry[TypeName, AST::Declarations::TypeAlias]
86
25
  end
87
26
 
88
- class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant]
27
+ class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant | AST::Ruby::Declarations::ConstantDecl]
89
28
  end
90
29
 
91
30
  class GlobalEntry < SingleEntry[Symbol, AST::Declarations::Global]
92
31
  end
93
32
 
94
33
  # Top level declarations
95
- attr_reader declarations: Array[AST::Declarations::t]
34
+ def declarations: () -> Array[AST::Ruby::Declarations::t | AST::Declarations::t]
35
+
36
+ # Array of source objects loaded in the environment
37
+ #
38
+ attr_reader sources: Array[Source::t]
96
39
 
97
40
  # Class declarations
98
41
  attr_reader class_decls: Hash[TypeName, ModuleEntry | ClassEntry]
@@ -111,10 +54,6 @@ module RBS
111
54
  # Global declarations
112
55
  attr_reader global_decls: Hash[Symbol, GlobalEntry]
113
56
 
114
- # A hash from Buffer to it's contents
115
- #
116
- attr_reader signatures: Hash[Buffer, [Array[AST::Directives::t], Array[AST::Declarations::t]]]
117
-
118
57
  def initialize: () -> void
119
58
 
120
59
  def initialize_copy: (Environment) -> void
@@ -123,15 +62,21 @@ module RBS
123
62
  #
124
63
  def self.from_loader: (EnvironmentLoader) -> Environment
125
64
 
126
- def add_signature: (buffer: Buffer, directives: Array[AST::Directives::t], decls: Array[AST::Declarations::t]) -> void
65
+ def add_source: (Source::t) -> void
66
+
67
+ def each_rbs_source: () { (Source::RBS) -> void } -> void
68
+ | () -> Enumerator[Source::RBS]
127
69
 
128
- # Insert a toplevel declaration into the environment
70
+ def each_ruby_source: () { (Source::Ruby) -> void } -> void
71
+ | () -> Enumerator[Source::Ruby]
72
+
73
+ # Insert a declaration into the environment
129
74
  #
130
- def <<: (AST::Declarations::t decl) -> self
75
+ private def insert_rbs_decl: (AST::Declarations::t, context: Resolver::context, namespace: Namespace) -> void
131
76
 
132
77
  # Insert a declaration into the environment
133
78
  #
134
- private def insert_decl: (AST::Declarations::t, outer: Array[module_decl], namespace: Namespace) -> void
79
+ private def insert_ruby_decl: (AST::Ruby::Declarations::t, context: Resolver::context, namespace: Namespace) -> void
135
80
 
136
81
  # Resolve all type names in the environment to absolute type names.
137
82
  # Relative type name will be left if absolute type name cannot be found.
@@ -139,9 +84,15 @@ module RBS
139
84
  # When `only` is given, it skips other _top-level_ declarations not included in the collection.
140
85
  # This helps running resolution faster in the case of _partial updates_.
141
86
  #
142
- def resolve_type_names: (?only: Set[AST::Declarations::t]?) -> Environment
87
+ def resolve_type_names: (?only: Set[AST::Declarations::t | AST::Ruby::Declarations::t]?) -> Environment
143
88
 
144
- def resolve_signature: (Resolver::TypeNameResolver, UseMap::Table, Array[AST::Directives::t], Array[AST::Declarations::t], ?only: Set[AST::Declarations::t]?) -> [Array[AST::Directives::t], Array[AST::Declarations::t]]
89
+ def resolve_signature: (
90
+ Resolver::TypeNameResolver,
91
+ UseMap::Table,
92
+ Array[AST::Directives::t],
93
+ Array[AST::Declarations::t],
94
+ ?only: Set[AST::Declarations::t | AST::Ruby::Declarations::t]?
95
+ ) -> [Array[AST::Directives::t], Array[AST::Declarations::t]]
145
96
 
146
97
  def inspect: () -> String
147
98
 
@@ -149,7 +100,8 @@ module RBS
149
100
 
150
101
  # Remove declarations and directives that are loaded from `buffers`
151
102
  #
152
- def unload: (Set[Buffer] buffers) -> Environment
103
+ def unload: (Set[Pathname] paths) -> Environment
104
+ | %a{deprecated: Use pathname version} (Set[Buffer] buffers) -> Environment
153
105
 
154
106
  # Returns true if an interface with the type name is defined
155
107
  #
@@ -315,7 +267,7 @@ module RBS
315
267
 
316
268
  def append_context: (Resolver::context, module_decl) -> Resolver::context
317
269
 
318
- def resolve_declaration: (Resolver::TypeNameResolver resolver, UseMap map, AST::Declarations::t decl, outer: Array[module_decl], prefix: Namespace) -> AST::Declarations::t
270
+ def resolve_declaration: (Resolver::TypeNameResolver resolver, UseMap map, AST::Declarations::t decl, context: Resolver::context, prefix: Namespace) -> AST::Declarations::t
319
271
 
320
272
  def resolve_member: (Resolver::TypeNameResolver, UseMap map, AST::Members::t, context: Resolver::context) -> AST::Members::t
321
273
 
@@ -323,8 +275,12 @@ module RBS
323
275
 
324
276
  def resolve_type_params: (Resolver::TypeNameResolver resolver, UseMap map, Array[AST::TypeParam], context: Resolver::context) -> Array[AST::TypeParam]
325
277
 
326
- def absolute_type: (Resolver::TypeNameResolver, UseMap map, Types::t, context: Resolver::context) -> Types::t
278
+ def resolve_ruby_decl: (Resolver::TypeNameResolver, AST::Ruby::Declarations::t, context: Resolver::context, prefix: Namespace) -> AST::Ruby::Declarations::t
279
+
280
+ def resolve_ruby_member: (Resolver::TypeNameResolver, AST::Ruby::Members::t, context: Resolver::context) -> AST::Ruby::Members::t
281
+
282
+ def absolute_type: (Resolver::TypeNameResolver, UseMap? map, Types::t, context: Resolver::context) -> Types::t
327
283
 
328
- def absolute_type_name: (Resolver::TypeNameResolver, UseMap map, TypeName, context: Resolver::context) -> TypeName
284
+ def absolute_type_name: (Resolver::TypeNameResolver, UseMap? map, TypeName, context: Resolver::context) -> TypeName
329
285
  end
330
286
  end
data/sig/errors.rbs CHANGED
@@ -115,14 +115,16 @@ module RBS
115
115
  class NoMixinFoundError < DefinitionError
116
116
  include DetailedMessageable
117
117
 
118
+ type member = AST::Members::t | AST::Ruby::Members::IncludeMember | AST::Ruby::Members::ExtendMember | AST::Ruby::Members::PrependMember
119
+
118
120
  attr_reader type_name: TypeName
119
- attr_reader member: AST::Members::t
121
+ attr_reader member: member
120
122
 
121
- def initialize: (type_name: TypeName, member: AST::Members::t) -> void
123
+ def initialize: (type_name: TypeName, member: member) -> void
122
124
 
123
125
  def location: () -> Location[untyped, untyped]?
124
126
 
125
- def self.check!: (TypeName, env: Environment, member: AST::Members::t) -> void
127
+ def self.check!: (TypeName, env: Environment, member: member) -> void
126
128
  end
127
129
 
128
130
  class DuplicatedMethodDefinitionError < DefinitionError
@@ -226,28 +228,35 @@ module RBS
226
228
  class InvalidOverloadMethodError < DefinitionError
227
229
  include DetailedMessageable
228
230
 
231
+ type member = AST::Members::MethodDefinition | AST::Ruby::Members::DefMember
232
+
229
233
  attr_reader type_name: TypeName
230
234
  attr_reader method_name: Symbol
231
235
  attr_reader kind: :instance | :singleton
232
- attr_reader members: Array[AST::Members::MethodDefinition]
236
+ attr_reader members: Array[member]
233
237
 
234
- def initialize: (type_name: TypeName, method_name: Symbol, kind: :instance | :singleton, members: Array[AST::Members::MethodDefinition]) -> void
238
+ def initialize: (type_name: TypeName, method_name: Symbol, kind: :instance | :singleton, members: Array[member]) -> void
235
239
 
236
240
  def location: () -> AST::Members::MethodDefinition::loc?
237
241
  end
238
242
 
239
243
  class GenericParameterMismatchError < LoadingError
244
+ type decl = AST::Declarations::Class | AST::Declarations::Module
245
+ | AST::Ruby::Declarations::ClassDecl | AST::Ruby::Declarations::ModuleDecl
246
+
240
247
  attr_reader name: TypeName
241
- attr_reader decl: AST::Declarations::Class | AST::Declarations::Module
248
+ attr_reader decl: decl
242
249
 
243
- def initialize: (name: TypeName, decl: AST::Declarations::Class | AST::Declarations::Module) -> void
250
+ def initialize: (name: TypeName, decl: decl, ?location: Location) -> void
244
251
  end
245
252
 
246
253
  class DuplicatedDeclarationError < LoadingError
254
+ type declaration = AST::Declarations::t | AST::Ruby::Declarations::t
255
+
247
256
  attr_reader name: TypeName | Symbol
248
- attr_reader decls: Array[AST::Declarations::t]
257
+ attr_reader decls: Array[declaration]
249
258
 
250
- def initialize: (TypeName | Symbol, *AST::Declarations::t) -> void
259
+ def initialize: (TypeName | Symbol, *declaration) -> void
251
260
  end
252
261
 
253
262
  class InvalidVarianceAnnotationError < DefinitionError
@@ -280,6 +289,7 @@ module RBS
280
289
  include DetailedMessageable
281
290
 
282
291
  type member = AST::Members::Include | AST::Members::Prepend | AST::Members::Extend
292
+ | AST::Ruby::Members::IncludeMember | AST::Ruby::Members::PrependMember | AST::Ruby::Members::ExtendMember
283
293
 
284
294
  attr_reader type_name: TypeName
285
295
  attr_reader member: member
@@ -290,17 +300,21 @@ module RBS
290
300
 
291
301
  def self.check!: (type_name: TypeName, env: Environment, member: member) -> void
292
302
 
303
+ def member_name: (member) -> TypeName
304
+
293
305
  def mixin_name: () -> String
294
306
  end
295
307
 
296
308
  # InheritModuleError is raised if a class definition inherits a module (not a class)
297
309
  #
298
310
  class InheritModuleError < DefinitionError
311
+ type super_class = AST::Declarations::Class::Super | AST::Ruby::Declarations::ClassDecl::SuperClass
312
+
299
313
  include DetailedMessageable
300
314
 
301
- attr_reader super_decl: AST::Declarations::Class::Super
315
+ attr_reader super_decl: super_class
302
316
 
303
- def initialize: (AST::Declarations::Class::Super) -> void
317
+ def initialize: (super_class) -> void
304
318
 
305
319
  def location: () -> Location[untyped, untyped]?
306
320
 
@@ -308,7 +322,7 @@ module RBS
308
322
  #
309
323
  # Automatically normalize the name of super.
310
324
  #
311
- def self.check!: (AST::Declarations::Class::Super, env: Environment) -> void
325
+ def self.check!: (super_class, env: Environment) -> void
312
326
  end
313
327
 
314
328
  class RecursiveTypeAliasError < BaseError
@@ -380,14 +394,6 @@ module RBS
380
394
  def location: () -> AST::Declarations::AliasDecl::loc?
381
395
  end
382
396
 
383
- class WillSyntaxError < BaseError
384
- include RBS::DetailedMessageable
385
-
386
- def initialize: (String message, location: Location[untyped, untyped]?) -> void
387
-
388
- attr_reader location: Location[untyped, untyped]?
389
- end
390
-
391
397
  class TypeParamDefaultReferenceError < BaseError
392
398
  include DetailedMessageable
393
399
 
@@ -0,0 +1,71 @@
1
+ use RBS::AST::Ruby::CommentBlock
2
+
3
+ module RBS
4
+ class InlineParser
5
+ # CommentAssociation manages the association between `Prism::Node` and `CommentBlock`
6
+ #
7
+ class CommentAssociation
8
+ attr_reader blocks: Array[CommentBlock]
9
+
10
+ attr_reader start_line_map: Hash[Integer, CommentBlock]
11
+
12
+ attr_reader end_line_map: Hash[Integer, CommentBlock]
13
+
14
+ # CommentBlocks that are already associated to a node, which cannot be associated to another node again
15
+ #
16
+ attr_reader associated_blocks: Set[CommentBlock]
17
+
18
+ def self.build: (Buffer, Prism::Result) -> instance
19
+
20
+ def initialize: (Array[CommentBlock]) -> void
21
+
22
+ class Reference
23
+ attr_reader block: CommentBlock
24
+
25
+ @associated_blocks: Set[CommentBlock]
26
+
27
+ def initialize: (CommentBlock, Set[CommentBlock]) -> void
28
+
29
+ def associate!: () -> self
30
+
31
+ def associated?: () -> bool
32
+ end
33
+
34
+ # Returns an unassociated CommentBlock that can be associated to given node
35
+ #
36
+ # Automatically updates association status.
37
+ #
38
+ def leading_block!: (Prism::Node) -> CommentBlock?
39
+
40
+ # Returns a Reference that is associated to given node
41
+ #
42
+ # Updates association explicitly through the reference.
43
+ #
44
+ def leading_block: (Prism::Node) -> Reference?
45
+
46
+ # Returns a CommentBlock that is associated to given node, or by its location
47
+ #
48
+ # Update association status.
49
+ #
50
+ def trailing_block!: (Prism::Node | Prism::Location) -> CommentBlock?
51
+
52
+ # Returns a Reference that is associated to given node, or by its location
53
+ #
54
+ # Updates association explicitly through the reference.
55
+ #
56
+ def trailing_block: (Prism::Node | Prism::Location) -> Reference?
57
+
58
+ # Yields leading CommentBlocks that is enclosed in the given node
59
+ #
60
+ # Note that `enclosed_blocks` works only after all of the *leading* blocks inside the node is associated.
61
+ #
62
+ # Update association status.
63
+ #
64
+ def each_enclosed_block: (Prism::Node) { (CommentBlock) -> void } -> void
65
+ | (Prism::Node) -> Enumerator[CommentBlock]
66
+
67
+ def each_unassociated_block: () { (CommentBlock) -> void } -> void
68
+ | () -> Enumerator[CommentBlock]
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,124 @@
1
+ use RBS::AST::Ruby::Declarations
2
+
3
+ module RBS
4
+ class InlineParser
5
+ class Result
6
+ attr_reader buffer: Buffer
7
+ attr_reader prism_result: Prism::ParseResult
8
+ attr_reader declarations: Array[AST::Ruby::Declarations::t]
9
+ attr_reader diagnostics: Array[Diagnostic::t]
10
+
11
+ def initialize: (Buffer, Prism::ParseResult) -> void
12
+
13
+ def type_fingerprint: () -> untyped
14
+ end
15
+
16
+ module Diagnostic
17
+ class Base
18
+ attr_reader message: String
19
+
20
+ attr_reader location: Location
21
+
22
+ def initialize: (Location, String) -> void
23
+ end
24
+
25
+ class NotImplementedYet < Base
26
+ end
27
+
28
+ class NonConstantClassName < Base
29
+ end
30
+
31
+ class NonConstantModuleName < Base
32
+ end
33
+
34
+ class NonConstantSuperClassName < Base
35
+ end
36
+
37
+ class TopLevelMethodDefinition < Base
38
+ end
39
+
40
+ class TopLevelAttributeDefinition < Base
41
+ end
42
+
43
+ class UnusedInlineAnnotation < Base
44
+ end
45
+
46
+ class AnnotationSyntaxError < Base
47
+ end
48
+
49
+ class MixinMultipleArguments < Base
50
+ end
51
+
52
+ class MixinNonConstantModule < Base
53
+ end
54
+
55
+ class AttributeNonSymbolName < Base
56
+ end
57
+
58
+ class NonConstantConstantDeclaration < Base
59
+ end
60
+
61
+ class ClassModuleAliasDeclarationMissingTypeName < Base
62
+ end
63
+
64
+ type t = NotImplementedYet
65
+ | NonConstantClassName | NonConstantModuleName | NonConstantSuperClassName
66
+ | TopLevelMethodDefinition | TopLevelAttributeDefinition
67
+ | UnusedInlineAnnotation | AnnotationSyntaxError
68
+ | MixinMultipleArguments | MixinNonConstantModule
69
+ | AttributeNonSymbolName
70
+ | NonConstantConstantDeclaration
71
+ | ClassModuleAliasDeclarationMissingTypeName
72
+ end
73
+
74
+ def self.parse: (Buffer, Prism::ParseResult) -> Result
75
+
76
+ class Parser < Prism::Visitor
77
+ type module_context = Declarations::ClassDecl | Declarations::ModuleDecl
78
+
79
+ include AST::Ruby::Helpers::ConstantHelper
80
+
81
+ include AST::Ruby::Helpers::LocationHelper
82
+
83
+ attr_reader comments: CommentAssociation
84
+
85
+ attr_reader result: Result
86
+
87
+ attr_reader module_nesting: Array[module_context]
88
+
89
+ def initialize: (Result) -> void
90
+
91
+ def buffer: () -> Buffer
92
+
93
+ %a{pure} def current_module: () -> module_context?
94
+
95
+ %a{pure} def current_module!: () -> module_context
96
+
97
+ def diagnostics: () -> Array[Diagnostic::t]
98
+
99
+ def push_module_nesting: [T] (module_context) { () -> T } -> T
100
+
101
+ # Returns `true` if the node is a comment block including `@rbs skip` annotation
102
+ #
103
+ # Doesn't update the `association` flag if returning `false`.
104
+ #
105
+ def skip_node?: (Prism::Node) -> bool
106
+
107
+ def insert_declaration: (module_context) -> void
108
+
109
+ def report_unused_annotation: (*AST::Ruby::Annotations::t | nil | AST::Ruby::CommentBlock::AnnotationSyntaxError) -> void
110
+
111
+ def report_unused_block: (AST::Ruby::CommentBlock) -> void
112
+
113
+ private
114
+
115
+ def parse_mixin_call: (Prism::CallNode) -> void
116
+
117
+ def parse_attribute_call: (Prism::CallNode) -> void
118
+
119
+ def parse_constant_declaration: (Prism::ConstantWriteNode | Prism::ConstantPathWriteNode) -> void
120
+
121
+ def parse_super_class: (Prism::node, Prism::Location) -> Declarations::ClassDecl::SuperClass?
122
+ end
123
+ end
124
+ end
data/sig/location.rbs CHANGED
@@ -4,14 +4,20 @@ module RBS
4
4
  #
5
5
  # A location can have _child_ locations.
6
6
  #
7
- class Location[in RequiredChildKeys, in OptionalChildKeys]
7
+ class Location[in RequiredChildKeys = untyped, in OptionalChildKeys = untyped]
8
8
  # The buffer this location points on.
9
9
  attr_reader buffer (): Buffer
10
10
 
11
- # The index of character the range starts from.
11
+ # The absolute start index of character the range starts from
12
+ #
13
+ # It returns the index in the `buffer.top_buffer`.
14
+ #
12
15
  attr_reader start_pos (): Integer
13
16
 
14
- # The index of character the range ends at.
17
+ # The absolute end index of character the range ends at
18
+ #
19
+ # It returns the index in the `buffer.top_buffer`.
20
+ #
15
21
  attr_reader end_pos (): Integer
16
22
 
17
23
  def initialize: (Buffer, Integer start_pos, Integer end_pos) -> void
@@ -24,26 +30,37 @@ module RBS
24
30
  # Returns the name of the buffer.
25
31
  def name: () -> untyped
26
32
 
27
- # Line of the `start_pos` (1 origin)
33
+ # The *raw* index of character the range starts from.
34
+ attr_reader _start_pos (): Integer
35
+
36
+ # The *raw* index of character the range ends at.
37
+ attr_reader _end_pos (): Integer
38
+
39
+ # Line of the `start_pos` (1 origin, absolute)
28
40
  attr_reader start_line (): Integer
29
41
 
30
- # Column of the `start_pos` (0 origin)
42
+ # Column of the `start_pos` (0 origin, absolute)
31
43
  attr_reader start_column (): Integer
32
44
 
33
- # Line of the `end_pos` (1 origin)
45
+ # Line of the `end_pos` (1 origin, absolute)
34
46
  attr_reader end_line (): Integer
35
47
 
36
- # Column of the `end_pos` (0 origin)
48
+ # Column of the `end_pos` (0 origin, absolute)
37
49
  attr_reader end_column (): Integer
38
50
 
51
+ # The absolute line-column pair of the start position
52
+ #
39
53
  attr_reader start_loc (): Buffer::loc
40
54
 
41
55
  @start_loc: Buffer::loc?
42
56
 
57
+ # The absolute line-column pair of the end position
58
+ #
43
59
  attr_reader end_loc (): Buffer::loc
44
60
 
45
61
  @end_loc: Buffer::loc?
46
62
 
63
+ # The absolute range of the start and end position
47
64
  attr_reader range (): Range[Integer]
48
65
 
49
66
  @range: Range[Integer]?
@@ -97,6 +114,14 @@ module RBS
97
114
 
98
115
  def key?: (Symbol) -> bool
99
116
 
117
+ # Returns the location of the buffer, but the buffer is detached from the parent buffer
118
+ #
119
+ def local_location: () -> self
120
+
121
+ # Returns the source of `#local_location`
122
+ #
123
+ def local_source: () -> String
124
+
100
125
  private
101
126
 
102
127
  def _add_required_child: (RequiredChildKeys name, Integer start_pos, Integer end_pos) -> void
data/sig/locator.rbs CHANGED
@@ -37,8 +37,6 @@ module RBS
37
37
  #
38
38
  def find2: (line: Integer, column: Integer) -> [Symbol?, Array[component]]?
39
39
 
40
- private
41
-
42
40
  def find_in_directive: (Integer pos, AST::Directives::t, Array[component]) -> bool
43
41
 
44
42
  def find_in_decl: (Integer pos, decl: AST::Declarations::t, array: Array[component]) -> bool
@@ -16,16 +16,19 @@ module RBS
16
16
  #
17
17
  class Definition
18
18
  type original = AST::Members::MethodDefinition | AST::Members::Alias | AST::Members::AttrAccessor | AST::Members::AttrWriter | AST::Members::AttrReader
19
+ | AST::Ruby::Members::DefMember | AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember
20
+
21
+ type overloading_definition = AST::Members::MethodDefinition | AST::Ruby::Members::DefMember
19
22
 
20
23
  type accessibility = RBS::Definition::accessibility
21
24
 
22
25
  attr_reader name: Symbol
23
26
  attr_reader type: instance_type
24
27
  attr_reader originals: Array[original]
25
- attr_reader overloads: Array[AST::Members::MethodDefinition]
28
+ attr_reader overloads: Array[overloading_definition]
26
29
  attr_reader accessibilities: Array[accessibility]
27
30
 
28
- def initialize: (name: Symbol, type: instance_type, originals: Array[original], overloads: Array[AST::Members::MethodDefinition], accessibilities: Array[accessibility]) -> void
31
+ def initialize: (name: Symbol, type: instance_type, originals: Array[original], overloads: Array[overloading_definition], accessibilities: Array[accessibility]) -> void
29
32
 
30
33
  def original: () -> original?
31
34
 
@@ -74,9 +77,11 @@ module RBS
74
77
 
75
78
  def build_attribute: (Methods, Methods::instance_type, member: AST::Members::AttrAccessor | AST::Members::AttrReader | AST::Members::AttrWriter, accessibility: Definition::accessibility) -> void
76
79
 
77
- def build_method: (Methods, Methods::instance_type, member: AST::Members::MethodDefinition, accessibility: Definition::accessibility) -> void
80
+ def build_ruby_attribute: (Methods, Methods::instance_type, member: AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember, accessibility: Definition::accessibility) -> void
81
+
82
+ def build_method: (Methods, Methods::instance_type, member: AST::Members::MethodDefinition | AST::Ruby::Members::DefMember, accessibility: Definition::accessibility) -> void
78
83
 
79
- def each_member_with_accessibility: (Array[AST::Members::t | AST::Declarations::t], ?accessibility: Definition::accessibility) { (AST::Members::t | AST::Declarations::t, Definition::accessibility) -> void } -> void
84
+ def each_rbs_member_with_accessibility: (Array[AST::Members::t | AST::Declarations::t], ?accessibility: Definition::accessibility) { (AST::Members::t | AST::Declarations::t, Definition::accessibility) -> void } -> void
80
85
 
81
86
  def update: (env: Environment, except: _Each[TypeName]) -> MethodBuilder
82
87
  end
data/sig/namespace.rbs CHANGED
@@ -139,8 +139,3 @@ module RBS
139
139
  | () -> Enumerator[Namespace, void]
140
140
  end
141
141
  end
142
-
143
- module Kernel
144
- # Deprecated: Use `RBS::Namespace.parse` instead
145
- %a{deprecated} def Namespace: (String) -> RBS::Namespace
146
- end