parser 3.2.2.4 → 3.3.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8565383a05692fe05c5f0962a0cb6c4594ad1eaab98f8e1c8b1053ddfa665858
4
- data.tar.gz: 280636e65eab161acc6369cdf992faa4f81a6496ebbbad794a96ee60ea3e4884
3
+ metadata.gz: 780dd5ff7826fc0f5732ce77431124b80780db4aba31bb969778f856f3f3f856
4
+ data.tar.gz: 597eb758eb6f50230e1541bd30b317b43ef6efa060d1ae276f556e90f23ac50e
5
5
  SHA512:
6
- metadata.gz: 8721d3c59c29a9bcb9562b6f0bad1ca119f854873fb3b6f5e550553a6d2fa471afb2d3e1c6c5b1323d5121b36f4070ed0a3bca24866b3dede1682658bbce934f
7
- data.tar.gz: e312e821428e6c15ec871971aabee38cd7c238adfc855ff1a4b70edb31f529e359162c1961141d2ce3fe0d5f6aee3fce009c6a479aaa3909920993af58d3c3f2
6
+ metadata.gz: 0c3ce1ff689c04a1bbdc85b96bca0e14d5a7db8f6226436bc7782753827d3db872d311d34ab53a25649e36d7ef9f41c8c88e739a4b34a0caa1ca8a2e703801cb
7
+ data.tar.gz: 489be4885d7f1c3d011898b9790140b6aa4a1cca356dfb2a7f488d73fc3050ac08e7182bcb6a91f01a0167542ca388da3c71b5512bbdbae155163eaa496ac2ef
@@ -594,7 +594,13 @@ module Parser
594
594
  end
595
595
 
596
596
  def gvar(token)
597
- n(:gvar, [ value(token).to_sym ],
597
+ gvar_name = value(token)
598
+
599
+ if gvar_name.start_with?('$0') && gvar_name.length > 2
600
+ diagnostic :error, :gvar_name, { :name => gvar_name }, loc(token)
601
+ end
602
+
603
+ n(:gvar, [ gvar_name.to_sym ],
598
604
  variable_map(token))
599
605
  end
600
606
 
@@ -654,6 +660,13 @@ module Parser
654
660
  end
655
661
 
656
662
  unless @parser.static_env.declared?(name)
663
+ if @parser.version == 33 &&
664
+ name == :it &&
665
+ @parser.context.in_block &&
666
+ !@parser.max_numparam_stack.has_ordinary_params?
667
+ diagnostic :warning, :ambiguous_it_call, nil, node.loc.expression
668
+ end
669
+
657
670
  return n(:send, [ nil, name ],
658
671
  var_send_map(node))
659
672
  end
@@ -2255,6 +2268,10 @@ module Parser
2255
2268
 
2256
2269
  def static_regexp_node(node)
2257
2270
  if node.type == :regexp
2271
+ if @parser.version >= 33 && node.children[0..-2].any? { |child| child.type != :str }
2272
+ return nil
2273
+ end
2274
+
2258
2275
  parts, options = node.children[0..-2], node.children[-1]
2259
2276
  static_regexp(parts, options)
2260
2277
  end
@@ -111,7 +111,7 @@ module Parser
111
111
  CurrentRuby = Ruby32
112
112
 
113
113
  when /^3\.3\./
114
- current_version = '3.3.0-dev'
114
+ current_version = '3.3.0'
115
115
  if RUBY_VERSION != current_version
116
116
  warn_syntax_deviation 'parser/ruby33', current_version
117
117
  end
@@ -121,8 +121,8 @@ module Parser
121
121
 
122
122
  else # :nocov:
123
123
  # Keep this in sync with released Ruby.
124
- warn_syntax_deviation 'parser/ruby32', '3.2.x'
125
- require 'parser/ruby32'
126
- CurrentRuby = Ruby32
124
+ warn_syntax_deviation 'parser/ruby33', '3.3.x'
125
+ require 'parser/ruby33'
126
+ CurrentRuby = Ruby33
127
127
  end
128
128
  end
@@ -5,6 +5,7 @@ module Parser
5
5
 
6
6
  class Lexer::Literal
7
7
  DELIMITERS = { '(' => ')', '[' => ']', '{' => '}', '<' => '>' }
8
+ SPACE = ' '.ord
8
9
 
9
10
  TYPES = {
10
11
  # type start token interpolate?
@@ -234,7 +235,20 @@ module Parser
234
235
  protected
235
236
 
236
237
  def delimiter?(delimiter)
237
- if @indent
238
+ if heredoc?
239
+ # This heredoc is valid:
240
+ # <<~E
241
+ # E
242
+ # and this:
243
+ # <<~E
244
+ # E
245
+ # but this one is not:
246
+ # <<~' E'
247
+ # E
248
+ # because there are not enough leading spaces in the closing delimiter.
249
+ delimiter.end_with?(@end_delim) &&
250
+ delimiter.delete_suffix(@end_delim).bytes.all? { |c| c == SPACE }
251
+ elsif @indent
238
252
  @end_delim == delimiter.lstrip
239
253
  else
240
254
  @end_delim == delimiter