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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/lib/parser/all.rb +3 -0
  3. data/lib/parser/ast/processor.rb +48 -1
  4. data/lib/parser/base.rb +30 -6
  5. data/lib/parser/builders/default.rb +670 -38
  6. data/lib/parser/context.rb +24 -26
  7. data/lib/parser/current.rb +36 -9
  8. data/lib/parser/current_arg_stack.rb +46 -0
  9. data/lib/parser/diagnostic/engine.rb +1 -2
  10. data/lib/parser/diagnostic.rb +1 -1
  11. data/lib/parser/lexer/dedenter.rb +58 -49
  12. data/lib/parser/lexer/explanation.rb +1 -1
  13. data/lib/parser/lexer.rb +13837 -11893
  14. data/lib/parser/macruby.rb +2544 -2489
  15. data/lib/parser/max_numparam_stack.rb +56 -0
  16. data/lib/parser/messages.rb +78 -44
  17. data/lib/parser/meta.rb +13 -3
  18. data/lib/parser/ruby18.rb +2313 -2259
  19. data/lib/parser/ruby19.rb +2537 -2488
  20. data/lib/parser/ruby20.rb +2724 -2673
  21. data/lib/parser/ruby21.rb +2766 -2727
  22. data/lib/parser/ruby22.rb +2683 -2628
  23. data/lib/parser/ruby23.rb +2796 -2755
  24. data/lib/parser/ruby24.rb +2812 -2771
  25. data/lib/parser/ruby25.rb +2703 -2670
  26. data/lib/parser/ruby26.rb +2794 -2747
  27. data/lib/parser/ruby27.rb +7914 -0
  28. data/lib/parser/ruby28.rb +8047 -0
  29. data/lib/parser/ruby30.rb +8096 -0
  30. data/lib/parser/ruby31.rb +8354 -0
  31. data/lib/parser/rubymotion.rb +2527 -2485
  32. data/lib/parser/runner/ruby_parse.rb +2 -2
  33. data/lib/parser/runner/ruby_rewrite.rb +2 -2
  34. data/lib/parser/runner.rb +36 -2
  35. data/lib/parser/source/buffer.rb +53 -28
  36. data/lib/parser/source/comment/associator.rb +31 -8
  37. data/lib/parser/source/comment.rb +14 -1
  38. data/lib/parser/source/map/method_definition.rb +25 -0
  39. data/lib/parser/source/range.rb +19 -3
  40. data/lib/parser/source/tree_rewriter/action.rb +137 -28
  41. data/lib/parser/source/tree_rewriter.rb +144 -14
  42. data/lib/parser/static_environment.rb +23 -0
  43. data/lib/parser/tree_rewriter.rb +3 -3
  44. data/lib/parser/variables_stack.rb +36 -0
  45. data/lib/parser/version.rb +1 -1
  46. data/lib/parser.rb +4 -0
  47. data/parser.gemspec +12 -19
  48. metadata +34 -99
  49. data/.gitignore +0 -32
  50. data/.travis.yml +0 -45
  51. data/.yardopts +0 -21
  52. data/CHANGELOG.md +0 -943
  53. data/CONTRIBUTING.md +0 -17
  54. data/Gemfile +0 -10
  55. data/README.md +0 -301
  56. data/Rakefile +0 -165
  57. data/ci/run_rubocop_specs +0 -14
  58. data/doc/AST_FORMAT.md +0 -1735
  59. data/doc/CUSTOMIZATION.md +0 -37
  60. data/doc/INTERNALS.md +0 -21
  61. data/doc/css/.gitkeep +0 -0
  62. data/doc/css/common.css +0 -68
  63. data/lib/parser/lexer.rl +0 -2383
  64. data/lib/parser/macruby.y +0 -2198
  65. data/lib/parser/ruby18.y +0 -1934
  66. data/lib/parser/ruby19.y +0 -2175
  67. data/lib/parser/ruby20.y +0 -2353
  68. data/lib/parser/ruby21.y +0 -2357
  69. data/lib/parser/ruby22.y +0 -2364
  70. data/lib/parser/ruby23.y +0 -2370
  71. data/lib/parser/ruby24.y +0 -2408
  72. data/lib/parser/ruby25.y +0 -2405
  73. data/lib/parser/ruby26.y +0 -2413
  74. data/lib/parser/rubymotion.y +0 -2182
  75. data/test/bug_163/fixtures/input.rb +0 -5
  76. data/test/bug_163/fixtures/output.rb +0 -5
  77. data/test/bug_163/rewriter.rb +0 -20
  78. data/test/helper.rb +0 -52
  79. data/test/parse_helper.rb +0 -315
  80. data/test/racc_coverage_helper.rb +0 -133
  81. data/test/test_base.rb +0 -31
  82. data/test/test_current.rb +0 -27
  83. data/test/test_diagnostic.rb +0 -96
  84. data/test/test_diagnostic_engine.rb +0 -62
  85. data/test/test_encoding.rb +0 -99
  86. data/test/test_lexer.rb +0 -3543
  87. data/test/test_lexer_stack_state.rb +0 -78
  88. data/test/test_parse_helper.rb +0 -80
  89. data/test/test_parser.rb +0 -7087
  90. data/test/test_runner_rewrite.rb +0 -47
  91. data/test/test_source_buffer.rb +0 -162
  92. data/test/test_source_comment.rb +0 -36
  93. data/test/test_source_comment_associator.rb +0 -367
  94. data/test/test_source_map.rb +0 -15
  95. data/test/test_source_range.rb +0 -172
  96. data/test/test_source_rewriter.rb +0 -541
  97. data/test/test_source_rewriter_action.rb +0 -46
  98. data/test/test_source_tree_rewriter.rb +0 -173
  99. data/test/test_static_environment.rb +0 -45
  100. data/test/using_tree_rewriter/fixtures/input.rb +0 -3
  101. data/test/using_tree_rewriter/fixtures/output.rb +0 -3
  102. 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: c4603be64062f43f204650161874219f6a1250d81dd11705ca39482e7b70e968
