rbs 3.9.5 → 3.10.0.pre.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +74 -0
  3. data/.clangd +2 -0
  4. data/.github/workflows/c-check.yml +54 -0
  5. data/.github/workflows/comments.yml +3 -3
  6. data/.github/workflows/ruby.yml +34 -19
  7. data/.github/workflows/typecheck.yml +1 -1
  8. data/.github/workflows/windows.yml +1 -1
  9. data/.gitignore +4 -0
  10. data/README.md +38 -1
  11. data/Rakefile +152 -23
  12. data/config.yml +190 -62
  13. data/core/array.rbs +44 -43
  14. data/core/dir.rbs +2 -2
  15. data/core/encoding.rbs +3 -2
  16. data/core/enumerable.rbs +89 -2
  17. data/core/errno.rbs +8 -0
  18. data/core/errors.rbs +28 -1
  19. data/core/exception.rbs +2 -2
  20. data/core/fiber.rbs +3 -3
  21. data/core/file.rbs +26 -11
  22. data/core/float.rbs +1 -1
  23. data/core/gc.rbs +422 -281
  24. data/core/hash.rbs +1024 -727
  25. data/core/io/wait.rbs +11 -33
  26. data/core/io.rbs +6 -4
  27. data/core/kernel.rbs +49 -43
  28. data/core/marshal.rbs +1 -1
  29. data/core/match_data.rbs +1 -1
  30. data/core/math.rbs +42 -3
  31. data/core/method.rbs +14 -6
  32. data/core/module.rbs +71 -11
  33. data/core/nil_class.rbs +3 -3
  34. data/core/numeric.rbs +8 -8
  35. data/core/object.rbs +3 -3
  36. data/core/object_space.rbs +13 -0
  37. data/{stdlib/pathname/0 → core}/pathname.rbs +253 -352
  38. data/core/proc.rbs +15 -8
  39. data/core/process.rbs +2 -2
  40. data/core/ractor.rbs +278 -437
  41. data/core/range.rbs +6 -7
  42. data/core/rbs/unnamed/argf.rbs +1 -1
  43. data/core/rbs/unnamed/env_class.rbs +1 -1
  44. data/core/rbs/unnamed/random.rbs +4 -2
  45. data/core/regexp.rbs +22 -17
  46. data/core/ruby_vm.rbs +6 -4
  47. data/core/rubygems/errors.rbs +3 -70
  48. data/core/rubygems/rubygems.rbs +11 -79
  49. data/core/set.rbs +439 -332
  50. data/core/string.rbs +2897 -1117
  51. data/core/struct.rbs +1 -1
  52. data/core/symbol.rbs +4 -4
  53. data/core/thread.rbs +83 -20
  54. data/core/time.rbs +35 -9
  55. data/core/unbound_method.rbs +14 -6
  56. data/docs/aliases.md +79 -0
  57. data/docs/collection.md +2 -2
  58. data/docs/gem.md +0 -1
  59. data/docs/sigs.md +3 -3
  60. data/ext/rbs_extension/ast_translation.c +1016 -0
  61. data/ext/rbs_extension/ast_translation.h +37 -0
  62. data/ext/rbs_extension/class_constants.c +157 -0
  63. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +7 -1
  64. data/ext/rbs_extension/compat.h +10 -0
  65. data/ext/rbs_extension/extconf.rb +25 -1
  66. data/ext/rbs_extension/legacy_location.c +317 -0
  67. data/ext/rbs_extension/legacy_location.h +45 -0
  68. data/ext/rbs_extension/main.c +365 -14
  69. data/ext/rbs_extension/rbs_extension.h +6 -21
  70. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  71. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  72. data/include/rbs/ast.h +687 -0
  73. data/include/rbs/defines.h +86 -0
  74. data/include/rbs/lexer.h +199 -0
  75. data/include/rbs/location.h +59 -0
  76. data/include/rbs/parser.h +135 -0
  77. data/include/rbs/string.h +49 -0
  78. data/include/rbs/util/rbs_allocator.h +59 -0
  79. data/include/rbs/util/rbs_assert.h +20 -0
  80. data/include/rbs/util/rbs_buffer.h +83 -0
  81. data/include/rbs/util/rbs_constant_pool.h +6 -67
  82. data/include/rbs/util/rbs_encoding.h +282 -0
  83. data/include/rbs/util/rbs_unescape.h +23 -0
  84. data/include/rbs.h +1 -2
  85. data/lib/rbs/annotate/formatter.rb +3 -13
  86. data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
  87. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  88. data/lib/rbs/cli/validate.rb +2 -2
  89. data/lib/rbs/cli.rb +1 -1
  90. data/lib/rbs/collection/config/lockfile_generator.rb +1 -0
  91. data/lib/rbs/definition_builder/ancestor_builder.rb +5 -5
  92. data/lib/rbs/environment.rb +64 -59
  93. data/lib/rbs/environment_loader.rb +1 -1
  94. data/lib/rbs/errors.rb +1 -1
  95. data/lib/rbs/parser_aux.rb +5 -0
  96. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  97. data/lib/rbs/resolver/type_name_resolver.rb +124 -38
  98. data/lib/rbs/test/type_check.rb +13 -0
  99. data/lib/rbs/types.rb +3 -1
  100. data/lib/rbs/version.rb +1 -1
  101. data/lib/rbs.rb +1 -1
  102. data/lib/rdoc/discover.rb +1 -1
  103. data/lib/rdoc_plugin/parser.rb +3 -3
  104. data/sig/annotate/formatter.rbs +2 -2
  105. data/sig/annotate/rdoc_annotater.rbs +1 -1
  106. data/sig/environment.rbs +57 -6
  107. data/sig/manifest.yaml +0 -1
  108. data/sig/parser.rbs +20 -0
  109. data/sig/resolver/type_name_resolver.rbs +38 -7
  110. data/sig/types.rbs +4 -1
  111. data/src/ast.c +1256 -0
  112. data/src/lexer.c +2956 -0
  113. data/src/lexer.re +147 -0
  114. data/src/lexstate.c +205 -0
  115. data/src/location.c +71 -0
  116. data/src/parser.c +3495 -0
  117. data/src/string.c +90 -0
  118. data/src/util/rbs_allocator.c +152 -0
  119. data/src/util/rbs_assert.c +21 -0
  120. data/src/util/rbs_buffer.c +54 -0
  121. data/src/util/rbs_constant_pool.c +16 -86
  122. data/src/util/rbs_encoding.c +21308 -0
  123. data/src/util/rbs_unescape.c +131 -0
  124. data/stdlib/cgi/0/core.rbs +2 -396
  125. data/stdlib/cgi/0/manifest.yaml +1 -0
  126. data/stdlib/cgi-escape/0/escape.rbs +153 -0
  127. data/stdlib/coverage/0/coverage.rbs +3 -1
  128. data/stdlib/delegate/0/delegator.rbs +10 -7
  129. data/stdlib/erb/0/erb.rbs +737 -347
  130. data/stdlib/fileutils/0/fileutils.rbs +18 -13
  131. data/stdlib/forwardable/0/forwardable.rbs +3 -0
  132. data/stdlib/json/0/json.rbs +67 -48
  133. data/stdlib/net-http/0/net-http.rbs +3 -0
  134. data/stdlib/objspace/0/objspace.rbs +8 -3
  135. data/stdlib/open-uri/0/open-uri.rbs +40 -0
  136. data/stdlib/openssl/0/openssl.rbs +182 -149
  137. data/stdlib/optparse/0/optparse.rbs +3 -3
  138. data/stdlib/rdoc/0/code_object.rbs +2 -2
  139. data/stdlib/rdoc/0/comment.rbs +2 -0
  140. data/stdlib/rdoc/0/options.rbs +76 -0
  141. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  142. data/stdlib/rdoc/0/store.rbs +1 -1
  143. data/stdlib/resolv/0/resolv.rbs +25 -68
  144. data/stdlib/ripper/0/ripper.rbs +5 -2
  145. data/stdlib/singleton/0/singleton.rbs +3 -0
  146. data/stdlib/socket/0/socket.rbs +13 -1
  147. data/stdlib/socket/0/tcp_socket.rbs +10 -2
  148. data/stdlib/stringio/0/stringio.rbs +412 -80
  149. data/stdlib/strscan/0/string_scanner.rbs +31 -31
  150. data/stdlib/tempfile/0/tempfile.rbs +1 -1
  151. data/stdlib/tsort/0/cyclic.rbs +3 -0
  152. data/stdlib/uri/0/common.rbs +11 -2
  153. data/stdlib/uri/0/file.rbs +1 -1
  154. data/stdlib/uri/0/generic.rbs +16 -15
  155. data/stdlib/uri/0/rfc2396_parser.rbs +6 -7
  156. data/stdlib/zlib/0/zstream.rbs +1 -0
  157. metadata +41 -18
  158. data/ext/rbs_extension/lexer.c +0 -2728
  159. data/ext/rbs_extension/lexer.h +0 -179
  160. data/ext/rbs_extension/lexer.re +0 -147
  161. data/ext/rbs_extension/lexstate.c +0 -175
  162. data/ext/rbs_extension/location.c +0 -325
  163. data/ext/rbs_extension/location.h +0 -85
  164. data/ext/rbs_extension/parser.c +0 -2982
  165. data/ext/rbs_extension/parser.h +0 -18
  166. data/ext/rbs_extension/parserstate.c +0 -411
  167. data/ext/rbs_extension/parserstate.h +0 -163
  168. data/ext/rbs_extension/unescape.c +0 -32
  169. data/include/rbs/ruby_objs.h +0 -72
  170. data/src/constants.c +0 -153
  171. data/src/ruby_objs.c +0 -799
