prism 1.7.0 → 1.8.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.
data/lib/prism.rb CHANGED
@@ -20,7 +20,7 @@ module Prism
20
20
  autoload :DSL, "prism/dsl"
21
21
  autoload :InspectVisitor, "prism/inspect_visitor"
22
22
  autoload :LexCompat, "prism/lex_compat"
23
- autoload :LexRipper, "prism/lex_compat"
23
+ autoload :LexRipper, "prism/lex_ripper"
24
24
  autoload :MutationCompiler, "prism/mutation_compiler"
25
25
  autoload :Pack, "prism/pack"
26
26
  autoload :Pattern, "prism/pattern"
data/prism.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "prism"
5
- spec.version = "1.7.0"
5
+ spec.version = "1.8.0"
6
6
  spec.authors = ["Shopify"]
7
7
  spec.email = ["ruby@shopify.com"]
8
8
 
@@ -77,6 +77,7 @@ Gem::Specification.new do |spec|
77
77
  "lib/prism/ffi.rb",
78
78
  "lib/prism/inspect_visitor.rb",
79
79
  "lib/prism/lex_compat.rb",
80
+ "lib/prism/lex_ripper.rb",
80
81
  "lib/prism/mutation_compiler.rb",
81
82
  "lib/prism/node_ext.rb",
82
83
  "lib/prism/node.rb",
@@ -98,15 +99,12 @@ Gem::Specification.new do |spec|
98
99
  "lib/prism/translation.rb",
99
100
  "lib/prism/translation/parser.rb",
100
101
  "lib/prism/translation/parser_current.rb",
101
- "lib/prism/translation/parser33.rb",
102
- "lib/prism/translation/parser34.rb",
103
- "lib/prism/translation/parser35.rb",
104
- "lib/prism/translation/parser40.rb",
105
- "lib/prism/translation/parser41.rb",
102
+ "lib/prism/translation/parser_versions.rb",
106
103
  "lib/prism/translation/parser/builder.rb",
107
104
  "lib/prism/translation/parser/compiler.rb",
108
105
  "lib/prism/translation/parser/lexer.rb",
109
106
  "lib/prism/translation/ripper.rb",
107
+ "lib/prism/translation/ripper/lexer.rb",
110
108
  "lib/prism/translation/ripper/sexp.rb",
111
109
  "lib/prism/translation/ripper/shim.rb",
112
110
  "lib/prism/translation/ruby_parser.rb",
@@ -122,11 +120,7 @@ Gem::Specification.new do |spec|
122
120
  "rbi/prism/reflection.rbi",
123
121
  "rbi/prism/string_query.rbi",
124
122
  "rbi/prism/translation/parser.rbi",
125
- "rbi/prism/translation/parser33.rbi",
126
- "rbi/prism/translation/parser34.rbi",
127
- "rbi/prism/translation/parser35.rbi",
128
- "rbi/prism/translation/parser40.rbi",
129
- "rbi/prism/translation/parser41.rbi",
123
+ "rbi/prism/translation/parser_versions.rbi",
130
124
  "rbi/prism/translation/ripper.rbi",
131
125
  "rbi/prism/visitor.rbi",
132
126
  "sig/prism.rbs",
@@ -0,0 +1,23 @@
1
+ # typed: strict
2
+
3
+ class Prism::Translation::Parser33 < Prism::Translation::Parser
4
+ sig { override.returns(Integer) }
5
+ def version; end
6
+ end
7
+
8
+ class Prism::Translation::Parser34 < Prism::Translation::Parser
9
+ sig { override.returns(Integer) }
10
+ def version; end
11
+ end
12
+
13
+ class Prism::Translation::Parser40 < Prism::Translation::Parser
14
+ sig { override.returns(Integer) }
15
+ def version; end
16
+ end
17
+
18
+ Prism::Translation::Parser35 = Prism::Translation::Parser40
19
+
20
+ class Prism::Translation::Parser40 < Prism::Translation::Parser
21
+ sig { override.returns(Integer) }
22
+ def version; end
23
+ end
data/sig/prism/node.rbs CHANGED
@@ -16,6 +16,7 @@ module Prism
16
16
  def child_nodes: () -> Array[Prism::node?]
