parser 2.6.0.0 → 3.1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
  #