ruby-next-parser 2.8.0.7 → 3.0.0.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.
- checksums.yaml +4 -4
- data/lib/parser/ruby-next/AST_FORMAT.md +14 -40
- data/lib/parser/ruby-next/ast/processor.rb +4 -12
- data/lib/parser/ruby-next/builder.rb +8 -45
- data/lib/parser/ruby-next/lexer.rb +821 -811
- data/lib/parser/ruby-next/lexer.rl +9 -3
- data/lib/parser/ruby-next/meta.rb +1 -1
- data/lib/parser/ruby-next/parser_ext.rb +0 -1
- data/lib/parser/ruby-next/version.rb +1 -1
- data/lib/parser/rubynext.rb +3652 -3585
- data/lib/parser/rubynext.y +79 -28
- metadata +4 -5
- data/lib/parser/ruby-next/source/map/endless_definition.rb +0 -23
data/lib/parser/rubynext.y
CHANGED
|
@@ -46,7 +46,17 @@ preclow
|
|
|
46
46
|
|
|
47
47
|
rule
|
|
48
48
|
|
|
49
|
-
program:
|
|
49
|
+
program: {
|
|
50
|
+
@current_arg_stack.push(nil)
|
|
51
|
+
@max_numparam_stack.push
|
|
52
|
+
}
|
|
53
|
+
top_compstmt
|
|
54
|
+
{
|
|
55
|
+
result = val[1]
|
|
56
|
+
|
|
57
|
+
@current_arg_stack.pop
|
|
58
|
+
@max_numparam_stack.pop
|
|
59
|
+
}
|
|
50
60
|
|
|
51
61
|
top_compstmt: top_stmts opt_terms
|
|
52
62
|
{
|
|
@@ -206,25 +216,8 @@ rule
|
|
|
206
216
|
{
|
|
207
217
|
result = @builder.multi_assign(val[0], val[1], val[2])
|
|
208
218
|
}
|
|
209
|
-
| rassign
|
|
210
219
|
| expr
|
|
211
220
|
|
|
212
|
-
rassign: arg_value tASSOC lhs
|
|
213
|
-
{
|
|
214
|
-
result = @builder.rassign(val[0], val[1], val[2])
|
|
215
|
-
}
|
|
216
|
-
| arg_value tASSOC mlhs
|
|
217
|
-
{
|
|
218
|
-
result = @builder.multi_rassign(val[0], val[1], val[2])
|
|
219
|
-
}
|
|
220
|
-
| rassign tASSOC lhs
|
|
221
|
-
{
|
|
222
|
-
result = @builder.rassign(val[0], val[1], val[2])
|
|
223
|
-
}
|
|
224
|
-
| rassign tASSOC mlhs
|
|
225
|
-
{
|
|
226
|
-
result = @builder.multi_rassign(val[0], val[1], val[2])
|
|
227
|
-
}
|
|
228
221
|
|
|
229
222
|
command_asgn: lhs tEQL command_rhs
|
|
230
223
|
{
|
|
@@ -301,19 +294,35 @@ rule
|
|
|
301
294
|
{
|
|
302
295
|
result = @builder.not_op(val[0], nil, val[1], nil)
|
|
303
296
|
}
|
|
297
|
+
| arg tASSOC
|
|
298
|
+
{
|
|
299
|
+
@lexer.state = :expr_beg
|
|
300
|
+
@lexer.command_start = false
|
|
301
|
+
@pattern_variables.push
|
|
302
|
+
|
|
303
|
+
result = @lexer.in_kwarg
|
|
304
|
+
@lexer.in_kwarg = true
|
|
305
|
+
}
|
|
306
|
+
p_expr
|
|
307
|
+
{
|
|
308
|
+
@pattern_variables.pop
|
|
309
|
+
@lexer.in_kwarg = val[2]
|
|
310
|
+
result = @builder.match_pattern(val[0], val[1], val[3])
|
|
311
|
+
}
|
|
304
312
|
| arg kIN
|
|
305
313
|
{
|
|
306
314
|
@lexer.state = :expr_beg
|
|
307
315
|
@lexer.command_start = false
|
|
308
|
-
pattern_variables.push
|
|
316
|
+
@pattern_variables.push
|
|
309
317
|
|
|
310
318
|
result = @lexer.in_kwarg
|
|
311
319
|
@lexer.in_kwarg = true
|
|
312
320
|
}
|
|
313
321
|
p_expr
|
|
314
322
|
{
|
|
323
|
+
@pattern_variables.pop
|
|
315
324
|
@lexer.in_kwarg = val[2]
|
|
316
|
-
result = @builder.
|
|
325
|
+
result = @builder.match_pattern_p(val[0], val[1], val[3])
|
|
317
326
|
}
|
|
318
327
|
| arg =tLBRACE_ARG
|
|
319
328
|
|
|
@@ -328,7 +337,7 @@ rule
|
|
|
328
337
|
result = [ val[1], val[2] ]
|
|
329
338
|
}
|
|
330
339
|
|
|
331
|
-
def_name:
|
|
340
|
+
def_name: fname
|
|
332
341
|
{
|
|
333
342
|
@static_env.extend_static
|
|
334
343
|
@lexer.cmdarg.push(false)
|
|
@@ -864,8 +873,11 @@ rule
|
|
|
864
873
|
result = @builder.ternary(val[0], val[1],
|
|
865
874
|
val[2], val[4], val[5])
|
|
866
875
|
}
|
|
867
|
-
| defn_head
|
|
876
|
+
| defn_head f_opt_paren_args tEQL arg
|
|
868
877
|
{
|
|
878
|
+
_def_t, name_t = val[0]
|
|
879
|
+
endless_method_name(name_t)
|
|
880
|
+
|
|
869
881
|
result = @builder.def_endless_method(*val[0],
|
|
870
882
|
val[1], val[2], val[3])
|
|
871
883
|
|
|
@@ -875,8 +887,11 @@ rule
|
|
|
875
887
|
@context.pop
|
|
876
888
|
@current_arg_stack.pop
|
|
877
889
|
}
|
|
878
|
-
| defn_head
|
|
890
|
+
| defn_head f_opt_paren_args tEQL arg kRESCUE_MOD arg
|
|
879
891
|
{
|
|
892
|
+
_def_t, name_t = val[0]
|
|
893
|
+
endless_method_name(name_t)
|
|
894
|
+
|
|
880
895
|
rescue_body = @builder.rescue_body(val[4],
|
|
881
896
|
nil, nil, nil,
|
|
882
897
|
nil, val[5])
|
|
@@ -892,8 +907,11 @@ rule
|
|
|
892
907
|
@context.pop
|
|
893
908
|
@current_arg_stack.pop
|
|
894
909
|
}
|
|
895
|
-
| defs_head
|
|
910
|
+
| defs_head f_opt_paren_args tEQL arg
|
|
896
911
|
{
|
|
912
|
+
_def_t, _recv, _dot_t, name_t = val[0]
|
|
913
|
+
endless_method_name(name_t)
|
|
914
|
+
|
|
897
915
|
result = @builder.def_endless_singleton(*val[0],
|
|
898
916
|
val[1], val[2], val[3])
|
|
899
917
|
|
|
@@ -903,8 +921,11 @@ rule
|
|
|
903
921
|
@context.pop
|
|
904
922
|
@current_arg_stack.pop
|
|
905
923
|
}
|
|
906
|
-
| defs_head
|
|
924
|
+
| defs_head f_opt_paren_args tEQL arg kRESCUE_MOD arg
|
|
907
925
|
{
|
|
926
|
+
_def_t, _recv, _dot_t, name_t = val[0]
|
|
927
|
+
endless_method_name(name_t)
|
|
928
|
+
|
|
908
929
|
rescue_body = @builder.rescue_body(val[4],
|
|
909
930
|
nil, nil, nil,
|
|
910
931
|
nil, val[5])
|
|
@@ -1847,6 +1868,8 @@ opt_block_args_tail:
|
|
|
1847
1868
|
}
|
|
1848
1869
|
p_top_expr then
|
|
1849
1870
|
{
|
|
1871
|
+
@pattern_variables.pop
|
|
1872
|
+
@pattern_hash_keys.pop
|
|
1850
1873
|
@lexer.in_kwarg = val[1]
|
|
1851
1874
|
}
|
|
1852
1875
|
compstmt p_cases
|
|
@@ -2131,7 +2154,6 @@ opt_block_args_tail:
|
|
|
2131
2154
|
|
|
2132
2155
|
p_kw_label: tLABEL
|
|
2133
2156
|
{
|
|
2134
|
-
check_kwarg_name(val[0])
|
|
2135
2157
|
result = [:label, val[0]]
|
|
2136
2158
|
}
|
|
2137
2159
|
| tSTRING_BEG string_contents tLABEL_END
|
|
@@ -2616,6 +2638,12 @@ keyword_variable: kNIL
|
|
|
2616
2638
|
result = nil
|
|
2617
2639
|
}
|
|
2618
2640
|
|
|
2641
|
+
f_opt_paren_args: f_paren_args
|
|
2642
|
+
| none
|
|
2643
|
+
{
|
|
2644
|
+
result = @builder.args(nil, [], nil)
|
|
2645
|
+
}
|
|
2646
|
+
|
|
2619
2647
|
f_paren_args: tLPAREN2 f_args rparen
|
|
2620
2648
|
{
|
|
2621
2649
|
result = @builder.args(val[0], val[1], val[2])
|
|
@@ -2961,7 +2989,24 @@ keyword_variable: kNIL
|
|
|
2961
2989
|
{
|
|
2962
2990
|
result = []
|
|
2963
2991
|
}
|
|
2964
|
-
|
|
|
2992
|
+
| assoc_items trailer
|
|
2993
|
+
|
|
2994
|
+
assoc_items : assoc_item
|
|
2995
|
+
{
|
|
2996
|
+
result = [ val[0] ]
|
|
2997
|
+
}
|
|
2998
|
+
| assoc_items tCOMMA assoc_item
|
|
2999
|
+
{
|
|
3000
|
+
result = val[0] << val[2]
|
|
3001
|
+
}
|
|
3002
|
+
|
|
3003
|
+
assoc_item: assoc
|
|
3004
|
+
|
|
|
3005
|
+
tIDENTIFIER
|
|
3006
|
+
{
|
|
3007
|
+
lvar = @builder.accessible(@builder.ident(val[0]))
|
|
3008
|
+
result = @builder.ipair(lvar)
|
|
3009
|
+
}
|
|
2965
3010
|
|
|
2966
3011
|
assocs: assoc
|
|
2967
3012
|
{
|
|
@@ -3042,9 +3087,15 @@ require 'parser/ruby-next/parser_ext'
|
|
|
3042
3087
|
prepend Parser::NextExt
|
|
3043
3088
|
|
|
3044
3089
|
def version
|
|
3045
|
-
|
|
3090
|
+
30
|
|
3046
3091
|
end
|
|
3047
3092
|
|
|
3048
3093
|
def default_encoding
|
|
3049
3094
|
Encoding::UTF_8
|
|
3050
3095
|
end
|
|
3096
|
+
|
|
3097
|
+
def endless_method_name(name_t)
|
|
3098
|
+
if name_t[0].end_with?('=')
|
|
3099
|
+
diagnostic :error, :endless_setter, nil, name_t
|
|
3100
|
+
end
|
|
3101
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ruby-next-parser
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.0.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vladimir Dementyev
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-12-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: parser
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 2.7.
|
|
19
|
+
version: 2.7.2.0
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 2.7.
|
|
26
|
+
version: 2.7.2.0
|
|
27
27
|
description: "\n Parser extension to support edge and experimental Ruby syntax\n
|
|
28
28
|
\ "
|
|
29
29
|
email:
|
|
@@ -39,7 +39,6 @@ files:
|
|
|
39
39
|
- lib/parser/ruby-next/lexer.rl
|
|
40
40
|
- lib/parser/ruby-next/meta.rb
|
|
41
41
|
- lib/parser/ruby-next/parser_ext.rb
|
|
42
|
-
- lib/parser/ruby-next/source/map/endless_definition.rb
|
|
43
42
|
- lib/parser/ruby-next/version.rb
|
|
44
43
|
- lib/parser/rubynext.rb
|
|
45
44
|
- lib/parser/rubynext.y
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Parser
|
|
4
|
-
module Source
|
|
5
|
-
|
|
6
|
-
class Map::EndlessDefinition < Map
|
|
7
|
-
attr_reader :keyword
|
|
8
|
-
attr_reader :operator
|
|
9
|
-
attr_reader :name
|
|
10
|
-
attr_reader :assignment
|
|
11
|
-
|
|
12
|
-
def initialize(keyword_l, operator_l, name_l, assignment_l, body_l)
|
|
13
|
-
@keyword = keyword_l
|
|
14
|
-
@operator = operator_l
|
|
15
|
-
@name = name_l
|
|
16
|
-
@assignment = assignment_l
|
|
17
|
-
|
|
18
|
-
super(@keyword.join(body_l))
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
end
|
|
23
|
-
end
|