17
17
  def comment_targets: () -> Array[Prism::node | Location]
18
18
  def compact_child_nodes: () -> Array[Prism::node]
19
+ def each_child_node: () { (Prism::node) -> void } -> void | () -> Enumerator[Prism::node]
19
20
  def self.fields: () -> Array[Prism::Reflection::Field]
20
21
  def type: () -> Symbol
21
22
  def self.type: () -> Symbol
data/src/prism.c CHANGED
@@ -3962,9 +3962,13 @@ pm_float_node_rational_create(pm_parser_t *parser, const pm_token_t *token) {
3962
3962
  memcpy(digits + (point - start), point + 1, (unsigned long) (end - point - 1));
3963
3963
  pm_integer_parse(&node->numerator, PM_INTEGER_BASE_DEFAULT, digits, digits + length - 1);
3964
3964
 
3965
+ size_t fract_length = 0;
3966
+ for (const uint8_t *fract = point; fract < end; ++fract) {
3967
+ if (*fract != '_') ++fract_length;
3968
+ }
3965
3969
  digits[0] = '1';
3966
- if (end - point > 1) memset(digits + 1, '0', (size_t) (end - point - 1));
3967
- pm_integer_parse(&node->denominator, PM_INTEGER_BASE_DEFAULT, digits, digits + (end - point));
3970
+ if (fract_length > 1) memset(digits + 1, '0', fract_length - 1);
3971
+ pm_integer_parse(&node->denominator, PM_INTEGER_BASE_DEFAULT, digits, digits + fract_length);
3968
3972
  xfree(digits);
3969
3973
 
3970
3974
  pm_integers_reduce(&node->numerator, &node->denominator);
@@ -12422,6 +12426,22 @@ expect1_heredoc_term(pm_parser_t *parser, const uint8_t *ident_start, size_t ide
12422
12426
  }
12423
12427
  }
12424
12428
 
12429
+ /**
12430
+ * A special expect1 that attaches the error to the opening token location
12431
+ * rather than the current position. This is useful for errors about missing
12432
+ * closing tokens, where we want to point to the line with the opening token
12433
+ * (e.g., `def`, `class`, `if`, `{`) rather than the end of the file.
12434
+ */
12435
+ static void
12436
+ expect1_opening(pm_parser_t *parser, pm_token_type_t type, pm_diagnostic_id_t diag_id, const pm_token_t *opening) {
12437
+ if (accept1(parser, type)) return;
12438
+
12439
+ pm_parser_err(parser, opening->start, opening->end, diag_id);
12440
+
12441
+ parser->previous.start = opening->end;
12442
+ parser->previous.type = PM_TOKEN_MISSING;
12443
+ }
12444
+
12425
12445
  static pm_node_t *
12426
12446
  parse_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, bool accepts_label, pm_diagnostic_id_t diag_id, uint16_t depth);
12427
12447
 
@@ -14764,7 +14784,7 @@ parse_block(pm_parser_t *parser, uint16_t depth) {
14764
14784
  statements = UP(parse_statements(parser, PM_CONTEXT_BLOCK_BRACES, (uint16_t) (depth + 1)));
14765
14785
  }
14766
14786
 
14767
- expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_BLOCK_TERM_BRACE);
14787
+ expect1_opening(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_BLOCK_TERM_BRACE, &opening);
14768
14788
  } else {
14769
14789
  if (!match1(parser, PM_TOKEN_KEYWORD_END)) {
14770
14790
  if (!match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_ENSURE)) {
@@ -14779,7 +14799,7 @@ parse_block(pm_parser_t *parser, uint16_t depth) {
14779
14799
  }
14780
14800
  }
14781
14801
 
14782
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_BLOCK_TERM_END);
14802
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_BLOCK_TERM_END, &opening);
14783
14803
  }
14784
14804
 
14785
14805
  pm_constant_id_list_t locals;
@@ -15204,7 +15224,7 @@ parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newl
15204
15224
 
15205
15225
  accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON);
15206
15226
  parser_warn_indentation_mismatch(parser, opening_newline_index, &else_keyword, false, false);
