parser 3.2.2.3 → 3.3.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,14 +1,14 @@
1
1
  # -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*-
2
2
  #
3
3
  # DO NOT MODIFY!!!!
4
- # This file is automatically generated by Racc 1.7.0
5
- # from Racc grammar file "".
4
+ # This file is automatically generated by Racc 1.7.3
5
+ # from Racc grammar file "rubymotion.y".
6
6
  #
7
7
 
8
8
  require 'racc/parser.rb'
9
9
 
10
10
 
11
- require 'parser'
11
+ require_relative '../parser'
12
12
 
13
13
  module Parser
14
14
  class RubyMotion < Parser::Base
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'parser/runner'
4
- require 'parser/color'
5
- require 'parser/lexer/explanation'
3
+ require_relative '../runner'
4
+ require_relative '../color'
5
+ require_relative '../lexer/explanation'
6
6
  require 'json'
7
7
 
8
8
  module Parser
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'parser/runner'
3
+ require_relative '../runner'
4
4
  require 'tempfile'
5
5
 
6
6
  module Parser
data/lib/parser/runner.rb CHANGED
@@ -4,7 +4,7 @@ require 'benchmark'
4
4
  require 'find'
5
5
  require 'optparse'
6
6
 
7
- require 'parser'
7
+ require_relative '../parser'
8
8
 
9
9
  module Parser
10
10
 
@@ -64,82 +64,87 @@ module Parser
64
64
  end
65
65
 
66
66
  opts.on '--18', 'Parse as Ruby 1.8.7 would' do
67
- require 'parser/ruby18'
67
+ require_relative 'ruby18'
68
68
  @parser_class = Parser::Ruby18
69
69
  end
70
70
 
71
71
  opts.on '--19', 'Parse as Ruby 1.9.3 would' do
72
- require 'parser/ruby19'
72
+ require_relative 'ruby19'
73
73
  @parser_class = Parser::Ruby19
74
74
  end
75
75
 
76
76
  opts.on '--20', 'Parse as Ruby 2.0 would' do
77
- require 'parser/ruby20'
77
+ require_relative 'ruby20'
78
78
  @parser_class = Parser::Ruby20
79
79
  end
80
80
 
81
81
  opts.on '--21', 'Parse as Ruby 2.1 would' do
82
- require 'parser/ruby21'
82
+ require_relative 'ruby21'
83
83
  @parser_class = Parser::Ruby21
84
84
  end
85
85
 
86
86
  opts.on '--22', 'Parse as Ruby 2.2 would' do
87
- require 'parser/ruby22'
87
+ require_relative 'ruby22'
88
88
  @parser_class = Parser::Ruby22
89
89
  end
90
90
 
91
91
  opts.on '--23', 'Parse as Ruby 2.3 would' do
92
- require 'parser/ruby23'
92
+ require_relative 'ruby23'
93
93
  @parser_class = Parser::Ruby23
94
94
  end
95
95
 
96
96
  opts.on '--24', 'Parse as Ruby 2.4 would' do
97
- require 'parser/ruby24'
97
+ require_relative 'ruby24'
98
98
  @parser_class = Parser::Ruby24
99
99
  end
100
100
 
101
101
  opts.on '--25', 'Parse as Ruby 2.5 would' do
102
- require 'parser/ruby25'
102
+ require_relative 'ruby25'
103
103
  @parser_class = Parser::Ruby25
104
104
  end
105
105
 
106
106
  opts.on '--26', 'Parse as Ruby 2.6 would' do
107
- require 'parser/ruby26'
107
+ require_relative 'ruby26'
108
108
  @parser_class = Parser::Ruby26
109
109
  end
110
110
 
111
111
  opts.on '--27', 'Parse as Ruby 2.7 would' do
112
- require 'parser/ruby27'
112
+ require_relative 'ruby27'
113
113
  @parser_class = Parser::Ruby27
114
114
  end
115
115
 
116
116
  opts.on '--30', 'Parse as Ruby 3.0 would' do
117
- require 'parser/ruby30'
117
+ require_relative 'ruby30'
118
118
  @parser_class = Parser::Ruby30
119
119
  end
120
120
 
121
121
  opts.on '--31', 'Parse as Ruby 3.1 would' do
122
- require 'parser/ruby31'
122
+ require_relative 'ruby31'
123
123
  @parser_class = Parser::Ruby31
124
124
  end
125
125
 
126
126
  opts.on '--32', 'Parse as Ruby 3.2 would' do