4
- data.tar.gz: 4ac43b4edcd13c7ac53d801533492999a5786138f485c9d06b9fa5329635790a
3
+ metadata.gz: 7ed45256e09de6d92098e12e73a655fe9d4f35518f573984bf1d92ac87ae8ded
4
+ data.tar.gz: 68ee7fca4f6d1794e2fb160552b01b983466cd482cad8783ba5f7b1466d0e70b
5
5
  SHA512:
6
- metadata.gz: 770c2d3e8eca4f64081b10d6053e9576ec795fdb0605b5282dfd0b312fa2de71e04478177a3458a2e0fa36d1f484654f72b642658df91fa997388bff0ef07af3
7
- data.tar.gz: 81fecd3087121fbee6e26dfc09d9cabc5449f237379e514dc88852fd85d1dd6f6189435fca1817409341b4eb505c6016afefb85e48c4170f930223480a85e8de
6
+ metadata.gz: 2f8f0785aba15f53c97b046aa5155ffeff4063b12fb611612bd7c3b94affb282487b5aad5ca783d2b928a91333db6e572a2a8a466fe9c7f5716354cb23644471
7
+ data.tar.gz: b8ecfc04463142cffb2aaad920e95e11257a1a6f7587bf439620b73e59102f15850c413dc807b613379678de9878aa2d941f3fa65ab20716f6be6d80fcf03299
data/lib/parser/all.rb CHANGED
@@ -9,3 +9,6 @@ require 'parser/ruby23'
9
9
  require 'parser/ruby24'
10
10
  require 'parser/ruby25'
11
11
  require 'parser/ruby26'
12
+ require 'parser/ruby27'
13
+ require 'parser/ruby30'
14
+ require 'parser/ruby31'
@@ -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 on_procarg0 process_argument_node
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. If `recover` is true and a fatal
192
- # {SyntaxError} is encountered, `nil` is returned instead of the AST, and
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
  #