15207
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CONDITIONAL_TERM_ELSE);
15227
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CONDITIONAL_TERM_ELSE, &keyword);
15208
15228
 
15209
15229
  pm_else_node_t *else_node = pm_else_node_create(parser, &else_keyword, else_statements, &parser->previous);
15210
15230
 
@@ -15221,7 +15241,7 @@ parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newl
15221
15241
  }
15222
15242
  } else {
15223
15243
  parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, if_after_else, false);
15224
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CONDITIONAL_TERM);
15244
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CONDITIONAL_TERM, &keyword);
15225
15245
  }
15226
15246
 
15227
15247
  // Set the appropriate end location for all of the nodes in the subtree.
@@ -16202,7 +16222,7 @@ parse_pattern_constant_path(pm_parser_t *parser, pm_constant_id_list_t *captures
16202
16222
  if (!accept1(parser, PM_TOKEN_BRACKET_RIGHT)) {
16203
16223
  inner = parse_pattern(parser, captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET, (uint16_t) (depth + 1));
16204
16224
  accept1(parser, PM_TOKEN_NEWLINE);
16205
- expect1(parser, PM_TOKEN_BRACKET_RIGHT, PM_ERR_PATTERN_TERM_BRACKET);
16225
+ expect1_opening(parser, PM_TOKEN_BRACKET_RIGHT, PM_ERR_PATTERN_TERM_BRACKET, &opening);
16206
16226
  }
16207
16227
 
16208
16228
  closing = parser->previous;
@@ -16214,7 +16234,7 @@ parse_pattern_constant_path(pm_parser_t *parser, pm_constant_id_list_t *captures
16214
16234
  if (!accept1(parser, PM_TOKEN_PARENTHESIS_RIGHT)) {
16215
16235
  inner = parse_pattern(parser, captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN, (uint16_t) (depth + 1));
16216
16236
  accept1(parser, PM_TOKEN_NEWLINE);
16217
- expect1(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_PATTERN_TERM_PAREN);
16237
+ expect1_opening(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_PATTERN_TERM_PAREN, &opening);
16218
16238
  }
16219
16239
 
16220
16240
  closing = parser->previous;
@@ -16594,7 +16614,7 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm
16594
16614
  pm_node_t *inner = parse_pattern(parser, captures, PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET, (uint16_t) (depth + 1));
16595
16615
 
16596
16616
  accept1(parser, PM_TOKEN_NEWLINE);
16597
- expect1(parser, PM_TOKEN_BRACKET_RIGHT, PM_ERR_PATTERN_TERM_BRACKET);
16617
+ expect1_opening(parser, PM_TOKEN_BRACKET_RIGHT, PM_ERR_PATTERN_TERM_BRACKET, &opening);
16598
16618
  pm_token_t closing = parser->previous;
16599
16619
 
16600
16620
  switch (PM_NODE_TYPE(inner)) {
@@ -16672,7 +16692,7 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm
16672
16692
  node = parse_pattern_hash(parser, captures, first_node, (uint16_t) (depth + 1));
16673
16693
 
16674
16694
  accept1(parser, PM_TOKEN_NEWLINE);
16675
- expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_PATTERN_TERM_BRACE);
16695
+ expect1_opening(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_PATTERN_TERM_BRACE, &opening);
16676
16696
  pm_token_t closing = parser->previous;
16677
16697
 
16678
16698
  node->base.location.start = opening.start;
@@ -16798,7 +16818,7 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm
16798
16818
  parser->pattern_matching_newlines = previous_pattern_matching_newlines;
16799
16819
 
16800
16820
  accept1(parser, PM_TOKEN_NEWLINE);
16801
- expect1(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_PATTERN_TERM_PAREN);
16821
+ expect1_opening(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_PATTERN_TERM_PAREN, &lparen);
16802
16822
  return UP(pm_pinned_expression_node_create(parser, expression, &operator, &lparen, &parser->previous));
16803
16823
  }
16804
16824
  default: {
@@ -16896,7 +16916,7 @@ parse_pattern_primitives(pm_parser_t *parser, pm_constant_id_list_t *captures, p
16896
16916
 
16897
16917
  pm_node_t *body = parse_pattern(parser, captures, PM_PARSE_PATTERN_SINGLE, PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN, (uint16_t) (depth + 1));
16898
16918
  accept1(parser, PM_TOKEN_NEWLINE);
16899
- expect1(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_PATTERN_TERM_PAREN);
16919
+ expect1_opening(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_PATTERN_TERM_PAREN, &opening);
16900
16920
  pm_node_t *right = UP(pm_parentheses_node_create(parser, &opening, body, &parser->previous, 0));
16901
16921
 
16902
16922
  if (!alternation) {
@@ -17748,7 +17768,8 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
17748
17768
  pm_accepts_block_stack_push(parser, true);
17749
17769
  parser_lex(parser);
17750
17770
 
17751
- pm_hash_node_t *node = pm_hash_node_create(parser, &parser->previous);
17771
+ pm_token_t opening = parser->previous;
17772
+ pm_hash_node_t *node = pm_hash_node_create(parser, &opening);
17752
17773
 
17753
17774
  if (!match2(parser, PM_TOKEN_BRACE_RIGHT, PM_TOKEN_EOF)) {
17754
17775
  if (current_hash_keys != NULL) {
@@ -17763,7 +17784,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
17763
17784
  }
17764
17785
 
17765
17786
  pm_accepts_block_stack_pop(parser);
17766
- expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_HASH_TERM);
17787
+ expect1_opening(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_HASH_TERM, &opening);
17767
17788
  pm_hash_node_closing_loc_set(node, &parser->previous);
17768
17789
 
17769
17790
  return UP(node);
@@ -18380,7 +18401,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
18380
18401
  }
18381
18402
 
18382
18403
  parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false, false);
18383
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CASE_TERM);
18404
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CASE_TERM, &case_keyword);
18384
18405
 
