rbs 3.9.4 → 4.1.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 +75 -0
- data/.clangd +2 -0
- data/.dockerignore +37 -0
- data/.github/dependabot.yml +16 -14
- data/.github/workflows/bundle-update.yml +63 -0
- data/.github/workflows/c-check.yml +66 -0
- data/.github/workflows/comments.yml +5 -3
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/jruby.yml +79 -0
- data/.github/workflows/release-gems.yml +164 -0
- data/.github/workflows/ruby.yml +84 -30
- data/.github/workflows/rust.yml +186 -0
- data/.github/workflows/truffleruby.yml +54 -0
- data/.github/workflows/typecheck.yml +5 -2
- data/.github/workflows/wasm.yml +55 -0
- data/.github/workflows/windows.yml +9 -3
- data/.gitignore +16 -0
- data/.rubocop.yml +2 -2
- data/CHANGELOG.md +430 -0
- data/Dockerfile.jruby +53 -0
- data/README.md +41 -4
- data/Rakefile +777 -60
- data/Steepfile +11 -0
- data/config.yml +660 -62
- data/core/array.rbs +541 -398
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +9 -8
- data/core/class.rbs +11 -8
- data/core/comparable.rbs +55 -34
- data/core/complex.rbs +104 -78
- data/core/dir.rbs +61 -49
- data/core/encoding.rbs +12 -15
- data/core/enumerable.rbs +297 -196
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator/product.rbs +5 -5
- data/core/enumerator.rbs +91 -28
- data/core/errno.rbs +11 -2
- data/core/errors.rbs +58 -29
- data/core/exception.rbs +13 -13
- data/core/fiber.rbs +74 -54
- data/core/file.rbs +260 -1151
- data/core/file_constants.rbs +463 -0
- data/core/file_stat.rbs +534 -0
- data/core/file_test.rbs +3 -3
- data/core/float.rbs +257 -116
- data/core/gc.rbs +425 -281
- data/core/hash.rbs +1151 -829
- data/core/integer.rbs +156 -195
- data/core/io/buffer.rbs +53 -42
- data/core/io/wait.rbs +13 -35
- data/core/io.rbs +220 -154
- data/core/kernel.rbs +239 -163
- data/core/marshal.rbs +4 -4
- data/core/match_data.rbs +16 -14
- data/core/math.rbs +107 -66
- data/core/method.rbs +69 -33
- data/core/module.rbs +302 -150
- data/core/nil_class.rbs +7 -6
- data/core/numeric.rbs +77 -63
- data/core/object.rbs +9 -11
- data/core/object_space/weak_key_map.rbs +7 -7
- data/core/object_space.rbs +30 -23
- data/core/pathname.rbs +1312 -0
- data/core/proc.rbs +95 -58
- data/core/process.rbs +222 -202
- data/core/ractor.rbs +364 -518
- data/core/random.rbs +21 -3
- data/core/range.rbs +181 -79
- data/core/rational.rbs +60 -89
- data/core/rbs/ops.rbs +154 -0
- data/core/rbs/unnamed/argf.rbs +63 -56
- data/core/rbs/unnamed/env_class.rbs +19 -14
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +11 -118
- data/core/regexp.rbs +258 -214
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +78 -34
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +6 -70
- data/core/rubygems/requirement.rbs +5 -15
- data/core/rubygems/rubygems.rbs +18 -81
- data/core/rubygems/specification.rbs +8 -0
- data/core/rubygems/version.rbs +2 -163
- data/core/set.rbs +493 -363
- data/core/signal.rbs +26 -16
- data/core/string.rbs +3234 -1285
- data/core/struct.rbs +43 -42
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +139 -83
- data/core/time.rbs +81 -50
- data/core/trace_point.rbs +41 -35
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +24 -16
- data/core/warning.rbs +7 -7
- data/docs/CONTRIBUTING.md +2 -1
- data/docs/aliases.md +79 -0
- data/docs/collection.md +3 -3
- data/docs/config.md +171 -0
- data/docs/encoding.md +56 -0
- data/docs/gem.md +0 -1
- data/docs/inline.md +634 -0
- data/docs/rbs_by_example.md +20 -20
- data/docs/release.md +151 -0
- data/docs/rust.md +96 -0
- data/docs/sigs.md +3 -3
- data/docs/syntax.md +48 -18
- data/docs/type_fingerprint.md +21 -0
- data/docs/wasm_serialization.md +80 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +1855 -0
- data/ext/rbs_extension/ast_translation.h +41 -0
- data/ext/rbs_extension/class_constants.c +187 -0
- data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +23 -1
- data/ext/rbs_extension/compat.h +10 -0
- data/ext/rbs_extension/extconf.rb +26 -1
- data/ext/rbs_extension/legacy_location.c +299 -0
- data/ext/rbs_extension/legacy_location.h +82 -0
- data/ext/rbs_extension/main.c +603 -23
- 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 +1047 -0
- data/include/rbs/defines.h +99 -0
- data/include/rbs/lexer.h +207 -0
- data/include/rbs/location.h +40 -0
- data/include/rbs/parser.h +153 -0
- data/include/rbs/serialize.h +39 -0
- data/include/rbs/string.h +47 -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 -70
- data/include/rbs/util/rbs_encoding.h +282 -0
- data/include/rbs/util/rbs_unescape.h +24 -0
- data/include/rbs.h +9 -2
- data/lib/rbs/annotate/formatter.rb +3 -13
- data/lib/rbs/annotate/rdoc_annotator.rb +30 -32
- data/lib/rbs/annotate/rdoc_source.rb +1 -1
- data/lib/rbs/ast/annotation.rb +1 -1
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/ast/declarations.rb +10 -10
- data/lib/rbs/ast/members.rb +14 -14
- data/lib/rbs/ast/ruby/annotations.rb +451 -0
- data/lib/rbs/ast/ruby/comment_block.rb +247 -0
- data/lib/rbs/ast/ruby/declarations.rb +291 -0
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/lib/rbs/ast/ruby/members.rb +762 -0
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +142 -20
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +63 -126
- data/lib/rbs/cli.rb +59 -29
- data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
- data/lib/rbs/collection/sources/git.rb +7 -0
- data/lib/rbs/definition.rb +6 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
- data/lib/rbs/definition_builder/method_builder.rb +74 -33
- data/lib/rbs/definition_builder.rb +177 -20
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment/class_entry.rb +69 -0
- data/lib/rbs/environment/module_entry.rb +66 -0
- data/lib/rbs/environment.rb +410 -215
- data/lib/rbs/environment_loader.rb +2 -8
- data/lib/rbs/errors.rb +31 -21
- data/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/lib/rbs/inline_parser.rb +568 -0
- data/lib/rbs/location_aux.rb +36 -4
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/namespace.rb +47 -18
- data/lib/rbs/parser_aux.rb +37 -7
- data/lib/rbs/prototype/helpers.rb +57 -0
- data/lib/rbs/prototype/rb.rb +3 -28
- data/lib/rbs/prototype/rbi.rb +196 -45
- data/lib/rbs/prototype/runtime.rb +12 -2
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +120 -44
- data/lib/rbs/rewriter.rb +70 -0
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/subtractor.rb +7 -4
- data/lib/rbs/test/type_check.rb +25 -3
- data/lib/rbs/type_name.rb +34 -21
- data/lib/rbs/types.rb +91 -79
- data/lib/rbs/unit_test/convertibles.rb +1 -0
- data/lib/rbs/unit_test/type_assertions.rb +44 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/wasm/deserializer.rb +213 -0
- data/lib/rbs/wasm/location.rb +61 -0
- data/lib/rbs/wasm/parser.rb +137 -0
- data/lib/rbs/wasm/runtime.rb +196 -0
- data/lib/rbs/wasm/serialization_schema.rb +110 -0
- data/lib/rbs.rb +25 -2
- data/lib/rbs_jars.rb +39 -0
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +8 -3
- data/rbs.gemspec +37 -5
- data/schema/typeParam.json +17 -1
- data/sig/ancestor_builder.rbs +1 -1
- data/sig/annotate/formatter.rbs +2 -2
- data/sig/annotate/rdoc_annotater.rbs +13 -10
- data/sig/ast/ruby/annotations.rbs +470 -0
- data/sig/ast/ruby/comment_block.rbs +127 -0
- data/sig/ast/ruby/declarations.rbs +158 -0
- data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/sig/ast/ruby/members.rbs +198 -0
- data/sig/buffer.rbs +81 -5
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/collection/config/lockfile_generator.rbs +2 -0
- data/sig/definition.rbs +6 -0
- data/sig/definition_builder.rbs +3 -1
- data/sig/environment/class_entry.rbs +50 -0
- data/sig/environment/module_entry.rbs +50 -0
- data/sig/environment.rbs +94 -87
- data/sig/errors.rbs +26 -20
- data/sig/inline_parser/comment_association.rbs +71 -0
- data/sig/inline_parser.rbs +126 -0
- data/sig/location.rbs +32 -7
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -2
- data/sig/method_builder.rbs +9 -4
- data/sig/namespace.rbs +20 -5
- data/sig/parser.rbs +77 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/prototype/rbi.rbs +33 -4
- data/sig/resolver/type_name_resolver.rbs +36 -10
- data/sig/rewriter.rbs +45 -0
- data/sig/source.rbs +48 -0
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +15 -5
- data/sig/types.rbs +10 -8
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +15 -0
- data/sig/wasm/deserializer.rbs +66 -0
- data/sig/wasm/serialization_schema.rbs +13 -0
- data/src/ast.c +1628 -0
- data/src/lexer.c +3221 -0
- data/src/lexer.re +155 -0
- data/src/lexstate.c +221 -0
- data/src/location.c +31 -0
- data/src/parser.c +4258 -0
- data/src/serialize.c +958 -0
- data/src/string.c +41 -0
- data/src/util/rbs_allocator.c +171 -0
- data/src/util/rbs_assert.c +19 -0
- data/src/util/rbs_buffer.c +54 -0
- data/src/util/rbs_constant_pool.c +18 -92
- data/src/util/rbs_encoding.c +21308 -0
- data/src/util/rbs_unescape.c +167 -0
- data/stdlib/abbrev/0/array.rbs +1 -1
- data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
- data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
- data/stdlib/cgi/0/core.rbs +9 -393
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/stdlib/coverage/0/coverage.rbs +7 -4
- data/stdlib/csv/0/csv.rbs +5 -5
- data/stdlib/date/0/date.rbs +92 -79
- data/stdlib/date/0/date_time.rbs +25 -24
- data/stdlib/delegate/0/delegator.rbs +11 -7
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/digest/0/digest.rbs +117 -1
- data/stdlib/erb/0/erb.rbs +748 -347
- data/stdlib/etc/0/etc.rbs +73 -54
- data/stdlib/fileutils/0/fileutils.rbs +179 -160
- data/stdlib/forwardable/0/forwardable.rbs +13 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/ipaddr/0/ipaddr.rbs +0 -5
- data/stdlib/json/0/json.rbs +232 -185
- data/stdlib/monitor/0/monitor.rbs +5 -5
- data/stdlib/net-http/0/net-http.rbs +162 -134
- data/stdlib/objspace/0/objspace.rbs +17 -34
- data/stdlib/open-uri/0/open-uri.rbs +48 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +521 -397
- data/stdlib/optparse/0/optparse.rbs +26 -17
- data/stdlib/pathname/0/pathname.rbs +11 -1381
- data/stdlib/pp/0/pp.rbs +9 -8
- data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
- data/stdlib/pstore/0/pstore.rbs +35 -30
- data/stdlib/psych/0/psych.rbs +65 -12
- data/stdlib/psych/0/store.rbs +2 -4
- data/stdlib/pty/0/pty.rbs +9 -6
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +4 -3
- data/stdlib/rdoc/0/comment.rbs +2 -0
- data/stdlib/rdoc/0/options.rbs +76 -0
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/rdoc.rbs +7 -5
- data/stdlib/rdoc/0/store.rbs +2 -2
- data/stdlib/resolv/0/resolv.rbs +26 -69
- data/stdlib/ripper/0/ripper.rbs +25 -19
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -20
- data/stdlib/shellwords/0/shellwords.rbs +3 -3
- data/stdlib/singleton/0/singleton.rbs +3 -0
- data/stdlib/socket/0/addrinfo.rbs +9 -9
- data/stdlib/socket/0/basic_socket.rbs +3 -3
- data/stdlib/socket/0/ip_socket.rbs +10 -8
- data/stdlib/socket/0/socket.rbs +23 -10
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +11 -3
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +1209 -95
- data/stdlib/strscan/0/string_scanner.rbs +101 -80
- data/stdlib/tempfile/0/manifest.yaml +3 -0
- data/stdlib/tempfile/0/tempfile.rbs +25 -21
- data/stdlib/time/0/time.rbs +8 -6
- data/stdlib/timeout/0/timeout.rbs +58 -7
- data/stdlib/tsort/0/cyclic.rbs +4 -1
- data/stdlib/tsort/0/interfaces.rbs +8 -8
- data/stdlib/tsort/0/tsort.rbs +16 -15
- data/stdlib/uri/0/common.rbs +42 -20
- data/stdlib/uri/0/file.rbs +3 -3
- data/stdlib/uri/0/generic.rbs +21 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/ldap.rbs +2 -2
- data/stdlib/uri/0/mailto.rbs +3 -3
- data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
- data/stdlib/zlib/0/deflate.rbs +4 -3
- data/stdlib/zlib/0/gzip_reader.rbs +8 -8
- data/stdlib/zlib/0/gzip_writer.rbs +14 -12
- data/stdlib/zlib/0/inflate.rbs +1 -1
- data/stdlib/zlib/0/need_dict.rbs +1 -1
- data/wasm/README.md +60 -0
- data/wasm/rbs_wasm.c +423 -0
- metadata +131 -19
- 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
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#ifndef RBS__RBS_BUFFER_H
|
|
2
|
+
#define RBS__RBS_BUFFER_H
|
|
3
|
+
|
|
4
|
+
#include "rbs/util/rbs_allocator.h"
|
|
5
|
+
#include "rbs/string.h"
|
|
6
|
+
|
|
7
|
+
#include <stdbool.h>
|
|
8
|
+
#include <stdlib.h>
|
|
9
|
+
#include <string.h>
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The default capacity of a rbs_buffer_t.
|
|
13
|
+
* If the buffer needs to grow beyond this capacity, it will be doubled.
|
|
14
|
+
*/
|
|
15
|
+
#define RBS_BUFFER_DEFAULT_CAPACITY 128
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A rbs_buffer_t is a simple memory buffer that stores data in a contiguous block of memory.
|
|
19
|
+
*/
|
|
20
|
+
typedef struct {
|
|
21
|
+
/** The length of the buffer in bytes. */
|
|
22
|
+
size_t length;
|
|
23
|
+
|
|
24
|
+
/** The capacity of the buffer in bytes that has been allocated. */
|
|
25
|
+
size_t capacity;
|
|
26
|
+
|
|
27
|
+
/** A pointer to the start of the buffer. */
|
|
28
|
+
char *value;
|
|
29
|
+
} rbs_buffer_t;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Initialize a rbs_buffer_t with its default values.
|
|
33
|
+
*
|
|
34
|
+
* @param allocator The allocator to use.
|
|
35
|
+
* @param buffer The buffer to initialize.
|
|
36
|
+
* @returns True if the buffer was initialized successfully, false otherwise.
|
|
37
|
+
*/
|
|
38
|
+
bool rbs_buffer_init(rbs_allocator_t *, rbs_buffer_t *buffer);
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Return the value of the buffer.
|
|
42
|
+
*
|
|
43
|
+
* @param buffer The buffer to get the value of.
|
|
44
|
+
* @returns The value of the buffer.
|
|
45
|
+
*/
|
|
46
|
+
char *rbs_buffer_value(const rbs_buffer_t *buffer);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Return the length of the buffer.
|
|
50
|
+
*
|
|
51
|
+
* @param buffer The buffer to get the length of.
|
|
52
|
+
* @returns The length of the buffer.
|
|
53
|
+
*/
|
|
54
|
+
size_t rbs_buffer_length(const rbs_buffer_t *buffer);
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Append a C string to the buffer.
|
|
58
|
+
*
|
|
59
|
+
* @param allocator The allocator to use.
|
|
60
|
+
* @param buffer The buffer to append to.
|
|
61
|
+
* @param value The C string to append.
|
|
62
|
+
*/
|
|
63
|
+
void rbs_buffer_append_cstr(rbs_allocator_t *, rbs_buffer_t *buffer, const char *value);
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Append a string to the buffer.
|
|
67
|
+
*
|
|
68
|
+
* @param allocator The allocator to use.
|
|
69
|
+
* @param buffer The buffer to append to.
|
|
70
|
+
* @param value The string to append.
|
|
71
|
+
* @param length The length of the string to append.
|
|
72
|
+
*/
|
|
73
|
+
void rbs_buffer_append_string(rbs_allocator_t *, rbs_buffer_t *buffer, const char *value, size_t length);
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Convert the buffer to a rbs_string_t.
|
|
77
|
+
*
|
|
78
|
+
* @param buffer The buffer to convert.
|
|
79
|
+
* @returns The converted rbs_string_t.
|
|
80
|
+
*/
|
|
81
|
+
rbs_string_t rbs_buffer_to_string(rbs_buffer_t *buffer);
|
|
82
|
+
|
|
83
|
+
#endif
|
|
@@ -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;
|
|
@@ -143,9 +81,6 @@ typedef struct {
|
|
|
143
81
|
uint32_t capacity;
|
|
144
82
|
} rbs_constant_pool_t;
|
|
145
83
|
|
|
146
|
-
// A global constant pool for storing permenant keywords, such as the names of location children in `parser.c`.
|
|
147
|
-
extern rbs_constant_pool_t *RBS_GLOBAL_CONSTANT_POOL;
|
|
148
|
-
|
|
149
84
|
/**
|
|
150
85
|
* Initialize a new constant pool with a given capacity.
|
|
151
86
|
*
|
|
@@ -162,7 +97,7 @@ bool rbs_constant_pool_init(rbs_constant_pool_t *pool, uint32_t capacity);
|
|
|
162
97
|
* @param constant_id The id of the constant to get.
|
|
163
98
|
* @return A pointer to the constant.
|
|
164
99
|
*/
|
|
165
|
-
rbs_constant_t *
|
|
100
|
+
rbs_constant_t *rbs_constant_pool_id_to_constant(const rbs_constant_pool_t *pool, rbs_constant_id_t constant_id);
|
|
166
101
|
|
|
167
102
|
/**
|
|
168
103
|
* Find a constant in a constant pool. Returns the id of the constant, or 0 if
|
|
@@ -185,6 +120,7 @@ rbs_constant_id_t rbs_constant_pool_find(const rbs_constant_pool_t *pool, const
|
|
|
185
120
|
* @return The id of the constant.
|
|
186
121
|
*/
|
|
187
122
|
rbs_constant_id_t rbs_constant_pool_insert_shared(rbs_constant_pool_t *pool, const uint8_t *start, size_t length);
|
|
123
|
+
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
124
|
|
|
189
125
|
/**
|
|
190
126
|
* 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,24 @@
|
|
|
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
|
+
#include "rbs/util/rbs_encoding.h"
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Receives `rbs_parser_t` and `range`, which represents a string token or symbol token, and returns a string VALUE.
|
|
11
|
+
*
|
|
12
|
+
* Input token | Output string
|
|
13
|
+
* ------------+-------------
|
|
14
|
+
* "foo\\n" | foo\n
|
|
15
|
+
* 'foo' | foo
|
|
16
|
+
* `bar` | bar
|
|
17
|
+
* :"baz\\t" | baz\t
|
|
18
|
+
* :'baz' | baz
|
|
19
|
+
*
|
|
20
|
+
* @returns A new owned string that will be freed when the allocator is freed.
|
|
21
|
+
* */
|
|
22
|
+
rbs_string_t rbs_unquote_string(rbs_allocator_t *, const rbs_string_t input, const rbs_encoding_t *encoding);
|
|
23
|
+
|
|
24
|
+
#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
|
|
@@ -13,25 +13,22 @@ module RBS
|
|
|
13
13
|
@include_filename = true
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def annotate_file(path, preserve:)
|
|
17
|
-
|
|
16
|
+
def annotate_file(path, preserve: true)
|
|
17
|
+
buffer, _, decls = Parser.parse_signature(path.read())
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
rewriter = Rewriter.new(buffer)
|
|
20
|
+
annotate_decls(decls, rewriter)
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
path.open("w") do |io|
|
|
24
|
-
Writer.new(out: io).preserve!(preserve: preserve).write(decls)
|
|
25
|
-
end
|
|
22
|
+
path.write(rewriter.string)
|
|
26
23
|
end
|
|
27
24
|
|
|
28
|
-
def annotate_decls(decls, outer: [])
|
|
25
|
+
def annotate_decls(decls, rewriter, outer: [])
|
|
29
26
|
decls.each do |decl|
|
|
30
27
|
case decl
|
|
31
28
|
when AST::Declarations::Class, AST::Declarations::Module
|
|
32
|
-
annotate_class(decl, outer: outer)
|
|
29
|
+
annotate_class(decl, rewriter, outer: outer)
|
|
33
30
|
when AST::Declarations::Constant
|
|
34
|
-
annotate_constant(decl, outer: outer)
|
|
31
|
+
annotate_constant(decl, rewriter, outer: outer)
|
|
35
32
|
end
|
|
36
33
|
end
|
|
37
34
|
end
|
|
@@ -39,7 +36,9 @@ module RBS
|
|
|
39
36
|
def each_part(subjects, tester:)
|
|
40
37
|
if block_given?
|
|
41
38
|
subjects.each do |subject, docs|
|
|
42
|
-
|
|
39
|
+
comment = subject.comment
|
|
40
|
+
raise if comment.is_a?(String)
|
|
41
|
+
Formatter.each_part(comment.parse) do |doc|
|
|
43
42
|
if tester.test_path(doc.file || raise)
|
|
44
43
|
yield [doc, subject]
|
|
45
44
|
end
|
|
@@ -242,7 +241,7 @@ module RBS
|
|
|
242
241
|
end
|
|
243
242
|
end
|
|
244
243
|
|
|
245
|
-
def annotate_class(decl, outer:)
|
|
244
|
+
def annotate_class(decl, rewriter, outer:)
|
|
246
245
|
annots = annotations(decl)
|
|
247
246
|
|
|
248
247
|
full_name = resolve_name(decl.name, outer: outer)
|
|
@@ -250,7 +249,7 @@ module RBS
|
|
|
250
249
|
text = resolve_doc_source(annots.copy_annotation, tester: annots) { doc_for_class(full_name, tester: annots) }
|
|
251
250
|
end
|
|
252
251
|
|
|
253
|
-
replace_comment(decl, text)
|
|
252
|
+
replace_comment(decl, text, rewriter)
|
|
254
253
|
|
|
255
254
|
unless annots.skip_all?
|
|
256
255
|
outer_ = outer + [decl.name.to_namespace]
|
|
@@ -258,28 +257,28 @@ module RBS
|
|
|
258
257
|
decl.each_member do |member|
|
|
259
258
|
case member
|
|
260
259
|
when AST::Members::MethodDefinition
|
|
261
|
-
annotate_method(full_name, member)
|
|
260
|
+
annotate_method(full_name, member, rewriter)
|
|
262
261
|
when AST::Members::Alias
|
|
263
|
-
annotate_alias(full_name, member)
|
|
262
|
+
annotate_alias(full_name, member, rewriter)
|
|
264
263
|
when AST::Members::AttrReader, AST::Members::AttrAccessor, AST::Members::AttrWriter
|
|
265
|
-
annotate_attribute(full_name, member)
|
|
264
|
+
annotate_attribute(full_name, member, rewriter)
|
|
266
265
|
end
|
|
267
266
|
end
|
|
268
267
|
|
|
269
|
-
annotate_decls(decl.each_decl.to_a, outer: outer_)
|
|
268
|
+
annotate_decls(decl.each_decl.to_a, rewriter, outer: outer_)
|
|
270
269
|
end
|
|
271
270
|
end
|
|
272
271
|
|
|
273
|
-
def annotate_constant(const, outer:)
|
|
272
|
+
def annotate_constant(const, rewriter, outer:)
|
|
274
273
|
annots = Annotations.new([])
|
|
275
274
|
|
|
276
275
|
full_name = resolve_name(const.name, outer: outer)
|
|
277
276
|
text = doc_for_constant(full_name, tester: annots)
|
|
278
277
|
|
|
279
|
-
replace_comment(const, text)
|
|
278
|
+
replace_comment(const, text, rewriter)
|
|
280
279
|
end
|
|
281
280
|
|
|
282
|
-
def annotate_alias(typename, als)
|
|
281
|
+
def annotate_alias(typename, als, rewriter)
|
|
283
282
|
annots = annotations(als)
|
|
284
283
|
|
|
285
284
|
unless annots.skip?
|
|
@@ -293,7 +292,7 @@ module RBS
|
|
|
293
292
|
end
|
|
294
293
|
end
|
|
295
294
|
|
|
296
|
-
replace_comment(als, text)
|
|
295
|
+
replace_comment(als, text, rewriter)
|
|
297
296
|
end
|
|
298
297
|
|
|
299
298
|
def join_docs(docs, separator: "----")
|
|
@@ -309,7 +308,7 @@ module RBS
|
|
|
309
308
|
end
|
|
310
309
|
end
|
|
311
310
|
|
|
312
|
-
def annotate_method(typename, method)
|
|
311
|
+
def annotate_method(typename, method, rewriter)
|
|
313
312
|
annots = annotations(method)
|
|
314
313
|
|
|
315
314
|
unless annots.skip?
|
|
@@ -335,10 +334,10 @@ module RBS
|
|
|
335
334
|
}
|
|
336
335
|
end
|
|
337
336
|
|
|
338
|
-
replace_comment(method, text)
|
|
337
|
+
replace_comment(method, text, rewriter)
|
|
339
338
|
end
|
|
340
339
|
|
|
341
|
-
def annotate_attribute(typename, attr)
|
|
340
|
+
def annotate_attribute(typename, attr, rewriter)
|
|
342
341
|
annots = annotations(attr)
|
|
343
342
|
|
|
344
343
|
unless annots.skip?
|
|
@@ -366,18 +365,17 @@ module RBS
|
|
|
366
365
|
end
|
|
367
366
|
end
|
|
368
367
|
|
|
369
|
-
replace_comment(attr, text)
|
|
368
|
+
replace_comment(attr, text, rewriter)
|
|
370
369
|
end
|
|
371
370
|
|
|
372
|
-
def replace_comment(commented, string)
|
|
371
|
+
def replace_comment(commented, string, rewriter)
|
|
373
372
|
if string
|
|
374
373
|
if string.empty?
|
|
375
|
-
commented.
|
|
374
|
+
rewriter.delete_comment(commented.comment) if commented.comment
|
|
375
|
+
elsif commented.comment
|
|
376
|
+
rewriter.replace_comment(commented.comment, content: string)
|
|
376
377
|
else
|
|
377
|
-
commented.
|
|
378
|
-
:@comment,
|
|
379
|
-
AST::Comment.new(location: nil, string: string)
|
|
380
|
-
)
|
|
378
|
+
rewriter.add_comment(commented.location || raise, *commented.annotations.filter_map(&:location), content: string)
|
|
381
379
|
end
|
|
382
380
|
end
|
|
383
381
|
end
|