@@ -10,6 +10,8 @@
10
10
  #ifndef RBS_CONSTANT_POOL_H
11
11
  #define RBS_CONSTANT_POOL_H
12
12
 
13
+ #include "rbs/util/rbs_encoding.h"
14
+
13
15
  #include <assert.h>
14
16
  #include <stdbool.h>
15
17
  #include <stdint.h>
@@ -28,70 +30,6 @@
28
30
  */
29
31
  typedef uint32_t rbs_constant_id_t;
30
32
 
31
- /**
32
- * A list of constant IDs. Usually used to represent a set of locals.
33
- */
34
- typedef struct {
35
- /** The number of constant ids in the list. */
36
- size_t size;
37
-
38
- /** The number of constant ids that have been allocated in the list. */
39
- size_t capacity;
40
-
41
- /** The constant ids in the list. */
42
- rbs_constant_id_t *ids;
43
- } rbs_constant_id_list_t;
44
-
45
- /**
46
- * Initialize a list of constant ids.
47
- *
48
- * @param list The list to initialize.
49
- */
50
- void rbs_constant_id_list_init(rbs_constant_id_list_t *list);
51
-
52
- /**
53
- * Initialize a list of constant ids with a given capacity.
54
- *
55
- * @param list The list to initialize.
56
- * @param capacity The initial capacity of the list.
57
- */
58
- void rbs_constant_id_list_init_capacity(rbs_constant_id_list_t *list, size_t capacity);
59
-
60
- /**
61
- * Append a constant id to a list of constant ids. Returns false if any
62
- * potential reallocations fail.
63
- *
64
- * @param list The list to append to.
65
- * @param id The id to append.
66
- * @return Whether the append succeeded.
67
- */
68
- bool rbs_constant_id_list_append(rbs_constant_id_list_t *list, rbs_constant_id_t id);
69
-
70
- /**
71
- * Insert a constant id into a list of constant ids at the specified index.
72
- *
73
- * @param list The list to insert into.
74
- * @param index The index at which to insert.
75
- * @param id The id to insert.
76
- */
77
- void rbs_constant_id_list_insert(rbs_constant_id_list_t *list, size_t index, rbs_constant_id_t id);
78
-
79
- /**
80
- * Checks if the current constant id list includes the given constant id.
81
- *
82
- * @param list The list to check.
83
- * @param id The id to check for.
84
- * @return Whether the list includes the given id.
85
- */
86
- bool rbs_constant_id_list_includes(rbs_constant_id_list_t *list, rbs_constant_id_t id);
87
-
88
- /**
89
- * Free the memory associated with a list of constant ids.
90
- *
91
- * @param list The list to free.
92
- */
93
- void rbs_constant_id_list_free(rbs_constant_id_list_t *list);
94
-
95
33
  /**
96
34
  * The type of bucket in the constant pool hash map. This determines how the
97
35
  * bucket should be freed.
@@ -110,10 +48,10 @@ static const rbs_constant_pool_bucket_type_t RBS_CONSTANT_POOL_BUCKET_CONSTANT =
110
48
  /** A bucket in the hash map. */