18385
18406
  if (PM_NODE_TYPE_P(node, PM_CASE_NODE)) {
18386
18407
  pm_case_node_end_keyword_loc_set((pm_case_node_t *) node, &parser->previous);
@@ -18413,7 +18434,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
18413
18434
 
18414
18435
  pm_begin_node_t *begin_node = pm_begin_node_create(parser, &begin_keyword, begin_statements);
18415
18436
  parse_rescues(parser, opening_newline_index, &begin_keyword, begin_node, PM_RESCUES_BEGIN, (uint16_t) (depth + 1));
18416
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_BEGIN_TERM);
18437
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_BEGIN_TERM, &begin_keyword);
18417
18438
 
18418
18439
  begin_node->base.location.end = parser->previous.end;
18419
18440
  pm_begin_node_end_keyword_set(begin_node, &parser->previous);
@@ -18438,7 +18459,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
18438
18459
  pm_token_t opening = parser->previous;
18439
18460
  pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_PREEXE, (uint16_t) (depth + 1));
18440
18461
 
18441
- expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_BEGIN_UPCASE_TERM);
18462
+ expect1_opening(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_BEGIN_UPCASE_TERM, &opening);
18442
18463
  pm_context_t context = parser->current_context->context;
18443
18464
  if ((context != PM_CONTEXT_MAIN) && (context != PM_CONTEXT_PREEXE)) {
18444
18465
  pm_parser_err_token(parser, &keyword, PM_ERR_BEGIN_UPCASE_TOPLEVEL);
@@ -18568,7 +18589,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
18568
18589
  parser_warn_indentation_mismatch(parser, opening_newline_index, &class_keyword, false, false);
18569
18590
  }
18570
18591
 
18571
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CLASS_TERM);
18592
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CLASS_TERM, &class_keyword);
18572
18593
 
18573
18594
  pm_constant_id_list_t locals;
18574
18595
  pm_locals_order(parser, &parser->current_scope->locals, &locals, false);
@@ -18626,7 +18647,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
18626
18647
  parser_warn_indentation_mismatch(parser, opening_newline_index, &class_keyword, false, false);
18627
18648
  }
18628
18649
 
18629
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CLASS_TERM);
18650
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CLASS_TERM, &class_keyword);
18630
18651
 
