rbs 3.7.0.dev.1 → 3.7.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/.github/workflows/ruby.yml +1 -1
- data/.github/workflows/windows.yml +5 -3
- data/.gitignore +1 -0
- data/.rubocop.yml +6 -0
- data/CHANGELOG.md +47 -0
- data/Rakefile +23 -0
- data/config.yml +311 -0
- data/core/dir.rbs +1 -1
- data/core/kernel.rbs +2 -2
- data/core/process.rbs +1 -1
- data/core/set.rbs +1 -1
- data/docs/syntax.md +6 -4
- data/ext/rbs_extension/extconf.rb +10 -0
- data/ext/rbs_extension/parser.c +103 -110
- data/ext/rbs_extension/rbs_extension.h +1 -2
- data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
- data/include/rbs/ruby_objs.h +72 -0
- data/include/rbs.h +7 -0
- data/lib/rbs/collection/config/lockfile_generator.rb +34 -5
- data/lib/rbs/collection/config.rb +2 -2
- data/lib/rbs/environment_loader.rb +5 -0
- data/lib/rbs/prototype/rb.rb +7 -3
- data/lib/rbs/types.rb +10 -3
- data/lib/rbs/version.rb +1 -1
- data/sig/ancestor_graph.rbs +1 -1
- data/sig/collection/config/lockfile_generator.rbs +9 -1
- data/sig/definition.rbs +1 -1
- data/sig/definition_builder.rbs +1 -1
- data/sig/environment.rbs +1 -1
- data/sig/prototype/rb.rbs +1 -1
- data/sig/type_alias_dependency.rbs +2 -2
- data/sig/type_alias_regularity.rbs +1 -1
- data/sig/type_param.rbs +3 -3
- data/sig/vendorer.rbs +1 -1
- data/{ext/rbs_extension → src}/constants.c +35 -36
- data/src/ruby_objs.c +793 -0
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/csv/0/manifest.yaml +1 -0
- data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -1
- data/stdlib/json/0/json.rbs +1 -1
- data/stdlib/minitest/0/kernel.rbs +2 -2
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
- data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
- data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
- data/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/stdlib/minitest/0/minitest/mock.rbs +9 -5
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
- data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
- data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
- data/stdlib/minitest/0/minitest/spec.rbs +1 -1
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
- data/stdlib/minitest/0/minitest/test.rbs +7 -14
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit.rbs +1 -2
- data/stdlib/minitest/0/minitest.rbs +41 -892
- data/stdlib/open-uri/0/manifest.yaml +1 -0
- data/stdlib/openssl/0/manifest.yaml +1 -0
- data/stdlib/openssl/0/openssl.rbs +26 -1
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/templates/include/rbs/constants.h.erb +20 -0
- data/templates/include/rbs/ruby_objs.h.erb +10 -0
- data/templates/src/constants.c.erb +36 -0
- data/templates/src/ruby_objs.c.erb +27 -0
- data/templates/template.rb +122 -0
- metadata +19 -9
- data/ext/rbs_extension/ruby_objs.c +0 -602
- data/ext/rbs_extension/ruby_objs.h +0 -51
- data/stdlib/minitest/0/manifest.yaml +0 -2
- /data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +0 -0
data/ext/rbs_extension/parser.c
CHANGED
@@ -143,7 +143,7 @@ void parser_advance_no_gap(parserstate *state) {
|
|
143
143
|
| {(tUIDENT `::`)*} <tXIDENT>
|
144
144
|
| {<tXIDENT>}
|
145
145
|
*/
|
146
|
-
VALUE parse_type_name(parserstate *state, TypeNameKind kind, range *rg) {
|
146
|
+
static VALUE parse_type_name(parserstate *state, TypeNameKind kind, range *rg) {
|
147
147
|
VALUE absolute = Qfalse;
|
148
148
|
VALUE path = EMPTY_ARRAY;
|
149
149
|
VALUE namespace;
|
@@ -757,7 +757,7 @@ static void check_key_duplication(parserstate *state, VALUE fields, VALUE key) {
|
|
757
757
|
record_attribute ::= {} keyword_token `:` <type>
|
758
758
|
| {} literal_type `=>` <type>
|
759
759
|
*/
|
760
|
-
VALUE parse_record_attributes(parserstate *state) {
|
760
|
+
static VALUE parse_record_attributes(parserstate *state) {
|
761
761
|
VALUE fields = rb_hash_new();
|
762
762
|
|
763
763
|
if (state->next_token.type == pRBRACE) {
|
@@ -963,25 +963,25 @@ static VALUE parse_simple(parserstate *state) {
|
|
963
963
|
return type;
|
964
964
|
}
|
965
965
|
case kBOOL:
|
966
|
-
return
|
966
|
+
return rbs_bases_bool(rbs_location_current_token(state));
|
967
967
|
case kBOT:
|
968
|
-
return
|
968
|
+
return rbs_bases_bottom(rbs_location_current_token(state));
|
969
969
|
case kCLASS:
|
970
|
-
return
|
970
|
+
return rbs_bases_class(rbs_location_current_token(state));
|
971
971
|
case kINSTANCE:
|
972
|
-
return
|
972
|
+
return rbs_bases_instance(rbs_location_current_token(state));
|
973
973
|
case kNIL:
|
974
|
-
return
|
974
|
+
return rbs_bases_nil(rbs_location_current_token(state));
|
975
975
|
case kSELF:
|
976
|
-
return
|
976
|
+
return rbs_bases_self(rbs_location_current_token(state));
|
977
977
|
case kTOP:
|
978
|
-
return
|
978
|
+
return rbs_bases_top(rbs_location_current_token(state));
|
979
979
|
case kVOID:
|
980
|
-
return
|
980
|
+
return rbs_bases_void(rbs_location_current_token(state));
|
981
981
|
case kUNTYPED:
|
982
|
-
return
|
982
|
+
return rbs_bases_any(rbs_location_current_token(state));
|
983
983
|
case k__TODO__: {
|
984
|
-
VALUE type =
|
984
|
+
VALUE type = rbs_bases_any(rbs_location_current_token(state));
|
985
985
|
rb_funcall(type, rb_intern("todo!"), 0);
|
986
986
|
return type;
|
987
987
|
}
|
@@ -1123,7 +1123,7 @@ VALUE parse_type(parserstate *state) {
|
|
1123
1123
|
|
1124
1124
|
type_param ::= tUIDENT upper_bound? default_type? (module_type_params == false)
|
1125
1125
|
*/
|
1126
|
-
VALUE parse_type_params(parserstate *state, range *rg, bool module_type_params) {
|
1126
|
+
static VALUE parse_type_params(parserstate *state, range *rg, bool module_type_params) {
|
1127
1127
|
VALUE params = EMPTY_ARRAY;
|
1128
1128
|
|
1129
1129
|
bool required_param_allowed = true;
|
@@ -1219,7 +1219,12 @@ VALUE parse_type_params(parserstate *state, range *rg, bool module_type_params)
|
|
1219
1219
|
rbs_loc_add_optional_child(loc, rb_intern("upper_bound"), upper_bound_range);
|
1220
1220
|
rbs_loc_add_optional_child(loc, rb_intern("default"), default_type_range);
|
1221
1221
|
|
1222
|
-
VALUE param = rbs_ast_type_param(name, variance,
|
1222
|
+
VALUE param = rbs_ast_type_param(name, variance, upper_bound, default_type, location);
|
1223
|
+
|
1224
|
+
if (unchecked) {
|
1225
|
+
rb_funcall(param, rb_intern("unchecked!"), 0);
|
1226
|
+
}
|
1227
|
+
|
1223
1228
|
melt_array(¶ms);
|
1224
1229
|
rb_ary_push(params, param);
|
1225
1230
|
|
@@ -1290,7 +1295,7 @@ VALUE parse_method_type(parserstate *state) {
|
|
1290
1295
|
/*
|
1291
1296
|
global_decl ::= {tGIDENT} `:` <type>
|
1292
1297
|
*/
|
1293
|
-
VALUE parse_global_decl(parserstate *state) {
|
1298
|
+
static VALUE parse_global_decl(parserstate *state) {
|
1294
1299
|
range decl_range;
|
1295
1300
|
range name_range, colon_range;
|
1296
1301
|
|
@@ -1325,7 +1330,7 @@ VALUE parse_global_decl(parserstate *state) {
|
|
1325
1330
|
/*
|
1326
1331
|
const_decl ::= {const_name} `:` <type>
|
1327
1332
|
*/
|
1328
|
-
VALUE parse_const_decl(parserstate *state) {
|
1333
|
+
static VALUE parse_const_decl(parserstate *state) {
|
1329
1334
|
range decl_range;
|
1330
1335
|
range name_range, colon_range;
|
1331
1336
|
|
@@ -1359,7 +1364,7 @@ VALUE parse_const_decl(parserstate *state) {
|
|
1359
1364
|
/*
|
1360
1365
|
type_decl ::= {kTYPE} alias_name `=` <type>
|
1361
1366
|
*/
|
1362
|
-
VALUE parse_type_decl(parserstate *state, position comment_pos, VALUE annotations) {
|
1367
|
+
static VALUE parse_type_decl(parserstate *state, position comment_pos, VALUE annotations) {
|
1363
1368
|
range decl_range;
|
1364
1369
|
range keyword_range, name_range, params_range, eq_range;
|
1365
1370
|
|
@@ -1404,7 +1409,7 @@ VALUE parse_type_decl(parserstate *state, position comment_pos, VALUE annotation
|
|
1404
1409
|
/*
|
1405
1410
|
annotation ::= {<tANNOTATION>}
|
1406
1411
|
*/
|
1407
|
-
VALUE parse_annotation(parserstate *state) {
|
1412
|
+
static VALUE parse_annotation(parserstate *state) {
|
1408
1413
|
VALUE content = rb_funcall(state->buffer, rb_intern("content"), 0);
|
1409
1414
|
rb_encoding *enc = rb_enc_get(content);
|
1410
1415
|
|
@@ -1460,7 +1465,7 @@ VALUE parse_annotation(parserstate *state) {
|
|
1460
1465
|
annotations ::= {} annotation ... <annotation>
|
1461
1466
|
| {<>}
|
1462
1467
|
*/
|
1463
|
-
void parse_annotations(parserstate *state, VALUE *annotations, position *annot_pos) {
|
1468
|
+
static void parse_annotations(parserstate *state, VALUE *annotations, position *annot_pos) {
|
1464
1469
|
*annot_pos = NullPosition;
|
1465
1470
|
|
1466
1471
|
while (true) {
|
@@ -1483,7 +1488,7 @@ void parse_annotations(parserstate *state, VALUE *annotations, position *annot_p
|
|
1483
1488
|
method_name ::= {} <IDENT | keyword>
|
1484
1489
|
| {} (IDENT | keyword)~<`?`>
|
1485
1490
|
*/
|
1486
|
-
VALUE parse_method_name(parserstate *state, range *range) {
|
1491
|
+
static VALUE parse_method_name(parserstate *state, range *range) {
|
1487
1492
|
parser_advance(state);
|
1488
1493
|
|
1489
1494
|
switch (state->current_token.type)
|
@@ -1551,7 +1556,7 @@ typedef enum {
|
|
1551
1556
|
|
1552
1557
|
@param allow_selfq `true` to accept `self?` kind.
|
1553
1558
|
*/
|
1554
|
-
InstanceSingletonKind parse_instance_singleton_kind(parserstate *state, bool allow_selfq, range *rg) {
|
1559
|
+
static InstanceSingletonKind parse_instance_singleton_kind(parserstate *state, bool allow_selfq, range *rg) {
|
1555
1560
|
InstanceSingletonKind kind = INSTANCE_KIND;
|
1556
1561
|
|
1557
1562
|
if (state->next_token.type == kSELF) {
|
@@ -1594,7 +1599,7 @@ InstanceSingletonKind parse_instance_singleton_kind(parserstate *state, bool all
|
|
1594
1599
|
* @param instance_only `true` to reject singleton method definition.
|
1595
1600
|
* @param accept_overload `true` to accept overloading (...) definition.
|
1596
1601
|
* */
|
1597
|
-
VALUE parse_member_def(parserstate *state, bool instance_only, bool accept_overload, position comment_pos, VALUE annotations) {
|
1602
|
+
static VALUE parse_member_def(parserstate *state, bool instance_only, bool accept_overload, position comment_pos, VALUE annotations) {
|
1598
1603
|
range member_range;
|
1599
1604
|
range visibility_range;
|
1600
1605
|
range keyword_range;
|
@@ -1774,31 +1779,29 @@ void class_instance_name(parserstate *state, TypeNameKind kind, VALUE *name, VAL
|
|
1774
1779
|
*
|
1775
1780
|
* @param from_interface `true` when the member is in an interface.
|
1776
1781
|
* */
|
1777
|
-
VALUE parse_mixin_member(parserstate *state, bool from_interface, position comment_pos, VALUE annotations) {
|
1782
|
+
static VALUE parse_mixin_member(parserstate *state, bool from_interface, position comment_pos, VALUE annotations) {
|
1778
1783
|
range member_range;
|
1779
1784
|
range name_range;
|
1780
1785
|
range keyword_range;
|
1781
1786
|
range args_range = NULL_RANGE;
|
1782
1787
|
bool reset_typevar_scope;
|
1788
|
+
enum TokenType type;
|
1783
1789
|
|
1784
1790
|
member_range.start = state->current_token.range.start;
|
1785
1791
|
comment_pos = nonnull_pos_or(comment_pos, member_range.start);
|
1786
1792
|
|
1793
|
+
type = state->current_token.type;
|
1787
1794
|
keyword_range = state->current_token.range;
|
1788
1795
|
|
1789
|
-
|
1790
|
-
switch (state->current_token.type)
|
1796
|
+
switch (type)
|
1791
1797
|
{
|
1792
1798
|
case kINCLUDE:
|
1793
|
-
klass = RBS_AST_Members_Include;
|
1794
1799
|
reset_typevar_scope = false;
|
1795
1800
|
break;
|
1796
1801
|
case kEXTEND:
|
1797
|
-
klass = RBS_AST_Members_Extend;
|
1798
1802
|
reset_typevar_scope = true;
|
1799
1803
|
break;
|
1800
1804
|
case kPREPEND:
|
1801
|
-
klass = RBS_AST_Members_Prepend;
|
1802
1805
|
reset_typevar_scope = false;
|
1803
1806
|
break;
|
1804
1807
|
default:
|
@@ -1836,14 +1839,18 @@ VALUE parse_mixin_member(parserstate *state, bool from_interface, position comme
|
|
1836
1839
|
rbs_loc_add_required_child(loc, rb_intern("keyword"), keyword_range);
|
1837
1840
|
rbs_loc_add_optional_child(loc, rb_intern("args"), args_range);
|
1838
1841
|
|
1839
|
-
|
1840
|
-
|
1841
|
-
|
1842
|
-
|
1843
|
-
annotations,
|
1844
|
-
|
1845
|
-
|
1846
|
-
|
1842
|
+
VALUE comment = get_comment(state, comment_pos.line);
|
1843
|
+
switch (type)
|
1844
|
+
{
|
1845
|
+
case kINCLUDE:
|
1846
|
+
return rbs_ast_members_include(name, args, annotations, location, comment);
|
1847
|
+
case kEXTEND:
|
1848
|
+
return rbs_ast_members_extend(name, args, annotations, location, comment);
|
1849
|
+
case kPREPEND:
|
1850
|
+
return rbs_ast_members_prepend(name, args, annotations, location, comment);
|
1851
|
+
default:
|
1852
|
+
rbs_abort();
|
1853
|
+
}
|
1847
1854
|
}
|
1848
1855
|
|
1849
1856
|
/**
|
@@ -1854,7 +1861,7 @@ VALUE parse_mixin_member(parserstate *state, bool from_interface, position comme
|
|
1854
1861
|
*
|
1855
1862
|
* @param[in] instance_only `true` to reject `self.` alias.
|
1856
1863
|
* */
|
1857
|
-
VALUE parse_alias_member(parserstate *state, bool instance_only, position comment_pos, VALUE annotations) {
|
1864
|
+
static VALUE parse_alias_member(parserstate *state, bool instance_only, position comment_pos, VALUE annotations) {
|
1858
1865
|
range member_range;
|
1859
1866
|
range keyword_range, new_name_range, old_name_range;
|
1860
1867
|
range new_kind_range, old_kind_range;
|
@@ -1917,10 +1924,11 @@ VALUE parse_alias_member(parserstate *state, bool instance_only, position commen
|
|
1917
1924
|
| {kSELF} `.` tAIDENT `:` <type>
|
1918
1925
|
| {tA2IDENT} `:` <type>
|
1919
1926
|
*/
|
1920
|
-
VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE annotations) {
|
1927
|
+
static VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE annotations) {
|
1921
1928
|
range member_range;
|
1922
1929
|
range name_range, colon_range;
|
1923
1930
|
range kind_range = NULL_RANGE;
|
1931
|
+
rbs_loc *loc;
|
1924
1932
|
|
1925
1933
|
if (rb_array_len(annotations) > 0) {
|
1926
1934
|
raise_syntax_error(
|
@@ -1934,7 +1942,6 @@ VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE anno
|
|
1934
1942
|
comment_pos = nonnull_pos_or(comment_pos, member_range.start);
|
1935
1943
|
VALUE comment = get_comment(state, comment_pos.line);
|
1936
1944
|
|
1937
|
-
VALUE klass;
|
1938
1945
|
VALUE location;
|
1939
1946
|
VALUE name;
|
1940
1947
|
VALUE type;
|
@@ -1942,8 +1949,6 @@ VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE anno
|
|
1942
1949
|
switch (state->current_token.type)
|
1943
1950
|
{
|
1944
1951
|
case tAIDENT:
|
1945
|
-
klass = RBS_AST_Members_InstanceVariable;
|
1946
|
-
|
1947
1952
|
name_range = state->current_token.range;
|
1948
1953
|
name = ID2SYM(INTERN_TOKEN(state, state->current_token));
|
1949
1954
|
|
@@ -1953,11 +1958,16 @@ VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE anno
|
|
1953
1958
|
type = parse_type(state);
|
1954
1959
|
member_range.end = state->current_token.range.end;
|
1955
1960
|
|
1956
|
-
|
1961
|
+
location = rbs_new_location(state->buffer, member_range);
|
1962
|
+
loc = rbs_check_location(location);
|
1963
|
+
rbs_loc_alloc_children(loc, 3);
|
1964
|
+
rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
|
1965
|
+
rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
|
1966
|
+
rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
|
1957
1967
|
|
1958
|
-
|
1959
|
-
klass = RBS_AST_Members_ClassVariable;
|
1968
|
+
return rbs_ast_members_instance_variable(name, type, location, comment);
|
1960
1969
|
|
1970
|
+
case tA2IDENT:
|
1961
1971
|
name_range = state->current_token.range;
|
1962
1972
|
name = ID2SYM(INTERN_TOKEN(state, state->current_token));
|
1963
1973
|
|
@@ -1969,11 +1979,16 @@ VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE anno
|
|
1969
1979
|
parser_pop_typevar_table(state);
|
1970
1980
|
member_range.end = state->current_token.range.end;
|
1971
1981
|
|
1972
|
-
|
1982
|
+
location = rbs_new_location(state->buffer, member_range);
|
1983
|
+
loc = rbs_check_location(location);
|
1984
|
+
rbs_loc_alloc_children(loc, 3);
|
1985
|
+
rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
|
1986
|
+
rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
|
1987
|
+
rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
|
1973
1988
|
|
1974
|
-
|
1975
|
-
klass = RBS_AST_Members_ClassInstanceVariable;
|
1989
|
+
return rbs_ast_members_class_variable(name, type, location, comment);
|
1976
1990
|
|
1991
|
+
case kSELF:
|
1977
1992
|
kind_range.start = state->current_token.range.start;
|
1978
1993
|
kind_range.end = state->next_token.range.end;
|
1979
1994
|
|
@@ -1991,27 +2006,25 @@ VALUE parse_variable_member(parserstate *state, position comment_pos, VALUE anno
|
|
1991
2006
|
parser_pop_typevar_table(state);
|
1992
2007
|
member_range.end = state->current_token.range.end;
|
1993
2008
|
|
1994
|
-
|
2009
|
+
location = rbs_new_location(state->buffer, member_range);
|
2010
|
+
loc = rbs_check_location(location);
|
2011
|
+
rbs_loc_alloc_children(loc, 3);
|
2012
|
+
rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
|
2013
|
+
rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
|
2014
|
+
rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
|
2015
|
+
|
2016
|
+
return rbs_ast_members_class_instance_variable(name, type, location, comment);
|
1995
2017
|
|
1996
2018
|
default:
|
1997
2019
|
rbs_abort();
|
1998
2020
|
}
|
1999
|
-
|
2000
|
-
location = rbs_new_location(state->buffer, member_range);
|
2001
|
-
rbs_loc *loc = rbs_check_location(location);
|
2002
|
-
rbs_loc_alloc_children(loc, 3);
|
2003
|
-
rbs_loc_add_required_child(loc, rb_intern("name"), name_range);
|
2004
|
-
rbs_loc_add_required_child(loc, rb_intern("colon"), colon_range);
|
2005
|
-
rbs_loc_add_optional_child(loc, rb_intern("kind"), kind_range);
|
2006
|
-
|
2007
|
-
return rbs_ast_members_variable(klass, name, type, location, comment);
|
2008
2021
|
}
|
2009
2022
|
|
2010
2023
|
/*
|
2011
2024
|
visibility_member ::= {<`public`>}
|
2012
2025
|
| {<`private`>}
|
2013
2026
|
*/
|
2014
|
-
VALUE parse_visibility_member(parserstate *state, VALUE annotations) {
|
2027
|
+
static VALUE parse_visibility_member(parserstate *state, VALUE annotations) {
|
2015
2028
|
if (rb_array_len(annotations) > 0) {
|
2016
2029
|
raise_syntax_error(
|
2017
2030
|
state,
|
@@ -2020,24 +2033,17 @@ VALUE parse_visibility_member(parserstate *state, VALUE annotations) {
|
|
2020
2033
|
);
|
2021
2034
|
}
|
2022
2035
|
|
2023
|
-
VALUE
|
2036
|
+
VALUE location = rbs_new_location(state->buffer, state->current_token.range);
|
2024
2037
|
|
2025
2038
|
switch (state->current_token.type)
|
2026
2039
|
{
|
2027
2040
|
case kPUBLIC:
|
2028
|
-
|
2029
|
-
break;
|
2041
|
+
return rbs_ast_members_public(location);
|
2030
2042
|
case kPRIVATE:
|
2031
|
-
|
2032
|
-
break;
|
2043
|
+
return rbs_ast_members_private(location);
|
2033
2044
|
default:
|
2034
2045
|
rbs_abort();
|
2035
2046
|
}
|
2036
|
-
|
2037
|
-
return rbs_ast_members_visibility(
|
2038
|
-
klass,
|
2039
|
-
rbs_new_location(state->buffer, state->current_token.range)
|
2040
|
-
);
|
2041
2047
|
}
|
2042
2048
|
|
2043
2049
|
/*
|
@@ -2054,13 +2060,12 @@ VALUE parse_visibility_member(parserstate *state, VALUE annotations) {
|
|
2054
2060
|
| `(` tAIDENT `)` # Ivar name
|
2055
2061
|
| `(` `)` # No variable
|
2056
2062
|
*/
|
2057
|
-
VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE annotations) {
|
2063
|
+
static VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE annotations) {
|
2058
2064
|
range member_range;
|
2059
2065
|
range keyword_range, name_range, colon_range;
|
2060
2066
|
range kind_range = NULL_RANGE, ivar_range = NULL_RANGE, ivar_name_range = NULL_RANGE, visibility_range = NULL_RANGE;
|
2061
2067
|
|
2062
2068
|
InstanceSingletonKind is_kind;
|
2063
|
-
VALUE klass;
|
2064
2069
|
VALUE kind;
|
2065
2070
|
VALUE attr_name;
|
2066
2071
|
VALUE ivar_name;
|
@@ -2069,6 +2074,7 @@ VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE ann
|
|
2069
2074
|
VALUE location;
|
2070
2075
|
VALUE visibility;
|
2071
2076
|
rbs_loc *loc;
|
2077
|
+
enum TokenType attr_type;
|
2072
2078
|
|
2073
2079
|
member_range.start = state->current_token.range.start;
|
2074
2080
|
comment_pos = nonnull_pos_or(comment_pos, member_range.start);
|
@@ -2092,21 +2098,8 @@ VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE ann
|
|
2092
2098
|
break;
|
2093
2099
|
}
|
2094
2100
|
|
2101
|
+
attr_type = state->current_token.type;
|
2095
2102
|
keyword_range = state->current_token.range;
|
2096
|
-
switch (state->current_token.type)
|
2097
|
-
{
|
2098
|
-
case kATTRREADER:
|
2099
|
-
klass = RBS_AST_Members_AttrReader;
|
2100
|
-
break;
|
2101
|
-
case kATTRWRITER:
|
2102
|
-
klass = RBS_AST_Members_AttrWriter;
|
2103
|
-
break;
|
2104
|
-
case kATTRACCESSOR:
|
2105
|
-
klass = RBS_AST_Members_AttrAccessor;
|
2106
|
-
break;
|
2107
|
-
default:
|
2108
|
-
rbs_abort();
|
2109
|
-
}
|
2110
2103
|
|
2111
2104
|
is_kind = parse_instance_singleton_kind(state, false, &kind_range);
|
2112
2105
|
if (is_kind == INSTANCE_KIND) {
|
@@ -2153,17 +2146,17 @@ VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE ann
|
|
2153
2146
|
rbs_loc_add_optional_child(loc, rb_intern("ivar_name"), ivar_name_range);
|
2154
2147
|
rbs_loc_add_optional_child(loc, rb_intern("visibility"), visibility_range);
|
2155
2148
|
|
2156
|
-
|
2157
|
-
|
2158
|
-
|
2159
|
-
type,
|
2160
|
-
|
2161
|
-
kind,
|
2162
|
-
|
2163
|
-
location,
|
2164
|
-
|
2165
|
-
|
2166
|
-
|
2149
|
+
switch (attr_type)
|
2150
|
+
{
|
2151
|
+
case kATTRREADER:
|
2152
|
+
return rbs_ast_members_attr_reader(attr_name, type, ivar_name, kind, annotations, location, comment, visibility);
|
2153
|
+
case kATTRWRITER:
|
2154
|
+
return rbs_ast_members_attr_writer(attr_name, type, ivar_name, kind, annotations, location, comment, visibility);
|
2155
|
+
case kATTRACCESSOR:
|
2156
|
+
return rbs_ast_members_attr_accessor(attr_name, type, ivar_name, kind, annotations, location, comment, visibility);
|
2157
|
+
default:
|
2158
|
+
rbs_abort();
|
2159
|
+
}
|
2167
2160
|
}
|
2168
2161
|
|
2169
2162
|
/*
|
@@ -2173,7 +2166,7 @@ VALUE parse_attribute_member(parserstate *state, position comment_pos, VALUE ann
|
|
2173
2166
|
| mixin_member (interface only)
|
2174
2167
|
| alias_member (instance only)
|
2175
2168
|
*/
|
2176
|
-
VALUE parse_interface_members(parserstate *state) {
|
2169
|
+
static VALUE parse_interface_members(parserstate *state) {
|
2177
2170
|
VALUE members = EMPTY_ARRAY;
|
2178
2171
|
|
2179
2172
|
while (state->next_token.type != kEND) {
|
@@ -2218,7 +2211,7 @@ VALUE parse_interface_members(parserstate *state) {
|
|
2218
2211
|
/*
|
2219
2212
|
interface_decl ::= {`interface`} interface_name module_type_params interface_members <kEND>
|
2220
2213
|
*/
|
2221
|
-
VALUE parse_interface_decl(parserstate *state, position comment_pos, VALUE annotations) {
|
2214
|
+
static VALUE parse_interface_decl(parserstate *state, position comment_pos, VALUE annotations) {
|
2222
2215
|
range member_range;
|
2223
2216
|
range name_range, keyword_range, end_range;
|
2224
2217
|
range type_params_range = NULL_RANGE;
|
@@ -2265,7 +2258,7 @@ VALUE parse_interface_decl(parserstate *state, position comment_pos, VALUE annot
|
|
2265
2258
|
module_self_type ::= <module_name>
|
2266
2259
|
| module_name `[` type_list <`]`>
|
2267
2260
|
*/
|
2268
|
-
void parse_module_self_types(parserstate *state, VALUE *array) {
|
2261
|
+
static void parse_module_self_types(parserstate *state, VALUE *array) {
|
2269
2262
|
while (true) {
|
2270
2263
|
range self_range;
|
2271
2264
|
range name_range;
|
@@ -2305,7 +2298,7 @@ void parse_module_self_types(parserstate *state, VALUE *array) {
|
|
2305
2298
|
}
|
2306
2299
|
}
|
2307
2300
|
|
2308
|
-
VALUE parse_nested_decl(parserstate *state, const char *nested_in, position annot_pos, VALUE annotations);
|
2301
|
+
static VALUE parse_nested_decl(parserstate *state, const char *nested_in, position annot_pos, VALUE annotations);
|
2309
2302
|
|
2310
2303
|
/*
|
2311
2304
|
module_members ::= {} ...<module_member> kEND
|
@@ -2318,7 +2311,7 @@ VALUE parse_nested_decl(parserstate *state, const char *nested_in, position anno
|
|
2318
2311
|
| `public`
|
2319
2312
|
| `private`
|
2320
2313
|
*/
|
2321
|
-
VALUE parse_module_members(parserstate *state) {
|
2314
|
+
static VALUE parse_module_members(parserstate *state) {
|
2322
2315
|
VALUE members = EMPTY_ARRAY;
|
2323
2316
|
|
2324
2317
|
while (state->next_token.type != kEND) {
|
@@ -2395,7 +2388,7 @@ VALUE parse_module_members(parserstate *state) {
|
|
2395
2388
|
module_decl ::= {module_name} module_type_params module_members <kEND>
|
2396
2389
|
| {module_name} module_name module_type_params `:` module_self_types module_members <kEND>
|
2397
2390
|
*/
|
2398
|
-
VALUE parse_module_decl0(parserstate *state, range keyword_range, VALUE module_name, range name_range, VALUE comment, VALUE annotations) {
|
2391
|
+
static VALUE parse_module_decl0(parserstate *state, range keyword_range, VALUE module_name, range name_range, VALUE comment, VALUE annotations) {
|
2399
2392
|
range decl_range;
|
2400
2393
|
range end_range;
|
2401
2394
|
range type_params_range;
|
@@ -2454,7 +2447,7 @@ VALUE parse_module_decl0(parserstate *state, range keyword_range, VALUE module_n
|
|
2454
2447
|
| {`module`} module_name module_decl0 <kEND>
|
2455
2448
|
|
2456
2449
|
*/
|
2457
|
-
VALUE parse_module_decl(parserstate *state, position comment_pos, VALUE annotations) {
|
2450
|
+
static VALUE parse_module_decl(parserstate *state, position comment_pos, VALUE annotations) {
|
2458
2451
|
range keyword_range = state->current_token.range;
|
2459
2452
|
range module_name_range;
|
2460
2453
|
|
@@ -2494,7 +2487,7 @@ VALUE parse_module_decl(parserstate *state, position comment_pos, VALUE annotati
|
|
2494
2487
|
class_decl_super ::= {} `<` <class_instance_name>
|
2495
2488
|
| {<>}
|
2496
2489
|
*/
|
2497
|
-
VALUE parse_class_decl_super(parserstate *state, range *lt_range) {
|
2490
|
+
static VALUE parse_class_decl_super(parserstate *state, range *lt_range) {
|
2498
2491
|
if (parser_advance_if(state, pLT)) {
|
2499
2492
|
range super_range;
|
2500
2493
|
range name_range;
|
@@ -2529,7 +2522,7 @@ VALUE parse_class_decl_super(parserstate *state, range *lt_range) {
|
|
2529
2522
|
/*
|
2530
2523
|
class_decl ::= {class_name} type_params class_decl_super class_members <`end`>
|
2531
2524
|
*/
|
2532
|
-
VALUE parse_class_decl0(parserstate *state, range keyword_range, VALUE name, range name_range, VALUE comment, VALUE annotations) {
|
2525
|
+
static VALUE parse_class_decl0(parserstate *state, range keyword_range, VALUE name, range name_range, VALUE comment, VALUE annotations) {
|
2533
2526
|
range decl_range;
|
2534
2527
|
range end_range;
|
2535
2528
|
range type_params_range;
|
@@ -2580,7 +2573,7 @@ VALUE parse_class_decl0(parserstate *state, range keyword_range, VALUE name, ran
|
|
2580
2573
|
class_decl ::= {`class`} class_name `=` <class_name>
|
2581
2574
|
| {`class`} class_name <class_decl0>
|
2582
2575
|
*/
|
2583
|
-
VALUE parse_class_decl(parserstate *state, position comment_pos, VALUE annotations) {
|
2576
|
+
static VALUE parse_class_decl(parserstate *state, position comment_pos, VALUE annotations) {
|
2584
2577
|
range keyword_range = state->current_token.range;
|
2585
2578
|
range class_name_range;
|
2586
2579
|
|
@@ -2623,7 +2616,7 @@ VALUE parse_class_decl(parserstate *state, position comment_pos, VALUE annotatio
|
|
2623
2616
|
| {<module_decl>}
|
2624
2617
|
| {<class_decl>}
|
2625
2618
|
*/
|
2626
|
-
VALUE parse_nested_decl(parserstate *state, const char *nested_in, position annot_pos, VALUE annotations) {
|
2619
|
+
static VALUE parse_nested_decl(parserstate *state, const char *nested_in, position annot_pos, VALUE annotations) {
|
2627
2620
|
VALUE decl;
|
2628
2621
|
|
2629
2622
|
parser_push_typevar_table(state, true);
|
@@ -2661,7 +2654,7 @@ VALUE parse_nested_decl(parserstate *state, const char *nested_in, position anno
|
|
2661
2654
|
return decl;
|
2662
2655
|
}
|
2663
2656
|
|
2664
|
-
VALUE parse_decl(parserstate *state) {
|
2657
|
+
static VALUE parse_decl(parserstate *state) {
|
2665
2658
|
VALUE annotations = EMPTY_ARRAY;
|
2666
2659
|
position annot_pos = NullPosition;
|
2667
2660
|
|
@@ -2695,7 +2688,7 @@ VALUE parse_decl(parserstate *state) {
|
|
2695
2688
|
namespace ::= {} (`::`)? (`tUIDENT` `::`)* `tUIDENT` <`::`>
|
2696
2689
|
| {} <> (empty -- returns empty namespace)
|
2697
2690
|
*/
|
2698
|
-
VALUE parse_namespace(parserstate *state, range *rg) {
|
2691
|
+
static VALUE parse_namespace(parserstate *state, range *rg) {
|
2699
2692
|
bool is_absolute = false;
|
2700
2693
|
|
2701
2694
|
if (state->next_token.type == pCOLON2) {
|
@@ -2733,7 +2726,7 @@ VALUE parse_namespace(parserstate *state, range *rg) {
|
|
2733
2726
|
| {} namespace tUIDENT `as` <tUIDENT>
|
2734
2727
|
| {} namespace <tSTAR>
|
2735
2728
|
*/
|
2736
|
-
void parse_use_clauses(parserstate *state, VALUE clauses) {
|
2729
|
+
static void parse_use_clauses(parserstate *state, VALUE clauses) {
|
2737
2730
|
while (true) {
|
2738
2731
|
range namespace_range = NULL_RANGE;
|
2739
2732
|
VALUE namespace = parse_namespace(state, &namespace_range);
|
@@ -2826,7 +2819,7 @@ void parse_use_clauses(parserstate *state, VALUE clauses) {
|
|
2826
2819
|
/*
|
2827
2820
|
use_directive ::= {} `use` <clauses>
|
2828
2821
|
*/
|
2829
|
-
VALUE parse_use_directive(parserstate *state) {
|
2822
|
+
static VALUE parse_use_directive(parserstate *state) {
|
2830
2823
|
if (state->next_token.type == kUSE) {
|
2831
2824
|
parser_advance(state);
|
2832
2825
|
|
@@ -4,10 +4,9 @@
|
|
4
4
|
#include "ruby/re.h"
|
5
5
|
#include "ruby/encoding.h"
|
6
6
|
|
7
|
+
#include "rbs.h"
|
7
8
|
#include "lexer.h"
|
8
9
|
#include "parser.h"
|
9
|
-
#include "constants.h"
|
10
|
-
#include "ruby_objs.h"
|
11
10
|
|
12
11
|
/**
|
13
12
|
* Receives `parserstate` and `range`, which represents a string token or symbol token, and returns a string VALUE.
|
@@ -1,31 +1,38 @@
|
|
1
|
+
/*----------------------------------------------------------------------------*/
|
2
|
+
/* This file is generated by the templates/template.rb script and should not */
|
3
|
+
/* be modified manually. */
|
4
|
+
/* To change the template see */
|
5
|
+
/* templates/include/rbs/constants.h.erb */
|
6
|
+
/*----------------------------------------------------------------------------*/
|
7
|
+
|
1
8
|
#ifndef RBS__CONSTANTS_H
|
2
9
|
#define RBS__CONSTANTS_H
|
3
10
|
|
4
11
|
extern VALUE RBS;
|
5
12
|
|
6
13
|
extern VALUE RBS_AST;
|
14
|
+
extern VALUE RBS_AST_Declarations;
|
15
|
+
extern VALUE RBS_AST_Directives;
|
16
|
+
extern VALUE RBS_AST_Members;
|
17
|
+
extern VALUE RBS_Types;
|
18
|
+
extern VALUE RBS_Types_Bases;
|
19
|
+
extern VALUE RBS_ParsingError;
|
20
|
+
|
7
21
|
extern VALUE RBS_AST_Annotation;
|
8
22
|
extern VALUE RBS_AST_Comment;
|
9
|
-
extern VALUE RBS_AST_TypeParam;
|
10
|
-
|
11
|
-
extern VALUE RBS_AST_Declarations;
|
12
|
-
extern VALUE RBS_AST_Declarations_TypeAlias;
|
13
|
-
extern VALUE RBS_AST_Declarations_Class_Super;
|
14
23
|
extern VALUE RBS_AST_Declarations_Class;
|
24
|
+
extern VALUE RBS_AST_Declarations_Class_Super;
|
25
|
+
extern VALUE RBS_AST_Declarations_ClassAlias;
|
15
26
|
extern VALUE RBS_AST_Declarations_Constant;
|
16
27
|
extern VALUE RBS_AST_Declarations_Global;
|
17
28
|
extern VALUE RBS_AST_Declarations_Interface;
|
18
|
-
extern VALUE RBS_AST_Declarations_Module_Self;
|
19
29
|
extern VALUE RBS_AST_Declarations_Module;
|
30
|
+
extern VALUE RBS_AST_Declarations_Module_Self;
|
20
31
|
extern VALUE RBS_AST_Declarations_ModuleAlias;
|
21
|
-
extern VALUE
|
22
|
-
|
23
|
-
extern VALUE RBS_AST_Directives;
|
32
|
+
extern VALUE RBS_AST_Declarations_TypeAlias;
|
24
33
|
extern VALUE RBS_AST_Directives_Use;
|
25
34
|
extern VALUE RBS_AST_Directives_Use_SingleClause;
|
26
35
|
extern VALUE RBS_AST_Directives_Use_WildcardClause;
|
27
|
-
|
28
|
-
extern VALUE RBS_AST_Members;
|
29
36
|
extern VALUE RBS_AST_Members_Alias;
|
30
37
|
extern VALUE RBS_AST_Members_AttrAccessor;
|
31
38
|
extern VALUE RBS_AST_Members_AttrReader;
|
@@ -40,16 +47,11 @@ extern VALUE RBS_AST_Members_MethodDefinition_Overload;
|
|
40
47
|
extern VALUE RBS_AST_Members_Prepend;
|
41
48
|
extern VALUE RBS_AST_Members_Private;
|
42
49
|
extern VALUE RBS_AST_Members_Public;
|
43
|
-
|
50
|
+
extern VALUE RBS_AST_TypeParam;
|
44
51
|
extern VALUE RBS_MethodType;
|
45
52
|
extern VALUE RBS_Namespace;
|
46
|
-
|
47
|
-
extern VALUE RBS_ParsingError;
|
48
53
|
extern VALUE RBS_TypeName;
|
49
|
-
|
50
|
-
extern VALUE RBS_Types;
|
51
54
|
extern VALUE RBS_Types_Alias;
|
52
|
-
extern VALUE RBS_Types_Bases;
|
53
55
|
extern VALUE RBS_Types_Bases_Any;
|
54
56
|
extern VALUE RBS_Types_Bases_Bool;
|
55
57
|
extern VALUE RBS_Types_Bases_Bottom;
|
@@ -62,9 +64,8 @@ extern VALUE RBS_Types_Bases_Void;
|
|
62
64
|
extern VALUE RBS_Types_Block;
|
63
65
|
extern VALUE RBS_Types_ClassInstance;
|
64
66
|
extern VALUE RBS_Types_ClassSingleton;
|
65
|
-
extern VALUE RBS_Types_Function_Param;
|
66
67
|
extern VALUE RBS_Types_Function;
|
67
|
-
extern VALUE
|
68
|
+
extern VALUE RBS_Types_Function_Param;
|
68
69
|
extern VALUE RBS_Types_Interface;
|
69
70
|
extern VALUE RBS_Types_Intersection;
|
70
71
|
extern VALUE RBS_Types_Literal;
|
@@ -73,6 +74,7 @@ extern VALUE RBS_Types_Proc;
|
|
73
74
|
extern VALUE RBS_Types_Record;
|
74
75
|
extern VALUE RBS_Types_Tuple;
|
75
76
|
extern VALUE RBS_Types_Union;
|
77
|
+
extern VALUE RBS_Types_UntypedFunction;
|
76
78
|
extern VALUE RBS_Types_Variable;
|
77
79
|
|
78
80
|
void rbs__init_constants();
|