127
- require 'parser/ruby32'
127
+ require_relative 'ruby32'
128
128
  @parser_class = Parser::Ruby32
129
129
  end
130
130
 
131
131
  opts.on '--33', 'Parse as Ruby 3.3 would' do
132
- require 'parser/ruby33'
132
+ require_relative 'ruby33'
133
133
  @parser_class = Parser::Ruby33
134
134
  end
135
135
 
136
+ opts.on '--34', 'Parse as Ruby 3.4 would' do
137
+ require_relative 'ruby34'
138
+ @parser_class = Parser::Ruby34
139
+ end
140
+
136
141
  opts.on '--mac', 'Parse as MacRuby 0.12 would' do
137
- require 'parser/macruby'
142
+ require_relative 'macruby'
138
143
  @parser_class = Parser::MacRuby
139
144
  end
140
145
 
141
146
  opts.on '--ios', 'Parse as mid-2015 RubyMotion would' do
142
- require 'parser/rubymotion'
147
+ require_relative 'rubymotion'
143
148
  @parser_class = Parser::RubyMotion
144
149
  end
145
150
 
@@ -188,7 +193,7 @@ module Parser
188
193
  end
189
194
 
190
195
  if @parser_class.nil?
191
- require 'parser/current'
196
+ require_relative 'current'
192
197
  @parser_class = Parser::CurrentRuby
193
198
  end
194
199
  end
@@ -46,6 +46,7 @@ module Parser
46
46
  # magic encoding comment or UTF-8 BOM. `string` can be in any encoding.
47
47
  #
48
48
  # @param [String] string
49
+ # @raise [Parser::UnknownEncodingInMagicComment] if the encoding is not recognized
49
50
  # @return [String, nil] encoding name, if recognized
50
51
  #
51
52
  def self.recognize_encoding(string)
@@ -66,7 +67,11 @@ module Parser
66
67
  return nil if encoding_line.nil? || encoding_line[0] != '#'
67
68
 
68
69
  if (result = ENCODING_RE.match(encoding_line))
69
- Encoding.find(result[3] || result[4] || result[6])
70
+ begin
71
+ Encoding.find(result[3] || result[4] || result[6])
72
+ rescue ArgumentError => e
73
+ raise Parser::UnknownEncodingInMagicComment, e.message
74
+ end
70
75
  else
71
76
  nil
72
77
  end
@@ -95,10 +95,11 @@ module Parser
95
95
  end
96
96
 
97
97
  ##
98
- # Same as {associate}, but compares by identity, thus producing an unambiguous
99
- # result even in presence of equal nodes.
98
+ # Same as {associate}, but uses `node.loc` instead of `node` as
99
+ # the hash key, thus producing an unambiguous result even in presence
100
+ # of equal nodes.
100
101
  #
101
- # @return [Hash<Parser::Source::Node, Array<Parser::Source::Comment>>]
102
+ # @return [Hash<Parser::Source::Map, Array<Parser::Source::Comment>>]
102
103
  #
103
104
  def associate_locations
104
105
  @map_using = :location
@@ -106,11 +107,10 @@ module Parser
106
107
  end
107
108
 
108
109
  ##
109
- # Same as {associate}, but uses `node.loc` instead of `node` as
110
- # the hash key, thus producing an unambiguous result even in presence
111
- # of equal nodes.
110
+ # Same as {associate}, but compares by identity, thus producing an unambiguous
111
+ # result even in presence of equal nodes.
112
112
  #
113
- # @return [Hash<Parser::Source::Map, Array<Parser::Source::Comment>>]
113
+ # @return [Hash<Parser::Source::Node, Array<Parser::Source::Comment>>]
114
114
  #
115
115
  def associate_by_identity
116
116
  @map_using = :identity
@@ -6,9 +6,10 @@ module Parser
6
6
  # @api private
7
7
  #
8
8
  # Actions are arranged in a tree and get combined so that:
9
- # children are strictly contained by their parent
10
- # sibblings all disjoint from one another and ordered
11
- # only actions with replacement==nil may have children
9
+ #
10
+ # * Children are strictly contained by their parent
11
+ # * Siblings are all disjointed from one another and ordered
12
+ # * Only actions with `replacement == nil` may have children
12
13
  #
13
14
  class TreeRewriter::Action
14
15
  attr_reader :range, :replacement, :insert_before, :insert_after
@@ -60,7 +61,7 @@ module Parser
60
61
 
61
62
  ##
62
63
  # A root action has its range set to the whole source range, even