18631
18652
  if (context_def_p(parser)) {
18632
18653
  pm_parser_err_token(parser, &class_keyword, PM_ERR_CLASS_IN_METHOD);
@@ -18936,7 +18957,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
18936
18957
  pm_accepts_block_stack_pop(parser);
18937
18958
  pm_do_loop_stack_pop(parser);
18938
18959
 
18939
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_DEF_TERM);
18960
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_DEF_TERM, &def_keyword);
18940
18961
  end_keyword = parser->previous;
18941
18962
  }
18942
18963
 
@@ -19030,7 +19051,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
19030
19051
  pm_token_t opening = parser->previous;
19031
19052
  pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_POSTEXE, (uint16_t) (depth + 1));
19032
19053
 
19033
- expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_END_UPCASE_TERM);
19054
+ expect1_opening(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_END_UPCASE_TERM, &opening);
19034
19055
  return UP(pm_post_execution_node_create(parser, &keyword, &opening, statements, &parser->previous));
19035
19056
  }
19036
19057
  case PM_TOKEN_KEYWORD_FALSE:
@@ -19094,7 +19115,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
19094
19115
  }
19095
19116
 
19096
19117
  parser_warn_indentation_mismatch(parser, opening_newline_index, &for_keyword, false, false);
19097
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_FOR_TERM);
19118
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_FOR_TERM, &for_keyword);
19098
19119
 
19099
19120
  return UP(pm_for_node_create(parser, index, collection, statements, &for_keyword, &in_keyword, &do_keyword, &parser->previous));
19100
19121
  }
@@ -19245,7 +19266,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
19245
19266
  pm_locals_order(parser, &parser->current_scope->locals, &locals, false);
19246
19267
 
19247
19268
  pm_parser_scope_pop(parser);
19248
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_MODULE_TERM);
19269
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_MODULE_TERM, &module_keyword);
19249
19270
 
19250
19271
  if (context_def_p(parser)) {
19251
19272
  pm_parser_err_token(parser, &module_keyword, PM_ERR_MODULE_IN_METHOD);
@@ -19311,7 +19332,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
19311
19332
  }
19312
19333
 
19313
19334
  parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false, false);
19314
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_UNTIL_TERM);
19335
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_UNTIL_TERM, &keyword);
19315
19336
 
19316
19337
  return UP(pm_until_node_create(parser, &keyword, &do_keyword, &parser->previous, predicate, statements, 0));
19317
19338
  }
@@ -19345,7 +19366,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
19345
19366
  }
19346
19367
 
19347
19368
  parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false, false);
19348
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_WHILE_TERM);
19369
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_WHILE_TERM, &keyword);
19349
19370
 
19350
19371
  return UP(pm_while_node_create(parser, &keyword, &do_keyword, &parser->previous, predicate, statements, 0));
19351
19372
  }
@@ -20091,7 +20112,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
20091
20112
  }
20092
20113
 
20093
20114
  parser_warn_indentation_mismatch(parser, opening_newline_index, &operator, false, false);
20094
- expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_LAMBDA_TERM_BRACE);
20115
+ expect1_opening(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_LAMBDA_TERM_BRACE, &opening);
20095
20116
  } else {
20096
20117
  expect1(parser, PM_TOKEN_KEYWORD_DO, PM_ERR_LAMBDA_OPEN);
20097
20118
  opening = parser->previous;
@@ -20109,7 +20130,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
20109
20130
  parser_warn_indentation_mismatch(parser, opening_newline_index, &operator, false, false);
20110
20131
  }
20111
20132
 
20112
- expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_LAMBDA_TERM_END);
20133
+ expect1_opening(parser, PM_TOKEN_KEYWORD_END, PM_ERR_LAMBDA_TERM_END, &operator);
20113
20134
  }
20114
20135
 
20115
20136
  pm_constant_id_list_t locals;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prism
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
@@ -80,6 +80,7 @@ files:
80
80
  - lib/prism/ffi.rb
81
81
  - lib/prism/inspect_visitor.rb
82
82
  - lib/prism/lex_compat.rb
83
+ - lib/prism/lex_ripper.rb
83
84
  - lib/prism/mutation_compiler.rb
