parser 2.6.0.0 → 3.1.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 +4 -4
- data/lib/parser/all.rb +3 -0
- data/lib/parser/ast/processor.rb +48 -1
- data/lib/parser/base.rb +30 -6
- data/lib/parser/builders/default.rb +670 -38
- data/lib/parser/context.rb +24 -26
- data/lib/parser/current.rb +36 -9
- data/lib/parser/current_arg_stack.rb +46 -0
- data/lib/parser/diagnostic/engine.rb +1 -2
- data/lib/parser/diagnostic.rb +1 -1
- data/lib/parser/lexer/dedenter.rb +58 -49
- data/lib/parser/lexer/explanation.rb +1 -1
- data/lib/parser/lexer.rb +13837 -11893
- data/lib/parser/macruby.rb +2544 -2489
- data/lib/parser/max_numparam_stack.rb +56 -0
- data/lib/parser/messages.rb +78 -44
- data/lib/parser/meta.rb +13 -3
- data/lib/parser/ruby18.rb +2313 -2259
- data/lib/parser/ruby19.rb +2537 -2488
- data/lib/parser/ruby20.rb +2724 -2673
- data/lib/parser/ruby21.rb +2766 -2727
- data/lib/parser/ruby22.rb +2683 -2628
- data/lib/parser/ruby23.rb +2796 -2755
- data/lib/parser/ruby24.rb +2812 -2771
- data/lib/parser/ruby25.rb +2703 -2670
- data/lib/parser/ruby26.rb +2794 -2747
- data/lib/parser/ruby27.rb +7914 -0
- data/lib/parser/ruby28.rb +8047 -0
- data/lib/parser/ruby30.rb +8096 -0
- data/lib/parser/ruby31.rb +8354 -0
- data/lib/parser/rubymotion.rb +2527 -2485
- data/lib/parser/runner/ruby_parse.rb +2 -2
- data/lib/parser/runner/ruby_rewrite.rb +2 -2
- data/lib/parser/runner.rb +36 -2
- data/lib/parser/source/buffer.rb +53 -28
- data/lib/parser/source/comment/associator.rb +31 -8
- data/lib/parser/source/comment.rb +14 -1
- data/lib/parser/source/map/method_definition.rb +25 -0
- data/lib/parser/source/range.rb +19 -3
- data/lib/parser/source/tree_rewriter/action.rb +137 -28
- data/lib/parser/source/tree_rewriter.rb +144 -14
- data/lib/parser/static_environment.rb +23 -0
- data/lib/parser/tree_rewriter.rb +3 -3
- data/lib/parser/variables_stack.rb +36 -0
- data/lib/parser/version.rb +1 -1
- data/lib/parser.rb +4 -0
- data/parser.gemspec +12 -19
- metadata +34 -99
- data/.gitignore +0 -32
- data/.travis.yml +0 -45
- data/.yardopts +0 -21
- data/CHANGELOG.md +0 -943
- data/CONTRIBUTING.md +0 -17
- data/Gemfile +0 -10
- data/README.md +0 -301
- data/Rakefile +0 -165
- data/ci/run_rubocop_specs +0 -14
- data/doc/AST_FORMAT.md +0 -1735
- data/doc/CUSTOMIZATION.md +0 -37
- data/doc/INTERNALS.md +0 -21
- data/doc/css/.gitkeep +0 -0
- data/doc/css/common.css +0 -68
- data/lib/parser/lexer.rl +0 -2383
- data/lib/parser/macruby.y +0 -2198
- data/lib/parser/ruby18.y +0 -1934
- data/lib/parser/ruby19.y +0 -2175
- data/lib/parser/ruby20.y +0 -2353
- data/lib/parser/ruby21.y +0 -2357
- data/lib/parser/ruby22.y +0 -2364
- data/lib/parser/ruby23.y +0 -2370
- data/lib/parser/ruby24.y +0 -2408
- data/lib/parser/ruby25.y +0 -2405
- data/lib/parser/ruby26.y +0 -2413
- data/lib/parser/rubymotion.y +0 -2182
- data/test/bug_163/fixtures/input.rb +0 -5
- data/test/bug_163/fixtures/output.rb +0 -5
- data/test/bug_163/rewriter.rb +0 -20
- data/test/helper.rb +0 -52
- data/test/parse_helper.rb +0 -315
- data/test/racc_coverage_helper.rb +0 -133
- data/test/test_base.rb +0 -31
- data/test/test_current.rb +0 -27
- data/test/test_diagnostic.rb +0 -96
- data/test/test_diagnostic_engine.rb +0 -62
- data/test/test_encoding.rb +0 -99
- data/test/test_lexer.rb +0 -3543
- data/test/test_lexer_stack_state.rb +0 -78
- data/test/test_parse_helper.rb +0 -80
- data/test/test_parser.rb +0 -7087
- data/test/test_runner_rewrite.rb +0 -47
- data/test/test_source_buffer.rb +0 -162
- data/test/test_source_comment.rb +0 -36
- data/test/test_source_comment_associator.rb +0 -367
- data/test/test_source_map.rb +0 -15
- data/test/test_source_range.rb +0 -172
- data/test/test_source_rewriter.rb +0 -541
- data/test/test_source_rewriter_action.rb +0 -46
- data/test/test_source_tree_rewriter.rb +0 -173
- data/test/test_static_environment.rb +0 -45
- data/test/using_tree_rewriter/fixtures/input.rb +0 -3
- data/test/using_tree_rewriter/fixtures/output.rb +0 -3
- data/test/using_tree_rewriter/using_tree_rewriter.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ed45256e09de6d92098e12e73a655fe9d4f35518f573984bf1d92ac87ae8ded
|
4
|
+
data.tar.gz: 68ee7fca4f6d1794e2fb160552b01b983466cd482cad8783ba5f7b1466d0e70b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f8f0785aba15f53c97b046aa5155ffeff4063b12fb611612bd7c3b94affb282487b5aad5ca783d2b928a91333db6e572a2a8a466fe9c7f5716354cb23644471
|
7
|
+
data.tar.gz: b8ecfc04463142cffb2aaad920e95e11257a1a6f7587bf439620b73e59102f15850c413dc807b613379678de9878aa2d941f3fa65ab20716f6be6d80fcf03299
|
data/lib/parser/all.rb
CHANGED
data/lib/parser/ast/processor.rb
CHANGED
@@ -20,6 +20,7 @@ module Parser
|
|
20
20
|
alias on_array process_regular_node
|
21
21
|
alias on_pair process_regular_node
|
22
22
|
alias on_hash process_regular_node
|
23
|
+
alias on_kwargs process_regular_node
|
23
24
|
alias on_irange process_regular_node
|
24
25
|
alias on_erange process_regular_node
|
25
26
|
|
@@ -124,7 +125,23 @@ module Parser
|
|
124
125
|
alias on_kwarg process_argument_node
|
125
126
|
alias on_kwoptarg process_argument_node
|
126
127
|
alias on_kwrestarg process_argument_node
|
127
|
-
alias
|
128
|
+
alias on_forward_arg process_argument_node
|
129
|
+
|
130
|
+
def on_procarg0(node)
|
131
|
+
if node.children[0].is_a?(Symbol)
|
132
|
+
# This branch gets executed when the builder
|
133
|
+
# is not configured to emit and 'arg' inside 'procarg0', i.e. when
|
134
|
+
# Parser::Builders::Default.emit_arg_inside_procarg0
|
135
|
+
# is set to false.
|
136
|
+
#
|
137
|
+
# If this flag is set to true this branch is unreachable.
|
138
|
+
# s(:procarg0, :a)
|
139
|
+
on_argument(node)
|
140
|
+
else
|
141
|
+
# s(:procarg0, s(:arg, :a), s(:arg, :b))
|
142
|
+
process_regular_node(node)
|
143
|
+
end
|
144
|
+
end
|
128
145
|
|
129
146
|
alias on_arg_expr process_regular_node
|
130
147
|
alias on_restarg_expr process_regular_node
|
@@ -173,6 +190,14 @@ module Parser
|
|
173
190
|
alias on_block process_regular_node
|
174
191
|
alias on_lambda process_regular_node
|
175
192
|
|
193
|
+
def on_numblock(node)
|
194
|
+
method_call, max_numparam, body = *node
|
195
|
+
|
196
|
+
node.updated(nil, [
|
197
|
+
process(method_call), max_numparam, process(body)
|
198
|
+
])
|
199
|
+
end
|
200
|
+
|
176
201
|
alias on_while process_regular_node
|
177
202
|
alias on_while_post process_regular_node
|
178
203
|
alias on_until process_regular_node
|
@@ -213,6 +238,24 @@ module Parser
|
|
213
238
|
alias on_preexe process_regular_node
|
214
239
|
alias on_postexe process_regular_node
|
215
240
|
|
241
|
+
alias on_case_match process_regular_node
|
242
|
+
alias on_in_match process_regular_node
|
243
|
+
alias on_match_pattern process_regular_node
|
244
|
+
alias on_match_pattern_p process_regular_node
|
245
|
+
alias on_in_pattern process_regular_node
|
246
|
+
alias on_if_guard process_regular_node
|
247
|
+
alias on_unless_guard process_regular_node
|
248
|
+
alias on_match_var process_variable_node
|
249
|
+
alias on_match_rest process_regular_node
|
250
|
+
alias on_pin process_regular_node
|
251
|
+
alias on_match_alt process_regular_node
|
252
|
+
alias on_match_as process_regular_node
|
253
|
+
alias on_array_pattern process_regular_node
|
254
|
+
alias on_array_pattern_with_tail process_regular_node
|
255
|
+
alias on_hash_pattern process_regular_node
|
256
|
+
alias on_const_pattern process_regular_node
|
257
|
+
alias on_find_pattern process_regular_node
|
258
|
+
|
216
259
|
# @private
|
217
260
|
def process_variable_node(node)
|
218
261
|
warn 'Parser::AST::Processor#process_variable_node is deprecated as a' \
|
@@ -236,6 +279,10 @@ module Parser
|
|
236
279
|
'Parser::AST::Processor#on_argument instead.'
|
237
280
|
on_argument(node)
|
238
281
|
end
|
282
|
+
|
283
|
+
def on_empty_else(node)
|
284
|
+
node
|
285
|
+
end
|
239
286
|
end
|
240
287
|
end
|
241
288
|
end
|
data/lib/parser/base.rb
CHANGED
@@ -109,11 +109,16 @@ module Parser
|
|
109
109
|
end
|
110
110
|
private_class_method :setup_source_buffer
|
111
111
|
|
112
|
+
attr_reader :lexer
|
112
113
|
attr_reader :diagnostics
|
113
114
|
attr_reader :builder
|
114
115
|
attr_reader :static_env
|
115
116
|
attr_reader :source_buffer
|
116
117
|
attr_reader :context
|
118
|
+
attr_reader :max_numparam_stack
|
119
|
+
attr_reader :current_arg_stack
|
120
|
+
attr_reader :pattern_variables
|
121
|
+
attr_reader :pattern_hash_keys
|
117
122
|
|
118
123
|
##
|
119
124
|
# @param [Parser::Builders::Default] builder The AST builder to use.
|
@@ -123,13 +128,28 @@ module Parser
|
|
123
128
|
|
124
129
|
@static_env = StaticEnvironment.new
|
125
130
|
|
131
|
+
# Stack that holds current parsing context
|
132
|
+
@context = Context.new
|
133
|
+
|
134
|
+
# Maximum numbered parameters stack
|
135
|
+
@max_numparam_stack = MaxNumparamStack.new
|
136
|
+
|
137
|
+
# Current argument names stack
|
138
|
+
@current_arg_stack = CurrentArgStack.new
|
139
|
+
|
140
|
+
# Stack of set of variables used in the current pattern
|
141
|
+
@pattern_variables = VariablesStack.new
|
142
|
+
|
143
|
+
# Stack of set of keys used in the current hash in pattern matchinig
|
144
|
+
@pattern_hash_keys = VariablesStack.new
|
145
|
+
|
126
146
|
@lexer = Lexer.new(version)
|
127
147
|
@lexer.diagnostics = @diagnostics
|
128
148
|
@lexer.static_env = @static_env
|
149
|
+
@lexer.context = @context
|
129
150
|
|
130
151
|
@builder = builder
|
131
152
|
@builder.parser = self
|
132
|
-
@context = Context.new
|
133
153
|
|
134
154
|
# Last emitted token
|
135
155
|
@last_token = nil
|
@@ -150,21 +170,24 @@ module Parser
|
|
150
170
|
@lexer.reset
|
151
171
|
@static_env.reset
|
152
172
|
@context.reset
|
173
|
+
@current_arg_stack.reset
|
174
|
+
@pattern_variables.reset
|
175
|
+
@pattern_hash_keys.reset
|
153
176
|
|
154
177
|
self
|
155
178
|
end
|
156
179
|
|
157
180
|
##
|
158
|
-
# Parses a source buffer and returns the AST.
|
181
|
+
# Parses a source buffer and returns the AST, or `nil` in case of a non fatal error.
|
159
182
|
#
|
160
183
|
# @param [Parser::Source::Buffer] source_buffer The source buffer to parse.
|
161
|
-
# @return [Parser::AST::Node]
|
184
|
+
# @return [Parser::AST::Node, nil]
|
162
185
|
#
|
163
186
|
def parse(source_buffer)
|
164
187
|
@lexer.source_buffer = source_buffer
|
165
188
|
@source_buffer = source_buffer
|
166
189
|
|
167
|
-
do_parse
|
190
|
+
do_parse || nil # Force `false` to `nil`, see https://github.com/ruby/racc/pull/136
|
168
191
|
ensure
|
169
192
|
# Don't keep references to the source file.
|
170
193
|
@source_buffer = nil
|
@@ -188,8 +211,9 @@ module Parser
|
|
188
211
|
|
189
212
|
##
|
190
213
|
# Parses a source buffer and returns the AST, the source code comments,
|
191
|
-
# and the tokens emitted by the lexer.
|
192
|
-
#
|
214
|
+
# and the tokens emitted by the lexer. In case of a fatal error, a {SyntaxError}
|
215
|
+
# is raised, unless `recover` is true. In case of an error
|
216
|
+
# (non-fatal or recovered), `nil` is returned instead of the AST, and
|
193
217
|
# comments as well as tokens are only returned up to the location of
|
194
218
|
# the error.
|
195
219
|
#
|