parser 3.2.2.4 → 3.3.3.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.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
@@ -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.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.4
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-10-04 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.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.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.