84
85
  - lib/prism/node.rb
85
86
  - lib/prism/node_ext.rb
@@ -103,13 +104,10 @@ files:
103
104
  - lib/prism/translation/parser/builder.rb
104
105
  - lib/prism/translation/parser/compiler.rb
105
106
  - lib/prism/translation/parser/lexer.rb
106
- - lib/prism/translation/parser33.rb
107
- - lib/prism/translation/parser34.rb
108
- - lib/prism/translation/parser35.rb
109
- - lib/prism/translation/parser40.rb
110
- - lib/prism/translation/parser41.rb
111
107
  - lib/prism/translation/parser_current.rb
108
+ - lib/prism/translation/parser_versions.rb
112
109
  - lib/prism/translation/ripper.rb
110
+ - lib/prism/translation/ripper/lexer.rb
113
111
  - lib/prism/translation/ripper/sexp.rb
114
112
  - lib/prism/translation/ripper/shim.rb
115
113
  - lib/prism/translation/ruby_parser.rb
@@ -125,11 +123,7 @@ files:
125
123
  - rbi/prism/reflection.rbi
126
124
  - rbi/prism/string_query.rbi
127
125
  - rbi/prism/translation/parser.rbi
128
- - rbi/prism/translation/parser33.rbi
129
- - rbi/prism/translation/parser34.rbi
130
- - rbi/prism/translation/parser35.rbi
131
- - rbi/prism/translation/parser40.rbi
132
- - rbi/prism/translation/parser41.rbi
126
+ - rbi/prism/translation/parser_versions.rbi
133
127
  - rbi/prism/translation/ripper.rbi
134
128
  - rbi/prism/visitor.rbi
135
129
  - sig/prism.rbs
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
- # :markup: markdown
3
-
4
- module Prism
5
- module Translation
6
- # This class is the entry-point for Ruby 3.3 of `Prism::Translation::Parser`.
7
- class Parser33 < Parser
8
- def version # :nodoc:
9
- 33
10
- end
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
- # :markup: markdown
3
-
4
- module Prism
5
- module Translation
6
- # This class is the entry-point for Ruby 3.4 of `Prism::Translation::Parser`.
7
- class Parser34 < Parser
8
- def version # :nodoc:
9
- 34
10
- end
11
- end
12
- end
13
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
- # :markup: markdown
3
-
4
- module Prism
5
- module Translation
6
- Parser35 = Parser40 # :nodoc:
7
- end
8
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
- # :markup: markdown
3
-
4
- module Prism
5
- module Translation
6
- # This class is the entry-point for Ruby 4.0 of `Prism::Translation::Parser`.
7
- class Parser40 < Parser
8
- def version # :nodoc:
9
- 40
10
- end
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
- # :markup: markdown
3
-
4
- module Prism
5
- module Translation
6
- # This class is the entry-point for Ruby 4.1 of `Prism::Translation::Parser`.
7
- class Parser41 < Parser
8
- def version # :nodoc:
9
- 41
10
- end
11
- end
12
- end
13
- end
@@ -1,6 +0,0 @@
1
- # typed: strict
2
-
3
- class Prism::Translation::Parser33 < Prism::Translation::Parser
4
- sig { override.returns(Integer) }
5
- def version; end
6
- end
@@ -1,6 +0,0 @@
1
- # typed: strict
2
-
3
- class Prism::Translation::Parser34 < Prism::Translation::Parser
4
- sig { override.returns(Integer) }
5
- def version; end
6
- end
@@ -1,4 +0,0 @@
1
- # typed: strict
2
-
3
- class Prism::Translation::Parser35 < Prism::Translation::Parser
4
- end
@@ -1,6 +0,0 @@
1
- # typed: strict
2
-
3
- class Prism::Translation::Parser40 < Prism::Translation::Parser
4
- sig { override.returns(Integer) }
5
- def version; end
6
- end
@@ -1,6 +0,0 @@
1
- # typed: strict
2
-
3
- class Prism::Translation::Parser40 < Prism::Translation::Parser
4
- sig { override.returns(Integer) }
5
- def version; end
6
- end