63
- # though it typically do not act on that range.
64
+ # though it typically does not act on that range.
64
65
  # This method returns the action as if it was a child action with
65
66
  # its range contracted.
66
67
  # @return [Action]
@@ -4,9 +4,15 @@ module Parser
4
4
 
5
5
  class StaticEnvironment
6
6
  FORWARD_ARGS = :FORWARD_ARGS
7
- ANONYMOUS_BLOCKARG = :ANONYMOUS_BLOCKARG
8
- ANONYMOUS_RESTARG = :ANONYMOUS_RESTARG
9
- ANONYMOUS_KWRESTARG = :ANONYMOUS_KWRESTARG
7
+
8
+ ANONYMOUS_RESTARG_IN_CURRENT_SCOPE = :ANONYMOUS_RESTARG_IN_CURRENT_SCOPE
9
+ ANONYMOUS_RESTARG_INHERITED = :ANONYMOUS_RESTARG_INHERITED
10
+
11
+ ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE = :ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE
12
+ ANONYMOUS_KWRESTARG_INHERITED = :ANONYMOUS_KWRESTARG_INHERITED
13
+
14
+ ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE = :ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE
15
+ ANONYMOUS_BLOCKARG_INHERITED = :ANONYMOUS_BLOCKARG_INHERITED
10
16
 
11
17
  def initialize
12
18
  reset
@@ -27,6 +33,15 @@ module Parser
27
33
  def extend_dynamic
28
34
  @stack.push(@variables)
29
35
  @variables = @variables.dup
36
+ if @variables.delete(ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE)
37
+ @variables.add(ANONYMOUS_BLOCKARG_INHERITED)
38
+ end
39
+ if @variables.delete(ANONYMOUS_RESTARG_IN_CURRENT_SCOPE)
40
+ @variables.add(ANONYMOUS_RESTARG_INHERITED)
41
+ end
42
+ if @variables.delete(ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE)
43
+ @variables.add(ANONYMOUS_KWRESTARG_INHERITED)
44
+ end
30
45
 
31
46
  self
32
47
  end
@@ -47,6 +62,8 @@ module Parser
47
62
  @variables.include?(name.to_sym)
48
63
  end
49
64
 
65
+ # Forward args
66
+
50
67
  def declare_forward_args
51
68
  declare(FORWARD_ARGS)
52
69
  end
@@ -55,28 +72,58 @@ module Parser
55
72
  declared?(FORWARD_ARGS)
56
73
  end
57
74
 
75
+ # Anonymous blockarg
76
+
58
77
  def declare_anonymous_blockarg
59
- declare(ANONYMOUS_BLOCKARG)
78
+ declare(ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE)
60
79
  end
61
80
 
62
81
  def declared_anonymous_blockarg?
63
- declared?(ANONYMOUS_BLOCKARG)
82
+ declared?(ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE) || declared?(ANONYMOUS_BLOCKARG_INHERITED)
64
83
  end
65
84
 
85
+ def declared_anonymous_blockarg_in_current_scpe?
86
+ declared?(ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE)
87
+ end
88
+
89
+ def parent_has_anonymous_blockarg?
90
+ @stack.any? { |variables| variables.include?(ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE) }
91
+ end
92
+
93
+ # Anonymous restarg
94
+
66
95
  def declare_anonymous_restarg
67
- declare(ANONYMOUS_RESTARG)
96
+ declare(ANONYMOUS_RESTARG_IN_CURRENT_SCOPE)
68
97
  end
69
98
 
70
99
  def declared_anonymous_restarg?
71
- declared?(ANONYMOUS_RESTARG)
100
+ declared?(ANONYMOUS_RESTARG_IN_CURRENT_SCOPE) || declared?(ANONYMOUS_RESTARG_INHERITED)
72
101
  end
73
102
 
103
+ def declared_anonymous_restarg_in_current_scope?
104
+ declared?(ANONYMOUS_RESTARG_IN_CURRENT_SCOPE)
105
+ end
106
+
107
+ def parent_has_anonymous_restarg?
108
+ @stack.any? { |variables| variables.include?(ANONYMOUS_RESTARG_IN_CURRENT_SCOPE) }
109
+ end
110
+
111
+ # Anonymous kwresarg
112
+
74
113
  def declare_anonymous_kwrestarg
75
- declare(ANONYMOUS_KWRESTARG)
114
+ declare(ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE)
76
115
  end
77
116
 
78
117
  def declared_anonymous_kwrestarg?
