parser 3.2.2.3 → 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: 6df2e6383fb2571b7b534703d56589f4ee58235cf8579eb42409915bad548bf1
4
- data.tar.gz: ae96b9894891d64599e0253d35a274f41e17d5a7f1d18c2b121faedd1d5ee978
3
+ metadata.gz: 780dd5ff7826fc0f5732ce77431124b80780db4aba31bb969778f856f3f3f856
4
+ data.tar.gz: 597eb758eb6f50230e1541bd30b317b43ef6efa060d1ae276f556e90f23ac50e
5
5
  SHA512:
6
- metadata.gz: a225b9a96a99999e59b4d4c61f056e7501073a9b69bed0987f6ea7272f38efe7aaae50901cfbf3074c4de6174622bf9282ecd8b1b915ecc9aed462ebde2e6faf
7
- data.tar.gz: 17116f52ec7abc4f13fd1fecf9c0edf0c8a0fc07294c1b60eb5c7c113571788a5ef3c077e7e774671a490d8c606f0dce52723f84cb9752ea580ee1d764c16066
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
@@ -1690,24 +1703,34 @@ module Parser
1690
1703
  cond
1691
1704
  end
1692
1705
 
1693
- when :and, :or, :irange, :erange
1706
+ when :and, :or
1694
1707
  lhs, rhs = *cond
1695
1708
 
1696
- type = case cond.type
1697
- when :irange then :iflipflop
1698
- when :erange then :eflipflop
1699
- end
1700
-
1701
- if [:and, :or].include?(cond.type) &&
1702
- @parser.version == 18
1709
+ if @parser.version == 18
1703
1710
  cond
1704
1711
  else
1705
- cond.updated(type, [
1712
+ cond.updated(cond.type, [
1706
1713
  check_condition(lhs),
1707
1714
  check_condition(rhs)
1708
1715
  ])
1709
1716
  end
1710
1717
 
1718
+ when :irange, :erange
1719
+ lhs, rhs = *cond
1720
+
1721
+ type = case cond.type
1722
+ when :irange then :iflipflop
1723
+ when :erange then :eflipflop
1724
+ end
1725
+
1726
+ lhs_condition = check_condition(lhs) unless lhs.nil?
1727
+ rhs_condition = check_condition(rhs) unless rhs.nil?
1728
+
1729
+ return cond.updated(type, [
1730
+ lhs_condition,
1731
+ rhs_condition
1732
+ ])
1733
+
1711
1734
  when :regexp
1712
1735
  n(:match_current_line, [ cond ], expr_map(cond.loc.expression))
1713
1736
 
@@ -2245,6 +2268,10 @@ module Parser
2245
2268
 
2246
2269
  def static_regexp_node(node)
2247
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
+
2248
2275
  parts, options = node.children[0..-2], node.children[-1]
2249
2276
  static_regexp(parts, options)
2250
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