ruby-next-parser 2.8.0.8 → 3.0.0.3

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.
@@ -46,7 +46,17 @@ preclow
46
46
 
47
47
  rule
48
48
 
49
- program: top_compstmt
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.in_match(val[0], val[1], val[3])
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: fname
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 f_paren_args tEQL arg
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 f_paren_args tEQL arg kRESCUE_MOD arg
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 f_paren_args tEQL arg
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 f_paren_args tEQL arg kRESCUE_MOD arg
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
@@ -2615,6 +2638,12 @@ keyword_variable: kNIL
2615
2638
  result = nil
2616
2639
  }
2617
2640
 
2641
+ f_opt_paren_args: f_paren_args
2642
+ | none
2643
+ {
2644
+ result = @builder.args(nil, [], nil)
2645
+ }
2646
+
2618
2647
  f_paren_args: tLPAREN2 f_args rparen
2619
2648
  {
2620
2649
  result = @builder.args(val[0], val[1], val[2])
@@ -2960,7 +2989,24 @@ keyword_variable: kNIL
2960
2989
  {
2961
2990
  result = []
2962
2991
  }
2963
- | assocs trailer
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
+ }
2964
3010
 
2965
3011
  assocs: assoc
2966
3012
  {
@@ -2979,6 +3025,11 @@ keyword_variable: kNIL
2979
3025
  {
2980
3026
  result = @builder.pair_keyword(val[0], val[1])
2981
3027
  }
3028
+ | tLABEL
3029
+ {
3030
+ lvar = @builder.accessible(@builder.ident(val[0]))
3031
+ result = @builder.ipair_keyword(lvar)
3032
+ }
2982
3033
  | tSTRING_BEG string_contents tLABEL_END arg_value
2983
3034
  {
2984
3035
  result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
@@ -3041,9 +3092,15 @@ require 'parser/ruby-next/parser_ext'
3041
3092
  prepend Parser::NextExt
3042
3093
 
3043
3094
  def version
3044
- 28
3095
+ 30
3045
3096
  end
3046
3097
 
3047
3098
  def default_encoding
3048
3099
  Encoding::UTF_8
3049
3100
  end
3101
+
3102
+ def endless_method_name(name_t)
3103
+ if name_t[0].end_with?('=')
3104
+ diagnostic :error, :endless_setter, nil, name_t
3105
+ end
3106
+ 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: 2.8.0.8
4
+ version: 3.0.0.3
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-07-29 00:00:00.000000000 Z
11
+ date: 2020-12-24 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.1.4
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.1.4
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: