parser 3.2.2.3 → 3.3.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6df2e6383fb2571b7b534703d56589f4ee58235cf8579eb42409915bad548bf1
4
- data.tar.gz: ae96b9894891d64599e0253d35a274f41e17d5a7f1d18c2b121faedd1d5ee978
3
+ metadata.gz: 6522bb3594d6cc37d08b4b3dc827c4796933a368ac8518e9e3aa036795359819
4
+ data.tar.gz: 65e8a84d3efef60da0460b2270a3127b8bb92534797a003c29de33a9caa538a7
5
5
  SHA512:
6
- metadata.gz: a225b9a96a99999e59b4d4c61f056e7501073a9b69bed0987f6ea7272f38efe7aaae50901cfbf3074c4de6174622bf9282ecd8b1b915ecc9aed462ebde2e6faf
7
- data.tar.gz: 17116f52ec7abc4f13fd1fecf9c0edf0c8a0fc07294c1b60eb5c7c113571788a5ef3c077e7e774671a490d8c606f0dce52723f84cb9752ea580ee1d764c16066
6
+ metadata.gz: 0ff8c442f2d7638629a2cbefae2b0432bec189cb7846c62217da0bc5709559bd93b870af4bf061d4998067955c7649ee531910f7e13a4902ba02a329bbc171b3
7
+ data.tar.gz: d97e4af8e9c64bad8aaf4a76d9359a30683f8528de3727522b0bc73c25259a796051c708c1b1489ce7b4dbf336e0835897795364c4db8c0a819c632d32cc48aa
data/lib/parser/all.rb CHANGED
@@ -14,3 +14,4 @@ require 'parser/ruby30'
14
14
  require 'parser/ruby31'
15
15
  require 'parser/ruby32'
16
16
  require 'parser/ruby33'
17
+ require 'parser/ruby34'
@@ -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
@@ -102,7 +102,7 @@ module Parser
102
102
  CurrentRuby = Ruby31
103
103
 
104
104
  when /^3\.2\./
105
- current_version = '3.2.2'
105
+ current_version = '3.2.3'
106
106
  if RUBY_VERSION != current_version
107
107
  warn_syntax_deviation 'parser/ruby32', current_version
108
108
  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
@@ -119,10 +119,19 @@ module Parser
119
119
  require 'parser/ruby33'
120
120
  CurrentRuby = Ruby33
121
121
 
122
+ when /^3\.4\./
123
+ current_version = '3.4.0'
124
+ if RUBY_VERSION != current_version
125
+ warn_syntax_deviation 'parser/ruby34', current_version
126
+ end
127
+
128
+ require 'parser/ruby34'
129
+ CurrentRuby = Ruby34
130
+
122
131
  else # :nocov:
123
132
  # Keep this in sync with released Ruby.
124
- warn_syntax_deviation 'parser/ruby32', '3.2.x'
125
- require 'parser/ruby32'
126
- CurrentRuby = Ruby32
133
+ warn_syntax_deviation 'parser/ruby33', '3.3.x'
134
+ require 'parser/ruby33'
135
+ CurrentRuby = Ruby33
127
136
  end
128
137
  end
@@ -5,6 +5,8 @@ module Parser
5
5
 
6
6
  class Lexer::Literal
7
7
  DELIMITERS = { '(' => ')', '[' => ']', '{' => '}', '<' => '>' }
8
+ SPACE = ' '.ord
9
+ TAB = "\t".ord
8
10
 
9
11
  TYPES = {
10
12
  # type start token interpolate?
@@ -234,7 +236,20 @@ module Parser
234
236
  protected
235
237
 
236
238
  def delimiter?(delimiter)
237
- if @indent
239
+ if heredoc?
240
+ # This heredoc is valid:
241
+ # <<~E
242
+ # E
243
+ # and this:
244
+ # <<~E
245
+ # E
246
+ # but this one is not:
247
+ # <<~' E'
248
+ # E
249
+ # because there are not enough leading spaces in the closing delimiter.
250
+ delimiter.end_with?(@end_delim) &&
251
+ delimiter.sub(/#{Regexp.escape(@end_delim)}\z/, '').bytes.all? { |c| c == SPACE || c == TAB }
252
+ elsif @indent
238
253
  @end_delim == delimiter.lstrip
239
254
  else
240
255
  @end_delim == delimiter