parser 3.2.2.4 → 3.3.5.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.
@@ -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.1
5
- # from Racc grammar file "".
4
+ # This file is automatically generated by Racc 1.8.1
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
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'benchmark'
4
3
  require 'find'
5
4
  require 'optparse'
6
5
 
7
- require 'parser'
6
+ require_relative '../parser'
8
7
 
9
8
  module Parser
10
9
 
@@ -64,82 +63,87 @@ module Parser
64
63
  end
65
64
 
66
65
  opts.on '--18', 'Parse as Ruby 1.8.7 would' do
67
- require 'parser/ruby18'
66
+ require_relative 'ruby18'
68
67
  @parser_class = Parser::Ruby18
69
68
  end
70
69
 
71
70
  opts.on '--19', 'Parse as Ruby 1.9.3 would' do
72
- require 'parser/ruby19'
71
+ require_relative 'ruby19'
73
72
  @parser_class = Parser::Ruby19
74
73
  end
75
74
 
76
75
  opts.on '--20', 'Parse as Ruby 2.0 would' do
77
- require 'parser/ruby20'
76
+ require_relative 'ruby20'
78
77
  @parser_class = Parser::Ruby20
79
78
  end
80
79
 
81
80
  opts.on '--21', 'Parse as Ruby 2.1 would' do
82
- require 'parser/ruby21'
81
+ require_relative 'ruby21'
83
82
  @parser_class = Parser::Ruby21
84
83
  end
85
84
 
86
85
  opts.on '--22', 'Parse as Ruby 2.2 would' do
87
- require 'parser/ruby22'
86
+ require_relative 'ruby22'
88
87
  @parser_class = Parser::Ruby22
89
88
  end
90
89
 
91
90
  opts.on '--23', 'Parse as Ruby 2.3 would' do
92
- require 'parser/ruby23'
91
+ require_relative 'ruby23'
93
92
  @parser_class = Parser::Ruby23
94
93
  end
95
94
 
96
95
  opts.on '--24', 'Parse as Ruby 2.4 would' do
97
- require 'parser/ruby24'
96
+ require_relative 'ruby24'
98
97
  @parser_class = Parser::Ruby24
99
98
  end
100
99
 
101
100
  opts.on '--25', 'Parse as Ruby 2.5 would' do
102
- require 'parser/ruby25'
101
+ require_relative 'ruby25'
103
102
  @parser_class = Parser::Ruby25
104
103
  end
105
104
 
106
105
  opts.on '--26', 'Parse as Ruby 2.6 would' do
107
- require 'parser/ruby26'
106
+ require_relative 'ruby26'
108
107
  @parser_class = Parser::Ruby26
109
108
  end
110
109
 
111
110
  opts.on '--27', 'Parse as Ruby 2.7 would' do
112
- require 'parser/ruby27'
111
+ require_relative 'ruby27'
113
112
  @parser_class = Parser::Ruby27
114
113
  end
115
114
 
116
115
  opts.on '--30', 'Parse as Ruby 3.0 would' do
117
- require 'parser/ruby30'
116
+ require_relative 'ruby30'
118
117
  @parser_class = Parser::Ruby30
119
118
  end
120
119
 
121
120
  opts.on '--31', 'Parse as Ruby 3.1 would' do
122
- require 'parser/ruby31'
121
+ require_relative 'ruby31'
123
122
  @parser_class = Parser::Ruby31
124
123
  end
125
124
 
126
125
  opts.on '--32', 'Parse as Ruby 3.2 would' do
127
- require 'parser/ruby32'
126
+ require_relative 'ruby32'
128
127
  @parser_class = Parser::Ruby32
129
128
  end
130
129
 
131
130
  opts.on '--33', 'Parse as Ruby 3.3 would' do
132
- require 'parser/ruby33'
131
+ require_relative 'ruby33'
133
132
  @parser_class = Parser::Ruby33
134
133
  end
135
134
 
135
+ opts.on '--34', 'Parse as Ruby 3.4 would' do
136
+ require_relative 'ruby34'
137
+ @parser_class = Parser::Ruby34
138
+ end
139
+
136
140
  opts.on '--mac', 'Parse as MacRuby 0.12 would' do
137
- require 'parser/macruby'
141
+ require_relative 'macruby'
138
142
  @parser_class = Parser::MacRuby
139
143
  end
140
144
 
141
145
  opts.on '--ios', 'Parse as mid-2015 RubyMotion would' do
142
- require 'parser/rubymotion'
146
+ require_relative 'rubymotion'
143
147
  @parser_class = Parser::RubyMotion
144
148
  end
145
149
 
@@ -188,7 +192,7 @@ module Parser
188
192
  end
189
193
 
190
194
  if @parser_class.nil?
191
- require 'parser/current'
195
+ require_relative 'current'
192
196
  @parser_class = Parser::CurrentRuby
193
197
  end
194
198
  end
@@ -215,14 +219,13 @@ module Parser
215
219
  end
216
220
 
217
221
  def process_all_input
218
- parsing_time =
219
- Benchmark.measure do
220
- process_fragments
221
- process_files
222
- end
222
+ time_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
223
+ process_fragments
224
+ process_files
225
+ time_elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - time_start
223
226
 
224
227
  if @benchmark
225
- report_with_time(parsing_time)
228
+ report_with_time(time_elapsed)
226
229
  end
227
230
  end
228
231
 
@@ -273,12 +276,10 @@ module Parser
273
276
  raise NotImplementedError, "implement #{self.class}##{__callee__}"
274
277
  end
275
278
 
276
- def report_with_time(parsing_time)
277
- cpu_time = parsing_time.utime
278
-
279
- speed = '%.3f' % (@source_size / cpu_time / 1000)
279
+ def report_with_time(time_elapsed)
280
+ speed = '%.3f' % (@source_size / time_elapsed / 1000)
280
281
  puts "Parsed #{@source_count} files (#{@source_size} characters)" \
281
- " in #{'%.2f' % cpu_time} seconds (#{speed} kchars/s)."
282
+ " in #{'%.2f' % time_elapsed} seconds (#{speed} kchars/s)."
282
283
 
283
284
  if defined?(RUBY_ENGINE)
284
285
  engine = RUBY_ENGINE
@@ -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
@@ -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.4'
4
+ VERSION = '3.3.5.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.4
4
+ version: 3.3.5.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-10-04 00:00:00.000000000 Z
11
+ date: 2024-09-04 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.4/CHANGELOG.md
253
- documentation_uri: https://www.rubydoc.info/gems/parser/3.2.2.4
254
- source_code_uri: https://github.com/whitequark/parser/tree/v3.2.2.4
254
+ changelog_uri: https://github.com/whitequark/parser/blob/v3.3.5.0/CHANGELOG.md
255
+ documentation_uri: https://www.rubydoc.info/gems/parser/3.3.5.0
256
+ source_code_uri: https://github.com/whitequark/parser/tree/v3.3.5.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.