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.
- checksums.yaml +4 -4
- data/.clang-format +74 -0
- data/.clangd +2 -0
- data/.github/workflows/c-check.yml +54 -0
- data/.github/workflows/comments.yml +3 -3
- data/.github/workflows/ruby.yml +34 -19
- data/.github/workflows/typecheck.yml +1 -1
- data/.github/workflows/windows.yml +1 -1
- data/.gitignore +4 -0
- data/README.md +38 -1
- data/Rakefile +152 -23
- data/config.yml +190 -62
- data/core/array.rbs +44 -43
- data/core/dir.rbs +2 -2
- data/core/encoding.rbs +3 -2
- data/core/enumerable.rbs +89 -2
- data/core/errno.rbs +8 -0
- data/core/errors.rbs +28 -1
- data/core/exception.rbs +2 -2
- data/core/fiber.rbs +3 -3
- data/core/file.rbs +26 -11
- data/core/float.rbs +1 -1
- data/core/gc.rbs +422 -281
- data/core/hash.rbs +1024 -727
- data/core/io/wait.rbs +11 -33
- data/core/io.rbs +6 -4
- data/core/kernel.rbs +49 -43
- data/core/marshal.rbs +1 -1
- data/core/match_data.rbs +1 -1
- data/core/math.rbs +42 -3
- data/core/method.rbs +14 -6
- data/core/module.rbs +71 -11
- data/core/nil_class.rbs +3 -3
- data/core/numeric.rbs +8 -8
- data/core/object.rbs +3 -3
- data/core/object_space.rbs +13 -0
- data/{stdlib/pathname/0 → core}/pathname.rbs +253 -352
- data/core/proc.rbs +15 -8
- data/core/process.rbs +2 -2
- data/core/ractor.rbs +278 -437
- data/core/range.rbs +6 -7
- data/core/rbs/unnamed/argf.rbs +1 -1
- data/core/rbs/unnamed/env_class.rbs +1 -1
- data/core/rbs/unnamed/random.rbs +4 -2
- data/core/regexp.rbs +22 -17
- data/core/ruby_vm.rbs +6 -4
- data/core/rubygems/errors.rbs +3 -70
- data/core/rubygems/rubygems.rbs +11 -79
- data/core/set.rbs +439 -332
- data/core/string.rbs +2897 -1117
- data/core/struct.rbs +1 -1
- data/core/symbol.rbs +4 -4
- data/core/thread.rbs +83 -20
- data/core/time.rbs +35 -9
- data/core/unbound_method.rbs +14 -6
- data/docs/aliases.md +79 -0
- data/docs/collection.md +2 -2
- data/docs/gem.md +0 -1
- data/docs/sigs.md +3 -3
- data/ext/rbs_extension/ast_translation.c +1016 -0
- data/ext/rbs_extension/ast_translation.h +37 -0
- data/ext/rbs_extension/class_constants.c +157 -0
- data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +7 -1
- data/ext/rbs_extension/compat.h +10 -0
- data/ext/rbs_extension/extconf.rb +25 -1
- data/ext/rbs_extension/legacy_location.c +317 -0
- data/ext/rbs_extension/legacy_location.h +45 -0
- data/ext/rbs_extension/main.c +365 -14
- data/ext/rbs_extension/rbs_extension.h +6 -21
- data/ext/rbs_extension/rbs_string_bridging.c +9 -0
- data/ext/rbs_extension/rbs_string_bridging.h +24 -0
- data/include/rbs/ast.h +687 -0
- data/include/rbs/defines.h +86 -0
- data/include/rbs/lexer.h +199 -0
- data/include/rbs/location.h +59 -0
- data/include/rbs/parser.h +135 -0
- data/include/rbs/string.h +49 -0
- data/include/rbs/util/rbs_allocator.h +59 -0
- data/include/rbs/util/rbs_assert.h +20 -0
- data/include/rbs/util/rbs_buffer.h +83 -0
- data/include/rbs/util/rbs_constant_pool.h +6 -67
- data/include/rbs/util/rbs_encoding.h +282 -0
- data/include/rbs/util/rbs_unescape.h +23 -0
- data/include/rbs.h +1 -2
- data/lib/rbs/annotate/formatter.rb +3 -13
- data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
- data/lib/rbs/annotate/rdoc_source.rb +1 -1
- data/lib/rbs/cli/validate.rb +2 -2
- data/lib/rbs/cli.rb +1 -1
- data/lib/rbs/collection/config/lockfile_generator.rb +1 -0
- data/lib/rbs/definition_builder/ancestor_builder.rb +5 -5
- data/lib/rbs/environment.rb +64 -59
- data/lib/rbs/environment_loader.rb +1 -1
- data/lib/rbs/errors.rb +1 -1
- data/lib/rbs/parser_aux.rb +5 -0
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +124 -38
- data/lib/rbs/test/type_check.rb +13 -0
- data/lib/rbs/types.rb +3 -1
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +1 -1
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +3 -3
- data/sig/annotate/formatter.rbs +2 -2
- data/sig/annotate/rdoc_annotater.rbs +1 -1
- data/sig/environment.rbs +57 -6
- data/sig/manifest.yaml +0 -1
- data/sig/parser.rbs +20 -0
- data/sig/resolver/type_name_resolver.rbs +38 -7
- data/sig/types.rbs +4 -1
- data/src/ast.c +1256 -0
- data/src/lexer.c +2956 -0
- data/src/lexer.re +147 -0
- data/src/lexstate.c +205 -0
- data/src/location.c +71 -0
- data/src/parser.c +3495 -0
- data/src/string.c +90 -0
- data/src/util/rbs_allocator.c +152 -0
- data/src/util/rbs_assert.c +21 -0
- data/src/util/rbs_buffer.c +54 -0
- data/src/util/rbs_constant_pool.c +16 -86
- data/src/util/rbs_encoding.c +21308 -0
- data/src/util/rbs_unescape.c +131 -0
- data/stdlib/cgi/0/core.rbs +2 -396
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/cgi-escape/0/escape.rbs +153 -0
- data/stdlib/coverage/0/coverage.rbs +3 -1
- data/stdlib/delegate/0/delegator.rbs +10 -7
- data/stdlib/erb/0/erb.rbs +737 -347
- data/stdlib/fileutils/0/fileutils.rbs +18 -13
- data/stdlib/forwardable/0/forwardable.rbs +3 -0
- data/stdlib/json/0/json.rbs +67 -48
- data/stdlib/net-http/0/net-http.rbs +3 -0
- data/stdlib/objspace/0/objspace.rbs +8 -3
- data/stdlib/open-uri/0/open-uri.rbs +40 -0
- data/stdlib/openssl/0/openssl.rbs +182 -149
- data/stdlib/optparse/0/optparse.rbs +3 -3
- data/stdlib/rdoc/0/code_object.rbs +2 -2
- data/stdlib/rdoc/0/comment.rbs +2 -0
- data/stdlib/rdoc/0/options.rbs +76 -0
- data/stdlib/rdoc/0/rdoc.rbs +7 -5
- data/stdlib/rdoc/0/store.rbs +1 -1
- data/stdlib/resolv/0/resolv.rbs +25 -68
- data/stdlib/ripper/0/ripper.rbs +5 -2
- data/stdlib/singleton/0/singleton.rbs +3 -0
- data/stdlib/socket/0/socket.rbs +13 -1
- data/stdlib/socket/0/tcp_socket.rbs +10 -2
- data/stdlib/stringio/0/stringio.rbs +412 -80
- data/stdlib/strscan/0/string_scanner.rbs +31 -31
- data/stdlib/tempfile/0/tempfile.rbs +1 -1
- data/stdlib/tsort/0/cyclic.rbs +3 -0
- data/stdlib/uri/0/common.rbs +11 -2
- data/stdlib/uri/0/file.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +16 -15
- data/stdlib/uri/0/rfc2396_parser.rbs +6 -7
- data/stdlib/zlib/0/zstream.rbs +1 -0
- metadata +41 -18
- data/ext/rbs_extension/lexer.c +0 -2728
- data/ext/rbs_extension/lexer.h +0 -179
- data/ext/rbs_extension/lexer.re +0 -147
- data/ext/rbs_extension/lexstate.c +0 -175
- data/ext/rbs_extension/location.c +0 -325
- data/ext/rbs_extension/location.h +0 -85
- data/ext/rbs_extension/parser.c +0 -2982
- data/ext/rbs_extension/parser.h +0 -18
- data/ext/rbs_extension/parserstate.c +0 -411
- data/ext/rbs_extension/parserstate.h +0 -163
- data/ext/rbs_extension/unescape.c +0 -32
- data/include/rbs/ruby_objs.h +0 -72
- data/src/constants.c +0 -153
- 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 *
|
|
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
|
@@ -59,20 +59,10 @@ module RBS
|
|
|
59
59
|
|
|
60
60
|
def self.each_part(doc, &block)
|
|
61
61
|
if block
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
26
|
+
store = RDoc::Store.new(RDoc::Options.new, path:, type:)
|
|
27
27
|
store.load_all
|
|
28
28
|
|
|
29
29
|
@stores << store
|
data/lib/rbs/cli/validate.rb
CHANGED
|
@@ -131,7 +131,7 @@ EOU
|
|
|
131
131
|
|
|
132
132
|
self_params =
|
|
133
133
|
if self_type.name.class?
|
|
134
|
-
@env.
|
|
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.
|
|
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
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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)
|