111
49
  typedef struct {
112
50
  /** The incremental ID used for indexing back into the pool. */
113
- unsigned int id: 30;
51
+ unsigned int id : 30;
114
52
 
115
53
  /** The type of the bucket, which determines how to free it. */
116
- rbs_constant_pool_bucket_type_t type: 2;
54
+ rbs_constant_pool_bucket_type_t type : 2;
117
55
 
118
56
  /** The hash of the bucket. */
119
57
  uint32_t hash;
@@ -162,7 +100,7 @@ bool rbs_constant_pool_init(rbs_constant_pool_t *pool, uint32_t capacity);
162
100
  * @param constant_id The id of the constant to get.
163
101
  * @return A pointer to the constant.
164
102
  */
165
- rbs_constant_t * rbs_constant_pool_id_to_constant(const rbs_constant_pool_t *pool, rbs_constant_id_t constant_id);
103
+ rbs_constant_t *rbs_constant_pool_id_to_constant(const rbs_constant_pool_t *pool, rbs_constant_id_t constant_id);
166
104
 
167
105
  /**
168
106
  * Find a constant in a constant pool. Returns the id of the constant, or 0 if
@@ -185,6 +123,7 @@ rbs_constant_id_t rbs_constant_pool_find(const rbs_constant_pool_t *pool, const
185
123
  * @return The id of the constant.
186
124
  */
187
125
  rbs_constant_id_t rbs_constant_pool_insert_shared(rbs_constant_pool_t *pool, const uint8_t *start, size_t length);
126
+ rbs_constant_id_t rbs_constant_pool_insert_shared_with_encoding(rbs_constant_pool_t *pool, const uint8_t *start, size_t length, const rbs_encoding_t *encoding);
188
127
 
189
128
  /**
190
129
  * Insert a constant into a constant pool from memory that is now owned by the
@@ -0,0 +1,282 @@
1
+ /**
2
+ * @file encoding.h
3
+ *
4
+ * The encoding interface and implementations used by the parser.
5
+ */
6
+ #ifndef RBS_RBS_ENCODING_H
7
+ #define RBS_RBS_ENCODING_H
8
+
9
+ #include "rbs/defines.h"
10
+
11
+ #include <assert.h>
12
+ #include <stdbool.h>
13
+ #include <stddef.h>
14
+ #include <stdint.h>
15
+
16
+ /**
17
+ * This struct defines the functions necessary to implement the encoding
18
+ * interface so we can determine how many bytes the subsequent character takes.
19
+ * Each callback should return the number of bytes, or 0 if the next bytes are
20
+ * invalid for the encoding and type.
21
+ */
22
+ typedef struct {
23
+ /**
24
+ * Return the number of bytes that the next character takes if it is valid
25
+ * in the encoding. Does not read more than n bytes. It is assumed that n is
26
+ * at least 1.
27
+ */
28
+ size_t (*char_width)(const uint8_t *b, ptrdiff_t n);
29
+
30
+ /**
31
+ * Return the number of bytes that the next character takes if it is valid
32
+ * in the encoding and is alphabetical. Does not read more than n bytes. It
33
+ * is assumed that n is at least 1.
34
+ */
35
+ size_t (*alpha_char)(const uint8_t *b, ptrdiff_t n);
36
+
37
+ /**
38
+ * Return the number of bytes that the next character takes if it is valid
39
+ * in the encoding and is alphanumeric. Does not read more than n bytes. It
40
+ * is assumed that n is at least 1.
41
+ */
42
+ size_t (*alnum_char)(const uint8_t *b, ptrdiff_t n);
43
+
44
+ /**
45
+ * Return true if the next character is valid in the encoding and is an
46
+ * uppercase character. Does not read more than n bytes. It is assumed that
47
+ * n is at least 1.
48
+ */
49
+ bool (*isupper_char)(const uint8_t *b, ptrdiff_t n);
50
+
51
+ /**
52
+ * The name of the encoding. This should correspond to a value that can be
53
+ * passed to Encoding.find in Ruby.
54
+ */
55
+ const char *name;
56
+
57
+ /**
58
+ * Return true if the encoding is a multibyte encoding.
59
+ */
60
+ bool multibyte;
61
+ } rbs_encoding_t;
62
+
63
+ /**
64
+ * All of the lookup tables use the first bit of each embedded byte to indicate
65
+ * whether the codepoint is alphabetical.
66
+ */
67
+ #define RBS_ENCODING_ALPHABETIC_BIT 1 << 0
68
+
69
+ /**
70
+ * All of the lookup tables use the second bit of each embedded byte to indicate
71
+ * whether the codepoint is alphanumeric.
72
+ */
73
+ #define RBS_ENCODING_ALPHANUMERIC_BIT 1 << 1
74
+
75
+ /**
76
+ * All of the lookup tables use the third bit of each embedded byte to indicate
77
+ * whether the codepoint is uppercase.
78
+ */
79
+ #define RBS_ENCODING_UPPERCASE_BIT 1 << 2
80
+
81
+ /**
82
+ * Return the size of the next character in the UTF-8 encoding.
83
+ *
84
+ * @param b The bytes to read.
85
+ * @param n The number of bytes that can be read.
86
+ * @returns The number of bytes that the next character takes if it is valid in
87
+ * the encoding, or 0 if it is not.
88
+ */
89
+ size_t rbs_encoding_utf_8_char_width(const uint8_t *b, ptrdiff_t n);
90
+
91
+ /**
92
+ * Return the size of the next character in the UTF-8 encoding if it is an
93
+ * alphabetical character.
94
+ *
95
+ * @param b The bytes to read.
96
+ * @param n The number of bytes that can be read.
97
+ * @returns The number of bytes that the next character takes if it is valid in
98
+ * the encoding, or 0 if it is not.
99
+ */
100
+ size_t rbs_encoding_utf_8_alpha_char(const uint8_t *b, ptrdiff_t n);
101
+
102
+ /**
103
+ * Return the size of the next character in the UTF-8 encoding if it is an
104
+ * alphanumeric character.
105
+ *
106
+ * @param b The bytes to read.
107
+ * @param n The number of bytes that can be read.
108
+ * @returns The number of bytes that the next character takes if it is valid in
109
+ * the encoding, or 0 if it is not.
110
+ */
111
+ size_t rbs_encoding_utf_8_alnum_char(const uint8_t *b, ptrdiff_t n);
112
+
113
+ /**
114
+ * Return true if the next character in the UTF-8 encoding if it is an uppercase
115
+ * character.
116
+ *
117
+ * @param b The bytes to read.
118
+ * @param n The number of bytes that can be read.
119
+ * @returns True if the next character is valid in the encoding and is an
120
+ * uppercase character, or false if it is not.
121
+ */
122
+ bool rbs_encoding_utf_8_isupper_char(const uint8_t *b, ptrdiff_t n);
123
+
124
+ /**
125
+ * This lookup table is referenced in both the UTF-8 encoding file and the
126
+ * parser directly in order to speed up the default encoding processing. It is
127
+ * used to indicate whether a character is alphabetical, alphanumeric, or
128
+ * uppercase in unicode mappings.
129
+ */
130
+ extern const uint8_t rbs_encoding_unicode_table[256];
131
+
132
+ /**
133
+ * These are all of the encodings that prism supports.
134
+ */
135
+ typedef enum {
136
+ RBS_ENCODING_UTF_8 = 0,
137
+ RBS_ENCODING_US_ASCII,
138
+ RBS_ENCODING_ASCII_8BIT,
139
+ RBS_ENCODING_EUC_JP,
140
+ RBS_ENCODING_WINDOWS_31J,
141
+
142
+ // We optionally support excluding the full set of encodings to only support the
143
+ // minimum necessary to process Ruby code without encoding comments.
144
+ #ifndef RBS_ENCODING_EXCLUDE_FULL
145
+ RBS_ENCODING_BIG5,
146
+ RBS_ENCODING_BIG5_HKSCS,
147
+ RBS_ENCODING_BIG5_UAO,
148
+ RBS_ENCODING_CESU_8,
149
+ RBS_ENCODING_CP51932,
150
+ RBS_ENCODING_CP850,
151
+ RBS_ENCODING_CP852,
152
+ RBS_ENCODING_CP855,
153
+ RBS_ENCODING_CP949,
154
+ RBS_ENCODING_CP950,
155
+ RBS_ENCODING_CP951,
156
+ RBS_ENCODING_EMACS_MULE,
157
+ RBS_ENCODING_EUC_JP_MS,
158
+ RBS_ENCODING_EUC_JIS_2004,
159
+ RBS_ENCODING_EUC_KR,
160
+ RBS_ENCODING_EUC_TW,
161
+ RBS_ENCODING_GB12345,
162
+ RBS_ENCODING_GB18030,
163
+ RBS_ENCODING_GB1988,
164
+ RBS_ENCODING_GB2312,
165
+ RBS_ENCODING_GBK,
166
+ RBS_ENCODING_IBM437,
167
+ RBS_ENCODING_IBM720,
168
+ RBS_ENCODING_IBM737,
169
+ RBS_ENCODING_IBM775,
170
+ RBS_ENCODING_IBM852,
171
+ RBS_ENCODING_IBM855,
172
+ RBS_ENCODING_IBM857,
173
+ RBS_ENCODING_IBM860,
174
+ RBS_ENCODING_IBM861,
175
+ RBS_ENCODING_IBM862,
176
+ RBS_ENCODING_IBM863,
177
+ RBS_ENCODING_IBM864,
178
+ RBS_ENCODING_IBM865,
179
+ RBS_ENCODING_IBM866,
180
+ RBS_ENCODING_IBM869,
181
+ RBS_ENCODING_ISO_8859_1,
182
+ RBS_ENCODING_ISO_8859_2,
183
+ RBS_ENCODING_ISO_8859_3,
184
+ RBS_ENCODING_ISO_8859_4,
185
+ RBS_ENCODING_ISO_8859_5,
186
+ RBS_ENCODING_ISO_8859_6,
187
+ RBS_ENCODING_ISO_8859_7,
188
+ RBS_ENCODING_ISO_8859_8,
189
+ RBS_ENCODING_ISO_8859_9,
190
+ RBS_ENCODING_ISO_8859_10,
191
+ RBS_ENCODING_ISO_8859_11,
192
+ RBS_ENCODING_ISO_8859_13,
193
+ RBS_ENCODING_ISO_8859_14,
194
+ RBS_ENCODING_ISO_8859_15,
195
+ RBS_ENCODING_ISO_8859_16,
196
+ RBS_ENCODING_KOI8_R,
197
+ RBS_ENCODING_KOI8_U,
198
+ RBS_ENCODING_MAC_CENT_EURO,
199
+ RBS_ENCODING_MAC_CROATIAN,
200
+ RBS_ENCODING_MAC_CYRILLIC,
201
+ RBS_ENCODING_MAC_GREEK,
202
+ RBS_ENCODING_MAC_ICELAND,
203
+ RBS_ENCODING_MAC_JAPANESE,
204
+ RBS_ENCODING_MAC_ROMAN,
205
+ RBS_ENCODING_MAC_ROMANIA,
206
+ RBS_ENCODING_MAC_THAI,
207
+ RBS_ENCODING_MAC_TURKISH,
208
+ RBS_ENCODING_MAC_UKRAINE,
209
+ RBS_ENCODING_SHIFT_JIS,
210
+ RBS_ENCODING_SJIS_DOCOMO,
211
+ RBS_ENCODING_SJIS_KDDI,
212
+ RBS_ENCODING_SJIS_SOFTBANK,
213
+ RBS_ENCODING_STATELESS_ISO_2022_JP,
214
+ RBS_ENCODING_STATELESS_ISO_2022_JP_KDDI,
215
+ RBS_ENCODING_TIS_620,
216
+ RBS_ENCODING_UTF8_MAC,
217
+ RBS_ENCODING_UTF8_DOCOMO,
218
+ RBS_ENCODING_UTF8_KDDI,
219
+ RBS_ENCODING_UTF8_SOFTBANK,
220
+ RBS_ENCODING_WINDOWS_1250,
221
+ RBS_ENCODING_WINDOWS_1251,
222
+ RBS_ENCODING_WINDOWS_1252,
223
+ RBS_ENCODING_WINDOWS_1253,
224
+ RBS_ENCODING_WINDOWS_1254,
225
+ RBS_ENCODING_WINDOWS_1255,
226
+ RBS_ENCODING_WINDOWS_1256,
227
+ RBS_ENCODING_WINDOWS_1257,
228
+ RBS_ENCODING_WINDOWS_1258,
229
+ RBS_ENCODING_WINDOWS_874,
230
+ #endif
231
+
232
+ RBS_ENCODING_MAXIMUM
233
+ } rbs_encoding_type_t;
234
+
235
+ /**
236
+ * This is the table of all of the encodings that prism supports.
237
+ */
238
+ extern const rbs_encoding_t rbs_encodings[RBS_ENCODING_MAXIMUM];
239
+
240
+ /**
241
+ * This is the default UTF-8 encoding. We need a reference to it to quickly
242
+ * create parsers.
243
+ */
244
+ #define RBS_ENCODING_UTF_8_ENTRY (&rbs_encodings[RBS_ENCODING_UTF_8])
245
+
246
+ /**
247
+ * This is the US-ASCII encoding. We need a reference to it to be able to
248
+ * compare against it when a string is being created because it could possibly
249
+ * need to fall back to ASCII-8BIT.
250
+ */
251
+ #define RBS_ENCODING_US_ASCII_ENTRY (&rbs_encodings[RBS_ENCODING_US_ASCII])
252
+
253
+ /**
254
+ * This is the ASCII-8BIT encoding. We need a reference to it so that rbs_strpbrk
255
+ * can compare against it because invalid multibyte characters are not a thing
256
+ * in this encoding. It is also needed for handling Regexp encoding flags.
257
+ */
258
+ #define RBS_ENCODING_ASCII_8BIT_ENTRY (&rbs_encodings[RBS_ENCODING_ASCII_8BIT])
259
+
260
+ /**
261
+ * This is the EUC-JP encoding. We need a reference to it to quickly process
262
+ * regular expression modifiers.
263
+ */
264
+ #define RBS_ENCODING_EUC_JP_ENTRY (&rbs_encodings[RBS_ENCODING_EUC_JP])
265
+
266
+ /**
267
+ * This is the Windows-31J encoding. We need a reference to it to quickly
268
+ * process regular expression modifiers.
269
+ */
270
+ #define RBS_ENCODING_WINDOWS_31J_ENTRY (&rbs_encodings[RBS_ENCODING_WINDOWS_31J])
271
+
272
+ /**
273
+ * Parse the given name of an encoding and return a pointer to the corresponding
274
+ * encoding struct if one can be found, otherwise return NULL.
275
+ *
276
+ * @param start A pointer to the first byte of the name.
277
+ * @param end A pointer to the last byte of the name.
278
+ * @returns A pointer to the encoding struct if one is found, otherwise NULL.
279
+ */
280
+ const rbs_encoding_t *rbs_encoding_find(const uint8_t *start, const uint8_t *end);
281
+
282
+ #endif
@@ -0,0 +1,23 @@
1
+ #ifndef RBS_RBS_UNESCAPE_H
2
+ #define RBS_RBS_UNESCAPE_H
3
+
4
+ #include <stddef.h>
5
+ #include "rbs/util/rbs_allocator.h"
6
+ #include "rbs/string.h"
7
+
8
+ /**
9
+ * Receives `rbs_parser_t` and `range`, which represents a string token or symbol token, and returns a string VALUE.
10
+ *
11
+ * Input token | Output string
12
+ * ------------+-------------
13
+ * "foo\\n" | foo\n
14
+ * 'foo' | foo
15
+ * `bar` | bar
16
+ * :"baz\\t" | baz\t
17
+ * :'baz' | baz
18
+ *
19
+ * @returns A new owned string that will be freed when the allocator is freed.
20
+ * */
21
+ rbs_string_t rbs_unquote_string(rbs_allocator_t *, const rbs_string_t input);
22
+
23
+ #endif // RBS_RBS_UNESCAPE_H
data/include/rbs.h CHANGED
@@ -1,7 +1,6 @@
1
1
  #ifndef RBS_H
2
2
  #define RBS_H
3
3
 
4
- #include "rbs/constants.h"
5
- #include "rbs/ruby_objs.h"
4
+ #include "rbs/parser.h"
6
5
 
7
6
  #endif
@@ -59,20 +59,10 @@ module RBS
59
59
 
60
60
  def self.each_part(doc, &block)
61
61
  if block
62
- document =
63
- case doc
64
- when String
65
- raise
66
- when RDoc::Comment
67
- document = doc.parse
68
- when RDoc::Markup::Document
69
- document = doc
70
- end
71
-
72
- if document.file
73
- yield document
62
+ if doc.file
63
+ yield doc
74
64
  else
75
- document.each do |d|
65
+ doc.each do |d|
76
66
  each_part(d, &block)
77
67
  end
78
68
  end
@@ -39,7 +39,9 @@ module RBS
39
39
  def each_part(subjects, tester:)
40
40
  if block_given?
41
41
  subjects.each do |subject, docs|
42
- Formatter.each_part(subject.comment) do |doc|
42
+ comment = subject.comment
43
+ raise if comment.is_a?(String)
44
+ Formatter.each_part(comment.parse) do |doc|
43
45
  if tester.test_path(doc.file || raise)
44
46
  yield [doc, subject]
45
47
  end
@@ -23,7 +23,7 @@ module RBS
23
23
  @stores.clear()
24
24
 
25
25
  RDoc::RI::Paths.each(with_system_dir, with_site_dir, with_home_dir, with_gems_dir ? :latest : false, *extra_dirs.map(&:to_s)) do |path, type|
26
- store = RDoc::Store.new(path, type)
26
+ store = RDoc::Store.new(RDoc::Options.new, path:, type:)
27
27
  store.load_all
28
28
 
29
29
  @stores << store
@@ -131,7 +131,7 @@ EOU
131
131
 
132
132
  self_params =
133
133
  if self_type.name.class?
134
- @env.normalized_module_entry(self_type.name)&.type_params
134
+ @env.module_entry(self_type.name, normalized: true)&.type_params
135
135
  else
136
136
  @env.interface_decls[self_type.name]&.decl&.type_params
137
137
  end
@@ -188,7 +188,7 @@ EOU
188
188
  end
189
189
  params =
190
190
  if member.name.class?
191
- module_decl = @env.normalized_module_entry(member.name) or raise
191
+ module_decl = @env.module_entry(member.name, normalized: true) or raise
192
192
  module_decl.type_params
193
193
  else
194
194
  interface_decl = @env.interface_decls.fetch(member.name)
data/lib/rbs/cli.rb CHANGED
@@ -947,7 +947,7 @@ Import documents from RDoc and update RBS files.
947
947
 
948
948
  Examples:
949
949
 
950
- $ rbs annotate stdlib/pathname/**/*.rbs
950
+ $ rbs annotate stdlib/logger/**/*.rbs
951
951
 
952
952
  Options:
953
953
  EOB
@@ -14,6 +14,7 @@ module RBS
14
14
  "net-smtp" => nil,
15
15
  "nkf" => nil,
16
16
  "observer" => nil,
17
+ "cgi" => nil,
17
18
  }
