ruby-next-parser 2.8.0.7 → 3.0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
- | 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
+ }
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
- 28
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: 2.8.0.7
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-06-23 00:00:00.000000000 Z
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.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:
@@ -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