rbs 4.0.3 → 4.1.0.pre.2

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 (125) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/c-check.yml +3 -0
  3. data/.github/workflows/dependabot.yml +1 -1
  4. data/.github/workflows/jruby.yml +67 -0
  5. data/.github/workflows/milestone.yml +4 -1
  6. data/.github/workflows/ruby.yml +40 -0
  7. data/.github/workflows/rust.yml +3 -2
  8. data/.github/workflows/truffleruby.yml +54 -0
  9. data/.github/workflows/typecheck.yml +3 -0
  10. data/.github/workflows/wasm.yml +53 -0
  11. data/.github/workflows/windows.yml +3 -0
  12. data/.gitignore +7 -0
  13. data/CHANGELOG.md +0 -8
  14. data/README.md +3 -3
  15. data/Rakefile +118 -3
  16. data/Steepfile +7 -0
  17. data/config.yml +24 -0
  18. data/core/array.rbs +144 -144
  19. data/core/builtin.rbs +7 -6
  20. data/core/class.rbs +5 -3
  21. data/core/enumerable.rbs +109 -109
  22. data/core/enumerator/product.rbs +5 -5
  23. data/core/enumerator.rbs +28 -28
  24. data/core/file.rbs +24 -1018
  25. data/core/file_constants.rbs +463 -0
  26. data/core/file_stat.rbs +534 -0
  27. data/core/hash.rbs +117 -101
  28. data/core/integer.rbs +21 -58
  29. data/core/io.rbs +25 -7
  30. data/core/kernel.rbs +26 -11
  31. data/core/module.rbs +88 -74
  32. data/core/numeric.rbs +3 -0
  33. data/core/object_space/weak_key_map.rbs +7 -7
  34. data/core/range.rbs +23 -23
  35. data/core/rbs/ops.rbs +154 -0
  36. data/core/rbs/unnamed/argf.rbs +3 -3
  37. data/core/ruby_vm.rbs +40 -0
  38. data/core/set.rbs +3 -3
  39. data/core/struct.rbs +16 -16
  40. data/core/thread.rbs +6 -6
  41. data/docs/CONTRIBUTING.md +2 -1
  42. data/docs/inline.md +65 -7
  43. data/docs/rbs_by_example.md +20 -20
  44. data/docs/syntax.md +2 -2
  45. data/docs/wasm_serialization.md +80 -0
  46. data/ext/rbs_extension/ast_translation.c +1298 -956
  47. data/ext/rbs_extension/ast_translation.h +4 -0
  48. data/ext/rbs_extension/class_constants.c +2 -0
  49. data/ext/rbs_extension/class_constants.h +1 -0
  50. data/ext/rbs_extension/extconf.rb +1 -0
  51. data/ext/rbs_extension/main.c +139 -4
  52. data/include/rbs/ast.h +323 -298
  53. data/include/rbs/defines.h +13 -0
  54. data/include/rbs/lexer.h +1 -0
  55. data/include/rbs/serialize.h +39 -0
  56. data/lib/rbs/annotate/rdoc_annotator.rb +27 -31
  57. data/lib/rbs/ast/ruby/annotations.rb +42 -0
  58. data/lib/rbs/ast/ruby/comment_block.rb +6 -4
  59. data/lib/rbs/ast/ruby/declarations.rb +11 -1
  60. data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
  61. data/lib/rbs/ast/ruby/members.rb +40 -1
  62. data/lib/rbs/buffer.rb +48 -11
  63. data/lib/rbs/cli.rb +3 -5
  64. data/lib/rbs/collection/config/lockfile_generator.rb +14 -1
  65. data/lib/rbs/collection/sources/git.rb +6 -0
  66. data/lib/rbs/definition_builder/method_builder.rb +12 -6
  67. data/lib/rbs/environment.rb +10 -3
  68. data/lib/rbs/inline_parser.rb +54 -28
  69. data/lib/rbs/namespace.rb +47 -11
  70. data/lib/rbs/prototype/runtime.rb +2 -0
  71. data/lib/rbs/resolver/type_name_resolver.rb +12 -14
  72. data/lib/rbs/rewriter.rb +70 -0
  73. data/lib/rbs/test/type_check.rb +6 -1
  74. data/lib/rbs/type_name.rb +33 -13
  75. data/lib/rbs/unit_test/type_assertions.rb +9 -0
  76. data/lib/rbs/version.rb +1 -1
  77. data/lib/rbs/wasm/deserializer.rb +213 -0
  78. data/lib/rbs/wasm/location.rb +61 -0
  79. data/lib/rbs/wasm/parser.rb +137 -0
  80. data/lib/rbs/wasm/runtime.rb +217 -0
  81. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  82. data/lib/rbs.rb +14 -2
  83. data/rbs.gemspec +19 -2
  84. data/sig/annotate/rdoc_annotater.rbs +12 -9
  85. data/sig/ast/ruby/annotations.rbs +49 -0
  86. data/sig/ast/ruby/members.rbs +21 -1
  87. data/sig/buffer.rbs +19 -1
  88. data/sig/collection/config/lockfile_generator.rbs +2 -0
  89. data/sig/inline_parser.rbs +2 -0
  90. data/sig/manifest.yaml +0 -1
  91. data/sig/namespace.rbs +20 -0
  92. data/sig/parser.rbs +10 -0
  93. data/sig/resolver/type_name_resolver.rbs +2 -4
  94. data/sig/rewriter.rbs +45 -0
  95. data/sig/typename.rbs +15 -0
  96. data/sig/unit_test/type_assertions.rbs +4 -0
  97. data/sig/wasm/deserializer.rbs +66 -0
  98. data/sig/wasm/serialization_schema.rbs +13 -0
  99. data/src/ast.c +186 -162
  100. data/src/lexer.c +137 -114
  101. data/src/lexer.re +1 -0
  102. data/src/lexstate.c +6 -1
  103. data/src/parser.c +55 -5
  104. data/src/serialize.c +958 -0
  105. data/src/util/rbs_allocator.c +1 -4
  106. data/stdlib/abbrev/0/array.rbs +1 -1
  107. data/stdlib/csv/0/csv.rbs +5 -5
  108. data/stdlib/digest/0/digest.rbs +1 -1
  109. data/stdlib/etc/0/etc.rbs +18 -4
  110. data/stdlib/fileutils/0/fileutils.rbs +21 -21
  111. data/stdlib/json/0/json.rbs +6 -6
  112. data/stdlib/openssl/0/openssl.rbs +7 -7
  113. data/stdlib/resolv/0/resolv.rbs +1 -1
  114. data/stdlib/shellwords/0/shellwords.rbs +1 -1
  115. data/stdlib/stringio/0/stringio.rbs +32 -10
  116. data/stdlib/strscan/0/string_scanner.rbs +74 -55
  117. data/stdlib/tsort/0/cyclic.rbs +1 -1
  118. data/stdlib/tsort/0/interfaces.rbs +8 -8
  119. data/stdlib/tsort/0/tsort.rbs +9 -9
  120. data/stdlib/zlib/0/gzip_reader.rbs +2 -2
  121. data/wasm/README.md +59 -0
  122. data/wasm/rbs_wasm.c +411 -0
  123. metadata +23 -5
  124. data/.vscode/extensions.json +0 -5
  125. data/.vscode/settings.json +0 -19
data/src/lexer.re CHANGED
@@ -83,6 +83,7 @@ rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
83
83
  "interface" { return rbs_next_token(lexer, kINTERFACE); }
84
84
  "module" { return rbs_next_token(lexer, kMODULE); }
85
85
  "module-alias" { return rbs_next_token(lexer, kMODULEALIAS); }
86
+ "module-self" { return rbs_next_token(lexer, kMODULESELF); }
86
87
  "nil" { return rbs_next_token(lexer, kNIL); }
87
88
  "out" { return rbs_next_token(lexer, kOUT); }
88
89
  "prepend" { return rbs_next_token(lexer, kPREPEND); }
data/src/lexstate.c CHANGED
@@ -68,6 +68,7 @@ static const char *RBS_TOKENTYPE_NAMES[] = {
68
68
  "kATRBS", /* @rbs */
69
69
  "kSKIP", /* skip */
70
70
  "kRETURN", /* return */
71
+ "kMODULESELF", /* module-self */
71
72
 
72
73
  "tLIDENT", /* Identifiers starting with lower case */
73
74
  "tUIDENT", /* Identifiers starting with upper case */
@@ -133,7 +134,11 @@ bool rbs_next_char(rbs_lexer_t *lexer, unsigned int *codepoint, size_t *byte_len
133
134
 
134
135
  *byte_len = lexer->encoding->char_width((const uint8_t *) start, (ptrdiff_t) (lexer->string.end - start));
135
136
 
136
- if (*byte_len == 1) {
137
+ if (*byte_len == 0) {
138
+ // Avoid infinite loop on invalid bytes.
139
+ *byte_len = 1;
140
+ *codepoint = (unsigned int) (unsigned char) *start;
141
+ } else if (*byte_len == 1) {
137
142
  *codepoint = (unsigned int) *start;
138
143
  } else {
139
144
  *codepoint = 12523; // Dummy data for "ル" from "ルビー" (Ruby) in Unicode
data/src/parser.c CHANGED
@@ -3324,11 +3324,7 @@ bool rbs_parse_signature(rbs_parser_t *parser, rbs_signature_t **signature) {
3324
3324
  rbs_ast_directives_use_t *use_node;
3325
3325
  CHECK_PARSE(parse_use_directive(parser, &use_node));
3326
3326
 
3327
- if (use_node == NULL) {
3328
- rbs_node_list_append(dirs, NULL);
3329
- } else {
3330
- rbs_node_list_append(dirs, (rbs_node_t *) use_node);
3331
- }
3327
+ rbs_node_list_append(dirs, (rbs_node_t *) use_node);
3332
3328
  }
3333
3329
 
3334
3330
  while (parser->next_token.type != pEOF) {
@@ -4052,6 +4048,60 @@ static bool parse_inline_leading_annotation(rbs_parser_t *parser, rbs_ast_ruby_a
4052
4048
  );
4053
4049
  return true;
4054
4050
  }
4051
+ case kMODULESELF: {
4052
+ rbs_parser_advance(parser);
4053
+ rbs_range_t keyword_range = parser->current_token.range;
4054
+
4055
+ ADVANCE_ASSERT(parser, pCOLON);
4056
+ rbs_range_t colon_range = parser->current_token.range;
4057
+
4058
+ rbs_parser_advance(parser);
4059
+
4060
+ rbs_range_t name_range;
4061
+ rbs_type_name_t *type_name = NULL;
4062
+ if (!parse_type_name(parser, (TypeNameKind) (CLASS_NAME | INTERFACE_NAME), &name_range, &type_name)) {
4063
+ return false;
4064
+ }
4065
+
4066
+ rbs_node_list_t *args = rbs_node_list_new(ALLOCATOR());
4067
+ rbs_location_range open_bracket_loc = RBS_LOCATION_NULL_RANGE;
4068
+ rbs_location_range close_bracket_loc = RBS_LOCATION_NULL_RANGE;
4069
+ rbs_location_range_list_t *args_comma_locations = rbs_location_range_list_new(ALLOCATOR());
4070
+ if (parser->next_token.type == pLBRACKET) {
4071
+ rbs_parser_advance(parser);
4072
+ open_bracket_loc = RBS_RANGE_LEX2AST(parser->current_token.range);
4073
+ CHECK_PARSE(parse_type_list_with_commas(parser, pRBRACKET, args, args_comma_locations, true, false, false));
4074
+ rbs_parser_advance(parser);
4075
+ close_bracket_loc = RBS_RANGE_LEX2AST(parser->current_token.range);
4076
+ }
4077
+
4078
+ rbs_location_range comment_loc = RBS_LOCATION_NULL_RANGE;
4079
+ if (!parse_inline_comment(parser, &comment_loc)) {
4080
+ return false;
4081
+ }
4082
+
4083
+ rbs_range_t full_range = {
4084
+ .start = rbs_range.start,
4085
+ .end = parser->current_token.range.end
4086
+ };
4087
+
4088
+ rbs_location_range full_loc = RBS_RANGE_LEX2AST(full_range);
4089
+
4090
+ *annotation = (rbs_ast_ruby_annotations_t *) rbs_ast_ruby_annotations_module_self_annotation_new(
4091
+ ALLOCATOR(),
4092
+ full_loc,
4093
+ RBS_RANGE_LEX2AST(rbs_range),
4094
+ RBS_RANGE_LEX2AST(keyword_range),
4095
+ RBS_RANGE_LEX2AST(colon_range),
4096
+ type_name,
4097
+ args,
4098
+ open_bracket_loc,
4099
+ close_bracket_loc,
4100
+ args_comma_locations,
4101
+ comment_loc
4102
+ );
4103
+ return true;
4104
+ }
4055
4105
  default: {
4056
4106
  rbs_parser_set_error(parser, parser->next_token, true, "unexpected token for @rbs annotation");
4057
4107
  return false;