18
19
 
19
20
  class GemfileLockMismatchError < StandardError
@@ -220,7 +220,7 @@ module RBS
220
220
  InvalidTypeApplicationError.check2!(type_name: super_class.name, args: super_class.args, env: env, location: super_class.location)
221
221
  end
222
222
 
223
- super_entry = env.normalized_class_entry(super_name) or raise
223
+ super_entry = env.class_entry(super_name, normalized: true) or raise
224
224
  super_args = AST::TypeParam.normalize_args(super_entry.type_params, super_args)
225
225
 
226
226
  ancestors = OneAncestors.class_instance(
@@ -248,7 +248,7 @@ module RBS
248
248
 
249
249
  module_name = module_self.name
250
250
  if module_name.class?
251
- module_entry = env.normalized_module_class_entry(module_name) or raise
251
+ module_entry = env.module_class_entry(module_name, normalized: true) or raise
252
252
  module_name = module_entry.name
253
253
  self_args = AST::TypeParam.normalize_args(module_entry.type_params, module_self.args)
254
254
  end
@@ -359,7 +359,7 @@ module RBS
359
359
  MixinClassError.check!(type_name: type_name, env: env, member: member)
360
360
  NoMixinFoundError.check!(member.name, env: env, member: member)
361
361
 
362
- module_decl = env.normalized_module_entry(module_name) or raise
362
+ module_decl = env.module_entry(module_name, normalized: true) or raise
363
363
  module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
364
364
 
365
365
  module_name = env.normalize_module_name(module_name)
@@ -378,7 +378,7 @@ module RBS
378
378
  MixinClassError.check!(type_name: type_name, env: env, member: member)
379
379
  NoMixinFoundError.check!(member.name, env: env, member: member)
380
380
 
381
- module_decl = env.normalized_module_entry(member.name) or raise
381
+ module_decl = env.module_entry(member.name, normalized: true) or raise
382
382
  module_name = module_decl.name
383
383
 
384
384
  module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
@@ -396,7 +396,7 @@ module RBS
396
396
  MixinClassError.check!(type_name: type_name, env: env, member: member)
397
397
  NoMixinFoundError.check!(member.name, env: env, member: member)
398
398
 
399
- module_decl = env.normalized_module_entry(module_name) or raise
399
+ module_decl = env.module_entry(module_name, normalized: true) or raise
400
400
  module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
401
401
 
402
402
  module_name = env.normalize_module_name(module_name)