79
- declared?(ANONYMOUS_KWRESTARG)
118
+ declared?(ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE) || declared?(ANONYMOUS_KWRESTARG_INHERITED)
119
+ end
120
+
121
+ def declared_anonymous_kwrestarg_in_current_scope?
122
+ declared?(ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE)
123
+ end
124
+
125
+ def parent_has_anonymous_kwrestarg?
126
+ @stack.any? { |variables| variables.include?(ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE) }
80
127
  end
81
128
 
82
129
  def empty?
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parser
4
+ ##
5
+ # {Parser::UnknownEncodingInMagicComment} is raised when a magic encoding
6
+ # comment is encountered that the currently running Ruby version doesn't
7
+ # recognize. It inherits from {ArgumentError} since that is the exception
8
+ # Ruby itself raises when trying to execute a file with an unknown encoding.
9
+ # As such, it is also not a {Parser::SyntaxError}.
10
+ #
11
+ # @api public
12
+ #
13
+ class UnknownEncodingInMagicComment < ArgumentError
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Parser
4
- VERSION = '3.2.2.3'
4
+ VERSION = '3.3.3.0'
5
5
  end
data/lib/parser.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  if RUBY_VERSION =~ /^1\.[89]\./
4
- require 'parser/version'
4
+ require_relative 'parser/version'
5
5
  raise LoadError, <<-UNSUPPORTED_VERSION_MSG
6
6
  parser v#{Parser::VERSION} cannot run on Ruby #{RUBY_VERSION}.
7
7
  Please upgrade to Ruby 2.0.0 or higher, or use an older version of the parser gem.
@@ -17,74 +17,75 @@ require 'ast'
17
17
  # @api public
18
18
  #
19
19
  module Parser
20
- require 'parser/version'
21
- require 'parser/messages'
22
- require 'parser/deprecation'
20
+ require_relative 'parser/version'
21
+ require_relative 'parser/messages'
22
+ require_relative 'parser/deprecation'
23
23
 
24
24
  module AST
25
- require 'parser/ast/node'
26
- require 'parser/ast/processor'
27
- require 'parser/meta'
25
+ require_relative 'parser/ast/node'
26
+ require_relative 'parser/ast/processor'
27
+ require_relative 'parser/meta'
28
28
  end
29
29
 
30
30
  module Source
31
- require 'parser/source/buffer'
32
- require 'parser/source/range'
33
-
34
- require 'parser/source/comment'
35
- require 'parser/source/comment/associator'
36
-
37
- require 'parser/source/rewriter'
38
- require 'parser/source/rewriter/action'
39
- require 'parser/source/tree_rewriter'
40
- require 'parser/source/tree_rewriter/action'
41
-
42
- require 'parser/source/map'
43
- require 'parser/source/map/operator'
44
- require 'parser/source/map/collection'
45
- require 'parser/source/map/constant'
46
- require 'parser/source/map/variable'
47
- require 'parser/source/map/keyword'
48
- require 'parser/source/map/definition'
49
- require 'parser/source/map/method_definition'
50
- require 'parser/source/map/send'
51
- require 'parser/source/map/index'
52
- require 'parser/source/map/condition'
53
- require 'parser/source/map/ternary'
54
- require 'parser/source/map/for'
55
- require 'parser/source/map/rescue_body'
56
- require 'parser/source/map/heredoc'
57
- require 'parser/source/map/objc_kwarg'
31
+ require_relative 'parser/source/buffer'
32
+ require_relative 'parser/source/range'
33
+
34
+ require_relative 'parser/source/comment'
35
+ require_relative 'parser/source/comment/associator'
36
+
37
+ require_relative 'parser/source/rewriter'
38
+ require_relative 'parser/source/rewriter/action'
39
+ require_relative 'parser/source/tree_rewriter'
40
+ require_relative 'parser/source/tree_rewriter/action'
41
+
42
+ require_relative 'parser/source/map'
43
+ require_relative 'parser/source/map/operator'
44
+ require_relative 'parser/source/map/collection'
45
+ require_relative 'parser/source/map/constant'
46
+ require_relative 'parser/source/map/variable'
47
+ require_relative 'parser/source/map/keyword'
48
+ require_relative 'parser/source/map/definition'
49
+ require_relative 'parser/source/map/method_definition'
50
+ require_relative 'parser/source/map/send'
51
+ require_relative 'parser/source/map/index'
52
+ require_relative 'parser/source/map/condition'
53
+ require_relative 'parser/source/map/ternary'
54
+ require_relative 'parser/source/map/for'
55
+ require_relative 'parser/source/map/rescue_body'
56
+ require_relative 'parser/source/map/heredoc'
57
+ require_relative 'parser/source/map/objc_kwarg'
58
58
  end
59
59
 
60
- require 'parser/syntax_error'
61
- require 'parser/clobbering_error'
62
- require 'parser/diagnostic'
63
- require 'parser/diagnostic/engine'
60
+ require_relative 'parser/syntax_error'
61
+ require_relative 'parser/clobbering_error'
62
+ require_relative 'parser/unknown_encoding_in_magic_comment_error'
63
+ require_relative 'parser/diagnostic'
64
+ require_relative 'parser/diagnostic/engine'
64
65
 
65
- require 'parser/static_environment'
66
+ require_relative 'parser/static_environment'
66
67
 
67
68
  if RUBY_ENGINE == 'truffleruby'
68
- require 'parser/lexer-F0'
69
+ require_relative 'parser/lexer-F0'
69
70
  else
70
- require 'parser/lexer-F1'
71
+ require_relative 'parser/lexer-F1'
71
72
  end
72
- require 'parser/lexer-strings'
73
- require 'parser/lexer/literal'
74
- require 'parser/lexer/stack_state'
75
- require 'parser/lexer/dedenter'
73
+ require_relative 'parser/lexer-strings'
74
+ require_relative 'parser/lexer/literal'
75
+ require_relative 'parser/lexer/stack_state'
76
+ require_relative 'parser/lexer/dedenter'
76
77
 
77
78
  module Builders
78
- require 'parser/builders/default'
79
+ require_relative 'parser/builders/default'
79
80
  end
80
81
 
81
- require 'parser/context'
82
- require 'parser/max_numparam_stack'
83
- require 'parser/current_arg_stack'
84
- require 'parser/variables_stack'
82
+ require_relative 'parser/context'
83
+ require_relative 'parser/max_numparam_stack'
84
+ require_relative 'parser/current_arg_stack'
85
+ require_relative 'parser/variables_stack'
85
86
 
86
- require 'parser/base'
87
+ require_relative 'parser/base'
87
88
 
88
- require 'parser/rewriter'
89
- require 'parser/tree_rewriter'
89
+ require_relative 'parser/rewriter'
90
+ require_relative 'parser/tree_rewriter'
90
91
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.2.3
4
+ version: 3.3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - whitequark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-08 00:00:00.000000000 Z
11
+ date: 2024-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ast
@@ -210,6 +210,7 @@ files:
210
210
  - lib/parser/ruby31.rb
211
211
  - lib/parser/ruby32.rb
212
212
  - lib/parser/ruby33.rb
213
+ - lib/parser/ruby34.rb
213
214
  - lib/parser/rubymotion.rb
214
215
  - lib/parser/runner.rb
215
216
  - lib/parser/runner/ruby_parse.rb
@@ -241,6 +242,7 @@ files:
241
242
  - lib/parser/static_environment.rb
242
243
  - lib/parser/syntax_error.rb
243
244
  - lib/parser/tree_rewriter.rb
245
+ - lib/parser/unknown_encoding_in_magic_comment_error.rb
244
246
  - lib/parser/variables_stack.rb
245
247
  - lib/parser/version.rb
246
248
  - parser.gemspec
@@ -249,9 +251,9 @@ licenses:
249
251
  - MIT
250
252
  metadata:
251
253
  bug_tracker_uri: https://github.com/whitequark/parser/issues
252
- changelog_uri: https://github.com/whitequark/parser/blob/v3.2.2.3/CHANGELOG.md
253
- documentation_uri: https://www.rubydoc.info/gems/parser/3.2.2.3
254
- source_code_uri: https://github.com/whitequark/parser/tree/v3.2.2.3
254
+ changelog_uri: https://github.com/whitequark/parser/blob/v3.3.3.0/CHANGELOG.md
255
+ documentation_uri: https://www.rubydoc.info/gems/parser/3.3.3.0
256
+ source_code_uri: https://github.com/whitequark/parser/tree/v3.3.3.0
255
257
  post_install_message:
256
258
  rdoc_options: []
257
259
  require_paths:
@@ -267,7 +269,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
267
269
  - !ruby/object:Gem::Version
268
270
  version: '0'
269
271
  requirements: []
270
- rubygems_version: 3.2.3
272
+ rubygems_version: 3.5.3
271
273
  signing_key:
272
274
  specification_version: 4
273
275
  summary: A Ruby parser written in pure Ruby.