summaryrefslogtreecommitdiff
path: root/test/prism/errors
diff options
context:
space:
mode:
Diffstat (limited to 'test/prism/errors')
-rw-r--r--test/prism/errors/1_2_3.txt11
-rw-r--r--test/prism/errors/3.3-3.3/circular_parameters.txt12
-rw-r--r--test/prism/errors/3.3-3.4/leading_logical.txt34
-rw-r--r--test/prism/errors/3.3-3.4/private_endless_method.txt3
-rw-r--r--test/prism/errors/3.4/block_args_in_array_assignment.txt3
-rw-r--r--test/prism/errors/3.4/dont_allow_return_inside_sclass_body.txt3
-rw-r--r--test/prism/errors/3.4/it_with_ordinary_parameter.txt3
-rw-r--r--test/prism/errors/3.4/keyword_args_in_array_assignment.txt3
-rw-r--r--test/prism/errors/aliasing_global_variable_with_global_number_variable.txt3
-rw-r--r--test/prism/errors/aliasing_global_variable_with_non_global_variable.txt3
-rw-r--r--test/prism/errors/aliasing_non_global_variable_with_global_variable.txt3
-rw-r--r--test/prism/errors/alnum_delimiters.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_2.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_3.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_4.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_5.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_6.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_7.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_8.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_9.txt3
-rw-r--r--test/prism/errors/amperand_dot_after_endless_range.txt3
-rw-r--r--test/prism/errors/argument_after_ellipsis.txt3
-rw-r--r--test/prism/errors/argument_forwarding_only_effects_its_own_internals.txt3
-rw-r--r--test/prism/errors/argument_forwarding_when_parent_is_not_forwarding.txt3
-rw-r--r--test/prism/errors/arguments_after_block.txt17
-rw-r--r--test/prism/errors/arguments_binding_power_for_and.txt5
-rw-r--r--test/prism/errors/arguments_invalid_comma.txt4
-rw-r--r--test/prism/errors/arguments_splat_after_star_star.txt3
-rw-r--r--test/prism/errors/array_invalid_comma.txt4
-rw-r--r--test/prism/errors/array_with_double_commas.txt3
-rw-r--r--test/prism/errors/assign_to_numbered_parameter.txt11
-rw-r--r--test/prism/errors/bad_arguments.txt6
-rw-r--r--test/prism/errors/begin_at_toplevel.txt3
-rw-r--r--test/prism/errors/binary_range_with_left_unary_range.txt8
-rw-r--r--test/prism/errors/block_arg_and_block.txt3
-rw-r--r--test/prism/errors/block_args_with_endless_def.txt5
-rw-r--r--test/prism/errors/block_beginning_with_brace_and_ending_with_end.txt5
-rw-r--r--test/prism/errors/break_1.txt4
-rw-r--r--test/prism/errors/break_1_2_3.txt8
-rw-r--r--test/prism/errors/call_with_block_and_write.txt4
-rw-r--r--test/prism/errors/call_with_block_operator_write.txt4
-rw-r--r--test/prism/errors/call_with_block_or_write.txt4
-rw-r--r--test/prism/errors/cannot_assign_to_a_reserved_numbered_parameter.txt14
-rw-r--r--test/prism/errors/case_without_clauses.txt4
-rw-r--r--test/prism/errors/case_without_when_clauses_errors_on_else_clause.txt5
-rw-r--r--test/prism/errors/check_value_expression.txt20
-rw-r--r--test/prism/errors/class_definition_in_method_body.txt3
-rw-r--r--test/prism/errors/class_definition_in_method_defs.txt7
-rw-r--r--test/prism/errors/class_name.txt3
-rw-r--r--test/prism/errors/command_call_in.txt5
-rw-r--r--test/prism/errors/command_calls.txt10
-rw-r--r--test/prism/errors/command_calls_10.txt3
-rw-r--r--test/prism/errors/command_calls_11.txt3
-rw-r--r--test/prism/errors/command_calls_12.txt3
-rw-r--r--test/prism/errors/command_calls_13.txt3
-rw-r--r--test/prism/errors/command_calls_14.txt3
-rw-r--r--test/prism/errors/command_calls_15.txt3
-rw-r--r--test/prism/errors/command_calls_16.txt3
-rw-r--r--test/prism/errors/command_calls_17.txt5
-rw-r--r--test/prism/errors/command_calls_18.txt3
-rw-r--r--test/prism/errors/command_calls_19.txt3
-rw-r--r--test/prism/errors/command_calls_2.txt6
-rw-r--r--test/prism/errors/command_calls_20.txt3
-rw-r--r--test/prism/errors/command_calls_21.txt5
-rw-r--r--test/prism/errors/command_calls_22.txt3
-rw-r--r--test/prism/errors/command_calls_23.txt3
-rw-r--r--test/prism/errors/command_calls_24.txt5
-rw-r--r--test/prism/errors/command_calls_25.txt8
-rw-r--r--test/prism/errors/command_calls_26.txt3
-rw-r--r--test/prism/errors/command_calls_27.txt3
-rw-r--r--test/prism/errors/command_calls_28.txt3
-rw-r--r--test/prism/errors/command_calls_29.txt3
-rw-r--r--test/prism/errors/command_calls_3.txt3
-rw-r--r--test/prism/errors/command_calls_30.txt3
-rw-r--r--test/prism/errors/command_calls_31.txt17
-rw-r--r--test/prism/errors/command_calls_32.txt19
-rw-r--r--test/prism/errors/command_calls_33.txt6
-rw-r--r--test/prism/errors/command_calls_34.txt24
-rw-r--r--test/prism/errors/command_calls_35.txt46
-rw-r--r--test/prism/errors/command_calls_4.txt3
-rw-r--r--test/prism/errors/command_calls_5.txt3
-rw-r--r--test/prism/errors/command_calls_6.txt6
-rw-r--r--test/prism/errors/command_calls_7.txt6
-rw-r--r--test/prism/errors/command_calls_8.txt6
-rw-r--r--test/prism/errors/command_calls_9.txt6
-rw-r--r--test/prism/errors/conditional_predicate_closed.txt6
-rw-r--r--test/prism/errors/constant_assignment_in_method.txt3
-rw-r--r--test/prism/errors/constant_path_with_invalid_token_after.txt4
-rw-r--r--test/prism/errors/content_after_unterminated_heredoc.txt4
-rw-r--r--test/prism/errors/cr_without_lf_in_percent_expression.txt3
-rw-r--r--test/prism/errors/def_ivar.txt3
-rw-r--r--test/prism/errors/def_with_empty_expression_receiver.txt3
-rw-r--r--test/prism/errors/def_with_expression_receiver_and_no_identifier.txt4
-rw-r--r--test/prism/errors/def_with_multiple_statements_receiver.txt10
-rw-r--r--test/prism/errors/def_with_optional_splat.txt6
-rw-r--r--test/prism/errors/defined_empty.txt3
-rw-r--r--test/prism/errors/defining_numbered_parameter.txt3
-rw-r--r--test/prism/errors/defining_numbered_parameter_2.txt3
-rw-r--r--test/prism/errors/defs_endless_method.txt12
-rw-r--r--test/prism/errors/destroy_call_operator_write_arguments.txt11
-rw-r--r--test/prism/errors/do_not_allow_characters_other_than_0_9_a_f_and_A_F_in_u_Unicode_character_notation.txt4
-rw-r--r--test/prism/errors/do_not_allow_forward_arguments_in_blocks.txt3
-rw-r--r--test/prism/errors/do_not_allow_forward_arguments_in_lambda_literals.txt3
-rw-r--r--test/prism/errors/do_not_allow_more_than_6_hexadecimal_digits_in_u_Unicode_character_notation.txt3
-rw-r--r--test/prism/errors/do_not_allow_multiple_codepoints_in_a_single_character_literal.txt3
-rw-r--r--test/prism/errors/do_not_allow_trailing_commas_in_lambda_parameters.txt3
-rw-r--r--test/prism/errors/do_not_allow_trailing_commas_in_method_parameters.txt3
-rw-r--r--test/prism/errors/dont_allow_return_inside_class_body.txt3
-rw-r--r--test/prism/errors/dont_allow_return_inside_module_body.txt3
-rw-r--r--test/prism/errors/dont_allow_setting_to_back_and_nth_reference.txt7
-rw-r--r--test/prism/errors/double_arguments_forwarding.txt4
-rw-r--r--test/prism/errors/double_scope_numbered_parameters.txt3
-rw-r--r--test/prism/errors/double_scope_repeated_numbered_parameters.txt3
-rw-r--r--test/prism/errors/double_splat_followed_by_splat_argument.txt3
-rw-r--r--test/prism/errors/double_splat_with_double_commas.txt3
-rw-r--r--test/prism/errors/duplicate_pattern_capture.txt17
-rw-r--r--test/prism/errors/duplicate_pattern_hash_key.txt4
-rw-r--r--test/prism/errors/duplicate_pattern_hash_key_2.txt3
-rw-r--r--test/prism/errors/duplicated_parameter_names.txt3
-rw-r--r--test/prism/errors/duplicated_parameter_names_2.txt3
-rw-r--r--test/prism/errors/duplicated_parameter_names_3.txt3
-rw-r--r--test/prism/errors/duplicated_parameter_names_4.txt3
-rw-r--r--test/prism/errors/duplicated_parameter_names_5.txt3
-rw-r--r--test/prism/errors/dynamic_label_pattern.txt3
-rw-r--r--test/prism/errors/ellipsis_in_no_paren_call.txt3
-rw-r--r--test/prism/errors/endless_method_command_call.txt3
-rw-r--r--test/prism/errors/endless_method_command_call_parameters.txt27
-rw-r--r--test/prism/errors/escape_unicode_curly_whitespace.txt5
-rw-r--r--test/prism/errors/for_loop_delimiter.txt3
-rw-r--r--test/prism/errors/for_loops_index_missing.txt5
-rw-r--r--test/prism/errors/for_loops_only_end.txt6
-rw-r--r--test/prism/errors/forwarding_arg_after_keyword_rest.txt3
-rw-r--r--test/prism/errors/forwarding_arg_and_block.txt3
-rw-r--r--test/prism/errors/heredoc_percent_q_newline_delimiter.txt11
-rw-r--r--test/prism/errors/heredoc_unterminated.txt9
-rw-r--r--test/prism/errors/incomplete_instance_var_string.txt4
-rw-r--r--test/prism/errors/index_call_with_block_and_write.txt5
-rw-r--r--test/prism/errors/index_call_with_block_operator_write.txt5
-rw-r--r--test/prism/errors/index_call_with_block_or_write.txt5
-rw-r--r--test/prism/errors/infix_after_label.txt6
-rw-r--r--test/prism/errors/interpolated_regular_expression_with_unknown_regexp_options.txt3
-rw-r--r--test/prism/errors/invalid_global_variable_write.txt4
-rw-r--r--test/prism/errors/invalid_hex_escape.txt3
-rw-r--r--test/prism/errors/invalid_multi_target.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_10.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_11.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_12.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_13.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_14.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_15.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_16.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_17.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_18.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_19.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_2.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_20.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_3.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_4.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_5.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_6.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_7.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_8.txt4
-rw-r--r--test/prism/errors/invalid_multi_target_9.txt4
-rw-r--r--test/prism/errors/invalid_number_underscores.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_10.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_11.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_12.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_2.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_3.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_4.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_5.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_6.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_7.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_8.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_9.txt3
-rw-r--r--test/prism/errors/invalid_operator_write_dot.txt3
-rw-r--r--test/prism/errors/invalid_operator_write_fcall.txt3
-rw-r--r--test/prism/errors/invalid_splat.txt4
-rw-r--r--test/prism/errors/keywords_parameters_before_required_parameters.txt4
-rw-r--r--test/prism/errors/label_in_interpolated_string.txt14
-rw-r--r--test/prism/errors/label_in_parentheses.txt3
-rw-r--r--test/prism/errors/loop_conditional_is_closed.txt4
-rw-r--r--test/prism/errors/match_plus.txt7
-rw-r--r--test/prism/errors/match_predicate_after_and_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_predicate_after_and_with_opreator.txt3
-rw-r--r--test/prism/errors/match_predicate_after_or_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_predicate_after_or_with_opreator.txt3
-rw-r--r--test/prism/errors/match_predicate_after_rescue_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_predicate_after_rescue_with_opreator.txt3
-rw-r--r--test/prism/errors/match_required_after_and_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_required_after_and_with_opreator.txt3
-rw-r--r--test/prism/errors/match_required_after_or_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_required_after_or_with_opreator.txt3
-rw-r--r--test/prism/errors/match_required_after_rescue_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_required_after_rescue_with_opreator.txt3
-rw-r--r--test/prism/errors/method_parameters_after_arguments_forwarding.txt4
-rw-r--r--test/prism/errors/method_parameters_after_block.txt4
-rw-r--r--test/prism/errors/method_with_arguments_after_anonymous_block.txt4
-rw-r--r--test/prism/errors/missing_terminator_in_parentheses.txt3
-rw-r--r--test/prism/errors/module_definition_in_method_body.txt3
-rw-r--r--test/prism/errors/module_definition_in_method_body_within_block.txt7
-rw-r--r--test/prism/errors/module_definition_in_method_defs.txt7
-rw-r--r--test/prism/errors/module_name_recoverable.txt4
-rw-r--r--test/prism/errors/multi_target_parens.txt19
-rw-r--r--test/prism/errors/multi_target_star.txt17
-rw-r--r--test/prism/errors/multiple_error_in_parameters_order.txt5
-rw-r--r--test/prism/errors/next_1.txt4
-rw-r--r--test/prism/errors/next_1_2_3.txt8
-rw-r--r--test/prism/errors/non_assoc_equality.txt25
-rw-r--r--test/prism/errors/non_assoc_range.txt5
-rw-r--r--test/prism/errors/numbered_and_write.txt3
-rw-r--r--test/prism/errors/numbered_operator_write.txt3
-rw-r--r--test/prism/errors/numbered_or_write.txt3
-rw-r--r--test/prism/errors/numbered_parameters_in_block_arguments.txt3
-rw-r--r--test/prism/errors/optional_block_parameters_with_unary_operator.txt3
-rw-r--r--test/prism/errors/optional_block_parameters_with_unary_operator_2.txt3
-rw-r--r--test/prism/errors/optional_block_parameters_with_unary_operator_3.txt3
-rw-r--r--test/prism/errors/optional_block_parameters_with_unary_operator_4.txt3
-rw-r--r--test/prism/errors/parameter_name_ending_with_bang_or_question_mark.txt4
-rw-r--r--test/prism/errors/parameters_invalid_comma.txt4
-rw-r--r--test/prism/errors/pattern-capture-in-alt-array.txt4
-rw-r--r--test/prism/errors/pattern-capture-in-alt-hash.txt3
-rw-r--r--test/prism/errors/pattern-capture-in-alt-name.txt3
-rw-r--r--test/prism/errors/pattern-capture-in-alt-top.txt4
-rw-r--r--test/prism/errors/pattern_arithmetic_expressions.txt3
-rw-r--r--test/prism/errors/pattern_match_implicit_rest.txt3
-rw-r--r--test/prism/errors/pattern_string_key.txt8
-rw-r--r--test/prism/errors/pre_execution_context.txt4
-rw-r--r--test/prism/errors/pre_execution_missing_brace.txt3
-rw-r--r--test/prism/errors/range_and_bin_op.txt5
-rw-r--r--test/prism/errors/range_and_bin_op_2.txt5
-rw-r--r--test/prism/errors/range_and_bin_op_3.txt3
-rw-r--r--test/prism/errors/range_and_bin_op_4.txt5
-rw-r--r--test/prism/errors/range_and_bin_op_5.txt6
-rw-r--r--test/prism/errors/range_and_bin_op_6.txt3
-rw-r--r--test/prism/errors/range_and_bin_op_7.txt3
-rw-r--r--test/prism/errors/range_and_bin_op_8.txt4
-rw-r--r--test/prism/errors/range_doubled.txt3
-rw-r--r--test/prism/errors/rational_number_with_exponential_portion.txt4
-rw-r--r--test/prism/errors/regexp_unicode_too_short.txt4
-rw-r--r--test/prism/errors/regular_expression_with_unknown_regexp_options.txt3
-rw-r--r--test/prism/errors/repeated_parameter_name_in_destructured_params.txt3
-rw-r--r--test/prism/errors/rest_keywords_parameters_before_required_parameters.txt4
-rw-r--r--test/prism/errors/return_1.txt3
-rw-r--r--test/prism/errors/return_1_2_3.txt7
-rw-r--r--test/prism/errors/returning_to_optional_parameters_multiple_times.txt4
-rw-r--r--test/prism/errors/semicolon_after_inheritance_operator.txt3
-rw-r--r--test/prism/errors/setter_method_cannot_be_defined_in_an_endless_method_definition.txt6
-rw-r--r--test/prism/errors/shadow_args_in_block.txt3
-rw-r--r--test/prism/errors/shadow_args_in_lambda.txt5
-rw-r--r--test/prism/errors/singleton_class_delimiter.txt3
-rw-r--r--test/prism/errors/singleton_method_for_literals.txt39
-rw-r--r--test/prism/errors/splat_argument_after_keyword_argument.txt3
-rw-r--r--test/prism/errors/statement_at_non_statement.txt9
-rw-r--r--test/prism/errors/statement_operators.txt25
-rw-r--r--test/prism/errors/switching_to_named_arguments_twice.txt5
-rw-r--r--test/prism/errors/switching_to_optional_arguments_twice.txt5
-rw-r--r--test/prism/errors/symbol_in_hash.txt3
-rw-r--r--test/prism/errors/symbol_in_keyword_parameter.txt3
-rw-r--r--test/prism/errors/targeting_numbered_parameter.txt3
-rw-r--r--test/prism/errors/top_level_constant_starting_with_downcased_identifier.txt4
-rw-r--r--test/prism/errors/top_level_constant_with_downcased_identifier.txt4
-rw-r--r--test/prism/errors/trailing_comma_after_block.txt3
-rw-r--r--test/prism/errors/trailing_comma_in_calls.txt3
-rw-r--r--test/prism/errors/unexpected_block.txt3
-rw-r--r--test/prism/errors/unterminated_W_list.txt3
-rw-r--r--test/prism/errors/unterminated_argument_expression.txt5
-rw-r--r--test/prism/errors/unterminated_begin.txt4
-rw-r--r--test/prism/errors/unterminated_begin_upcase.txt4
-rw-r--r--test/prism/errors/unterminated_block.txt4
-rw-r--r--test/prism/errors/unterminated_block_do_end.txt4
-rw-r--r--test/prism/errors/unterminated_class.txt4
-rw-r--r--test/prism/errors/unterminated_def.txt5
-rw-r--r--test/prism/errors/unterminated_embdoc.txt3
-rw-r--r--test/prism/errors/unterminated_embdoc_2.txt3
-rw-r--r--test/prism/errors/unterminated_empty_string.txt3
-rw-r--r--test/prism/errors/unterminated_end_upcase.txt4
-rw-r--r--test/prism/errors/unterminated_for.txt5
-rw-r--r--test/prism/errors/unterminated_global_variable.txt3
-rw-r--r--test/prism/errors/unterminated_global_variable_2.txt3
-rw-r--r--test/prism/errors/unterminated_i_list.txt3
-rw-r--r--test/prism/errors/unterminated_if.txt5
-rw-r--r--test/prism/errors/unterminated_if_else.txt5
-rw-r--r--test/prism/errors/unterminated_interpolated_string.txt3
-rw-r--r--test/prism/errors/unterminated_interpolated_symbol.txt3
-rw-r--r--test/prism/errors/unterminated_lambda_brace.txt4
-rw-r--r--test/prism/errors/unterminated_method_parameters.txt3
-rw-r--r--test/prism/errors/unterminated_module.txt4
-rw-r--r--test/prism/errors/unterminated_parenthesized_expression.txt4
-rw-r--r--test/prism/errors/unterminated_pattern_bracket.txt7
-rw-r--r--test/prism/errors/unterminated_pattern_paren.txt7
-rw-r--r--test/prism/errors/unterminated_regular_expression.txt3
-rw-r--r--test/prism/errors/unterminated_regular_expression_with_heredoc.txt4
-rw-r--r--test/prism/errors/unterminated_s_symbol.txt3
-rw-r--r--test/prism/errors/unterminated_string.txt3
-rw-r--r--test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt3
-rw-r--r--test/prism/errors/unterminated_until.txt5
-rw-r--r--test/prism/errors/unterminated_xstring.txt3
-rw-r--r--test/prism/errors/void_value_expression_in_arguments.txt17
-rw-r--r--test/prism/errors/void_value_expression_in_array.txt15
-rw-r--r--test/prism/errors/void_value_expression_in_assignment.txt9
-rw-r--r--test/prism/errors/void_value_expression_in_begin_statement.txt21
-rw-r--r--test/prism/errors/void_value_expression_in_binary_call.txt11
-rw-r--r--test/prism/errors/void_value_expression_in_call.txt11
-rw-r--r--test/prism/errors/void_value_expression_in_constant_path.txt5
-rw-r--r--test/prism/errors/void_value_expression_in_def.txt10
-rw-r--r--test/prism/errors/void_value_expression_in_expression.txt19
-rw-r--r--test/prism/errors/void_value_expression_in_hash.txt9
-rw-r--r--test/prism/errors/void_value_expression_in_modifier.txt13
-rw-r--r--test/prism/errors/void_value_expression_in_statement.txt26
-rw-r--r--test/prism/errors/void_value_expression_in_unary_call.txt5
-rw-r--r--test/prism/errors/while_endless_method.txt5
-rw-r--r--test/prism/errors/writing_numbered_parameter.txt3
-rw-r--r--test/prism/errors/xstring_concat.txt5
314 files changed, 1677 insertions, 0 deletions
diff --git a/test/prism/errors/1_2_3.txt b/test/prism/errors/1_2_3.txt
new file mode 100644
index 0000000000..345452911f
--- /dev/null
+++ b/test/prism/errors/1_2_3.txt
@@ -0,0 +1,11 @@
+(1, 2, 3)
+ ^ unexpected ',', expecting end-of-input
+ ^ unexpected ',', ignoring it
+ ^ expected a matching `)`
+ ^ unexpected ',', expecting end-of-input
+ ^ unexpected ',', ignoring it
+ ^ unexpected ',', expecting end-of-input
+ ^ unexpected ',', ignoring it
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
diff --git a/test/prism/errors/3.3-3.3/circular_parameters.txt b/test/prism/errors/3.3-3.3/circular_parameters.txt
new file mode 100644
index 0000000000..ef9642b075
--- /dev/null
+++ b/test/prism/errors/3.3-3.3/circular_parameters.txt
@@ -0,0 +1,12 @@
+def foo(bar = bar) = 42
+ ^~~ circular argument reference - bar
+
+def foo(bar: bar) = 42
+ ^~~ circular argument reference - bar
+
+proc { |foo = foo| }
+ ^~~ circular argument reference - foo
+
+proc { |foo: foo| }
+ ^~~ circular argument reference - foo
+
diff --git a/test/prism/errors/3.3-3.4/leading_logical.txt b/test/prism/errors/3.3-3.4/leading_logical.txt
new file mode 100644
index 0000000000..2a702e281d
--- /dev/null
+++ b/test/prism/errors/3.3-3.4/leading_logical.txt
@@ -0,0 +1,34 @@
+1
+&& 2
+^~ unexpected '&&', ignoring it
+&& 3
+^~ unexpected '&&', ignoring it
+
+1
+|| 2
+^ unexpected '|', ignoring it
+ ^ unexpected '|', ignoring it
+|| 3
+^ unexpected '|', ignoring it
+ ^ unexpected '|', ignoring it
+
+1
+and 2
+^~~ unexpected 'and', ignoring it
+and 3
+^~~ unexpected 'and', ignoring it
+
+1
+or 2
+^~ unexpected 'or', ignoring it
+or 3
+^~ unexpected 'or', ignoring it
+
+1
+and foo
+^~~ unexpected 'and', ignoring it
+
+2
+or foo
+^~ unexpected 'or', ignoring it
+
diff --git a/test/prism/errors/3.3-3.4/private_endless_method.txt b/test/prism/errors/3.3-3.4/private_endless_method.txt
new file mode 100644
index 0000000000..8aae5e0cd3
--- /dev/null
+++ b/test/prism/errors/3.3-3.4/private_endless_method.txt
@@ -0,0 +1,3 @@
+private def foo = puts "Hello"
+ ^ unexpected string literal, expecting end-of-input
+
diff --git a/test/prism/errors/3.4/block_args_in_array_assignment.txt b/test/prism/errors/3.4/block_args_in_array_assignment.txt
new file mode 100644
index 0000000000..71dca8452b
--- /dev/null
+++ b/test/prism/errors/3.4/block_args_in_array_assignment.txt
@@ -0,0 +1,3 @@
+matrix[5, &block] = 8
+ ^~~~~~ unexpected block arg given in index assignment; blocks are not allowed in index assignment expressions
+
diff --git a/test/prism/errors/3.4/dont_allow_return_inside_sclass_body.txt b/test/prism/errors/3.4/dont_allow_return_inside_sclass_body.txt
new file mode 100644
index 0000000000..c29fe01728
--- /dev/null
+++ b/test/prism/errors/3.4/dont_allow_return_inside_sclass_body.txt
@@ -0,0 +1,3 @@
+class << A; return; end
+ ^~~~~~ Invalid return in class/module body
+
diff --git a/test/prism/errors/3.4/it_with_ordinary_parameter.txt b/test/prism/errors/3.4/it_with_ordinary_parameter.txt
new file mode 100644
index 0000000000..ff9c4276ca
--- /dev/null
+++ b/test/prism/errors/3.4/it_with_ordinary_parameter.txt
@@ -0,0 +1,3 @@
+proc { || it }
+ ^~ 'it' is not allowed when an ordinary parameter is defined
+
diff --git a/test/prism/errors/3.4/keyword_args_in_array_assignment.txt b/test/prism/errors/3.4/keyword_args_in_array_assignment.txt
new file mode 100644
index 0000000000..e379ec0ef4
--- /dev/null
+++ b/test/prism/errors/3.4/keyword_args_in_array_assignment.txt
@@ -0,0 +1,3 @@
+matrix[5, axis: :y] = 8
+ ^~~~~~~~ unexpected keyword arg given in index assignment; keywords are not allowed in index assignment expressions
+
diff --git a/test/prism/errors/aliasing_global_variable_with_global_number_variable.txt b/test/prism/errors/aliasing_global_variable_with_global_number_variable.txt
new file mode 100644
index 0000000000..2f40a6a328
--- /dev/null
+++ b/test/prism/errors/aliasing_global_variable_with_global_number_variable.txt
@@ -0,0 +1,3 @@
+alias $a $1
+ ^~ invalid argument being passed to `alias`; can't make alias for the number variables
+
diff --git a/test/prism/errors/aliasing_global_variable_with_non_global_variable.txt b/test/prism/errors/aliasing_global_variable_with_non_global_variable.txt
new file mode 100644
index 0000000000..b6f013bab5
--- /dev/null
+++ b/test/prism/errors/aliasing_global_variable_with_non_global_variable.txt
@@ -0,0 +1,3 @@
+alias $a b
+ ^ invalid argument being passed to `alias`; expected a bare word, symbol, constant, or global variable
+
diff --git a/test/prism/errors/aliasing_non_global_variable_with_global_variable.txt b/test/prism/errors/aliasing_non_global_variable_with_global_variable.txt
new file mode 100644
index 0000000000..8863f342f0
--- /dev/null
+++ b/test/prism/errors/aliasing_non_global_variable_with_global_variable.txt
@@ -0,0 +1,3 @@
+alias a $b
+ ^~ invalid argument being passed to `alias`; expected a bare word, symbol, constant, or global variable
+
diff --git a/test/prism/errors/alnum_delimiters.txt b/test/prism/errors/alnum_delimiters.txt
new file mode 100644
index 0000000000..c9ed06ae51
--- /dev/null
+++ b/test/prism/errors/alnum_delimiters.txt
@@ -0,0 +1,3 @@
+%qXfooX
+^ unknown type of %string
+
diff --git a/test/prism/errors/alnum_delimiters_2.txt b/test/prism/errors/alnum_delimiters_2.txt
new file mode 100644
index 0000000000..3f78b434d6
--- /dev/null
+++ b/test/prism/errors/alnum_delimiters_2.txt
@@ -0,0 +1,3 @@
+%QXfooX
+^ unknown type of %string
+
diff --git a/test/prism/errors/alnum_delimiters_3.txt b/test/prism/errors/alnum_delimiters_3.txt
new file mode 100644
index 0000000000..55ef8d29a5
--- /dev/null
+++ b/test/prism/errors/alnum_delimiters_3.txt
@@ -0,0 +1,3 @@
+%wXfooX
+^ unknown type of %string
+
diff --git a/test/prism/errors/alnum_delimiters_4.txt b/test/prism/errors/alnum_delimiters_4.txt
new file mode 100644
index 0000000000..603b54debd
--- /dev/null
+++ b/test/prism/errors/alnum_delimiters_4.txt
@@ -0,0 +1,3 @@
+%WxfooX
+^ unknown type of %string
+
diff --git a/test/prism/errors/alnum_delimiters_5.txt b/test/prism/errors/alnum_delimiters_5.txt
new file mode 100644
index 0000000000..31c344ea90
--- /dev/null
+++ b/test/prism/errors/alnum_delimiters_5.txt
@@ -0,0 +1,3 @@
+%iXfooX
+^ unknown type of %string
+
diff --git a/test/prism/errors/alnum_delimiters_6.txt b/test/prism/errors/alnum_delimiters_6.txt
new file mode 100644
index 0000000000..79ffbbb1b8
--- /dev/null
+++ b/test/prism/errors/alnum_delimiters_6.txt
@@ -0,0 +1,3 @@
+%IXfooX
+^ unknown type of %string
+
diff --git a/test/prism/errors/alnum_delimiters_7.txt b/test/prism/errors/alnum_delimiters_7.txt
new file mode 100644
index 0000000000..809192e031
--- /dev/null
+++ b/test/prism/errors/alnum_delimiters_7.txt
@@ -0,0 +1,3 @@
+%xXfooX
+^ unknown type of %string
+
diff --git a/test/prism/errors/alnum_delimiters_8.txt b/test/prism/errors/alnum_delimiters_8.txt
new file mode 100644
index 0000000000..abfcf119c0
--- /dev/null
+++ b/test/prism/errors/alnum_delimiters_8.txt
@@ -0,0 +1,3 @@
+%rXfooX
+^ unknown type of %string
+
diff --git a/test/prism/errors/alnum_delimiters_9.txt b/test/prism/errors/alnum_delimiters_9.txt
new file mode 100644
index 0000000000..ae56d7be4f
--- /dev/null
+++ b/test/prism/errors/alnum_delimiters_9.txt
@@ -0,0 +1,3 @@
+%sXfooX
+^ unknown type of %string
+
diff --git a/test/prism/errors/amperand_dot_after_endless_range.txt b/test/prism/errors/amperand_dot_after_endless_range.txt
new file mode 100644
index 0000000000..ab8c8ccc4d
--- /dev/null
+++ b/test/prism/errors/amperand_dot_after_endless_range.txt
@@ -0,0 +1,3 @@
+0 if true...&.abs
+ ^~ unexpected '&.'; ... is a non-associative operator
+
diff --git a/test/prism/errors/argument_after_ellipsis.txt b/test/prism/errors/argument_after_ellipsis.txt
new file mode 100644
index 0000000000..3d708648a4
--- /dev/null
+++ b/test/prism/errors/argument_after_ellipsis.txt
@@ -0,0 +1,3 @@
+def foo(...); foo(..., 1); end
+ ^ unexpected argument after `...`
+
diff --git a/test/prism/errors/argument_forwarding_only_effects_its_own_internals.txt b/test/prism/errors/argument_forwarding_only_effects_its_own_internals.txt
new file mode 100644
index 0000000000..9c3f0ae3f7
--- /dev/null
+++ b/test/prism/errors/argument_forwarding_only_effects_its_own_internals.txt
@@ -0,0 +1,3 @@
+def a(...); b(...); end; def c(x, y, z); b(...); end
+ ^~~ unexpected ... when the parent method is not forwarding
+
diff --git a/test/prism/errors/argument_forwarding_when_parent_is_not_forwarding.txt b/test/prism/errors/argument_forwarding_when_parent_is_not_forwarding.txt
new file mode 100644
index 0000000000..017ba7eec9
--- /dev/null
+++ b/test/prism/errors/argument_forwarding_when_parent_is_not_forwarding.txt
@@ -0,0 +1,3 @@
+def a(x, y, z); b(...); end
+ ^~~ unexpected ... when the parent method is not forwarding
+
diff --git a/test/prism/errors/arguments_after_block.txt b/test/prism/errors/arguments_after_block.txt
new file mode 100644
index 0000000000..c33039146f
--- /dev/null
+++ b/test/prism/errors/arguments_after_block.txt
@@ -0,0 +1,17 @@
+a(&block, foo)
+ ^ unexpected argument after a block argument
+a(&block,)
+ ^ unexpected argument after a block argument
+a.(&block,)
+ ^ unexpected argument after a block argument
+a[&block,]
+ ^ unexpected argument after a block argument
+def a(&block)
+ p(&block,)
+ ^ unexpected argument after a block argument
+ a.(&block,)
+ ^ unexpected argument after a block argument
+ a[&block,]
+ ^ unexpected argument after a block argument
+end
+
diff --git a/test/prism/errors/arguments_binding_power_for_and.txt b/test/prism/errors/arguments_binding_power_for_and.txt
new file mode 100644
index 0000000000..0585a091f4
--- /dev/null
+++ b/test/prism/errors/arguments_binding_power_for_and.txt
@@ -0,0 +1,5 @@
+foo(*bar and baz)
+ ^~~ unexpected 'and'; expected a `)` to close the arguments
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
diff --git a/test/prism/errors/arguments_invalid_comma.txt b/test/prism/errors/arguments_invalid_comma.txt
new file mode 100644
index 0000000000..4e1360580c
--- /dev/null
+++ b/test/prism/errors/arguments_invalid_comma.txt
@@ -0,0 +1,4 @@
+p(a,b
+,)
+^ invalid comma
+
diff --git a/test/prism/errors/arguments_splat_after_star_star.txt b/test/prism/errors/arguments_splat_after_star_star.txt
new file mode 100644
index 0000000000..c50c81a9a3
--- /dev/null
+++ b/test/prism/errors/arguments_splat_after_star_star.txt
@@ -0,0 +1,3 @@
+def f(*, **); p(**, *); end
+ ^ unexpected `*` splat argument after a `**` keyword splat argument
+
diff --git a/test/prism/errors/array_invalid_comma.txt b/test/prism/errors/array_invalid_comma.txt
new file mode 100644
index 0000000000..2f52a253e0
--- /dev/null
+++ b/test/prism/errors/array_invalid_comma.txt
@@ -0,0 +1,4 @@
+[a
+,]
+^ invalid comma
+
diff --git a/test/prism/errors/array_with_double_commas.txt b/test/prism/errors/array_with_double_commas.txt
new file mode 100644
index 0000000000..7c971103f6
--- /dev/null
+++ b/test/prism/errors/array_with_double_commas.txt
@@ -0,0 +1,3 @@
+[a:1,,]
+ ^ unexpected ','; expected a `]` to close the array
+
diff --git a/test/prism/errors/assign_to_numbered_parameter.txt b/test/prism/errors/assign_to_numbered_parameter.txt
new file mode 100644
index 0000000000..74cc0c4032
--- /dev/null
+++ b/test/prism/errors/assign_to_numbered_parameter.txt
@@ -0,0 +1,11 @@
+a in _1
+ ^~ _1 is reserved for numbered parameters
+a => _1
+ ^~ _1 is reserved for numbered parameters
+1 => a, _1
+ ^~ _1 is reserved for numbered parameters
+1 in a, _1
+ ^~ _1 is reserved for numbered parameters
+/(?<_1>)/ =~ a
+ ^~ _1 is reserved for numbered parameters
+
diff --git a/test/prism/errors/bad_arguments.txt b/test/prism/errors/bad_arguments.txt
new file mode 100644
index 0000000000..ea19efd3c8
--- /dev/null
+++ b/test/prism/errors/bad_arguments.txt
@@ -0,0 +1,6 @@
+def foo(A, @a, $A, @@a);end
+ ^ invalid formal argument; formal argument cannot be a constant
+ ^~ invalid formal argument; formal argument cannot be an instance variable
+ ^~ invalid formal argument; formal argument cannot be a global variable
+ ^~~ invalid formal argument; formal argument cannot be a class variable
+
diff --git a/test/prism/errors/begin_at_toplevel.txt b/test/prism/errors/begin_at_toplevel.txt
new file mode 100644
index 0000000000..ce3d3b8d00
--- /dev/null
+++ b/test/prism/errors/begin_at_toplevel.txt
@@ -0,0 +1,3 @@
+def foo; BEGIN {}; end
+ ^~~~~ BEGIN is permitted only at toplevel
+
diff --git a/test/prism/errors/binary_range_with_left_unary_range.txt b/test/prism/errors/binary_range_with_left_unary_range.txt
new file mode 100644
index 0000000000..85cf55fb80
--- /dev/null
+++ b/test/prism/errors/binary_range_with_left_unary_range.txt
@@ -0,0 +1,8 @@
+..1..
+ ^~ unexpected range operator; .. and ... are non-associative and cannot be chained
+...1..
+ ^~ unexpected range operator; .. and ... are non-associative and cannot be chained
+ ^~ unexpected ..; .. is a non-associative operator
+ ^~ unexpected .., expecting end-of-input
+ ^~ unexpected .., ignoring it
+
diff --git a/test/prism/errors/block_arg_and_block.txt b/test/prism/errors/block_arg_and_block.txt
new file mode 100644
index 0000000000..c355c40475
--- /dev/null
+++ b/test/prism/errors/block_arg_and_block.txt
@@ -0,0 +1,3 @@
+foo(&1) { }
+ ^~~ both block arg and actual block given; only one block is allowed
+
diff --git a/test/prism/errors/block_args_with_endless_def.txt b/test/prism/errors/block_args_with_endless_def.txt
new file mode 100644
index 0000000000..a7242160d2
--- /dev/null
+++ b/test/prism/errors/block_args_with_endless_def.txt
@@ -0,0 +1,5 @@
+p do |a = def f = 1; b| end
+ ^~~~~~~ unexpected endless method definition; expected a default value for a parameter
+p do |a = def f = 1| 2; b|c end
+ ^~~~~~~ unexpected endless method definition; expected a default value for a parameter
+
diff --git a/test/prism/errors/block_beginning_with_brace_and_ending_with_end.txt b/test/prism/errors/block_beginning_with_brace_and_ending_with_end.txt
new file mode 100644
index 0000000000..1184b38ce8
--- /dev/null
+++ b/test/prism/errors/block_beginning_with_brace_and_ending_with_end.txt
@@ -0,0 +1,5 @@
+x.each { x end
+ ^~~ unexpected 'end', expecting end-of-input
+ ^~~ unexpected 'end', ignoring it
+ ^ expected a block beginning with `{` to end with `}`
+
diff --git a/test/prism/errors/break_1.txt b/test/prism/errors/break_1.txt
new file mode 100644
index 0000000000..5d74e7bde0
--- /dev/null
+++ b/test/prism/errors/break_1.txt
@@ -0,0 +1,4 @@
+break 1,;
+ ^ unexpected ';'; expected an argument
+^~~~~~~~ Invalid break
+
diff --git a/test/prism/errors/break_1_2_3.txt b/test/prism/errors/break_1_2_3.txt
new file mode 100644
index 0000000000..817207cbfe
--- /dev/null
+++ b/test/prism/errors/break_1_2_3.txt
@@ -0,0 +1,8 @@
+break(1, 2, 3)
+ ^ unexpected ',', expecting end-of-input
+ ^ unexpected ',', ignoring it
+ ^ expected a matching `)`
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+^~~~~~~~~~~~~ Invalid break
+
diff --git a/test/prism/errors/call_with_block_and_write.txt b/test/prism/errors/call_with_block_and_write.txt
new file mode 100644
index 0000000000..f63d94770e
--- /dev/null
+++ b/test/prism/errors/call_with_block_and_write.txt
@@ -0,0 +1,4 @@
+foo {} &&= 1
+^~~~~~ unexpected write target
+ ^~~ unexpected operator after a call with a block
+
diff --git a/test/prism/errors/call_with_block_operator_write.txt b/test/prism/errors/call_with_block_operator_write.txt
new file mode 100644
index 0000000000..3c36050b34
--- /dev/null
+++ b/test/prism/errors/call_with_block_operator_write.txt
@@ -0,0 +1,4 @@
+foo {} += 1
+^~~~~~ unexpected write target
+ ^~ unexpected operator after a call with a block
+
diff --git a/test/prism/errors/call_with_block_or_write.txt b/test/prism/errors/call_with_block_or_write.txt
new file mode 100644
index 0000000000..2cced0db75
--- /dev/null
+++ b/test/prism/errors/call_with_block_or_write.txt
@@ -0,0 +1,4 @@
+foo {} ||= 1
+^~~~~~ unexpected write target
+ ^~~ unexpected operator after a call with a block
+
diff --git a/test/prism/errors/cannot_assign_to_a_reserved_numbered_parameter.txt b/test/prism/errors/cannot_assign_to_a_reserved_numbered_parameter.txt
new file mode 100644
index 0000000000..750915fb1f
--- /dev/null
+++ b/test/prism/errors/cannot_assign_to_a_reserved_numbered_parameter.txt
@@ -0,0 +1,14 @@
+begin
+ _1=:a;_2=:a;_3=:a;_4=:a;_5=:a
+ ^~ _1 is reserved for numbered parameters
+ ^~ _2 is reserved for numbered parameters
+ ^~ _3 is reserved for numbered parameters
+ ^~ _4 is reserved for numbered parameters
+ ^~ _5 is reserved for numbered parameters
+ _6=:a;_7=:a;_8=:a;_9=:a;_10=:a
+ ^~ _6 is reserved for numbered parameters
+ ^~ _7 is reserved for numbered parameters
+ ^~ _8 is reserved for numbered parameters
+ ^~ _9 is reserved for numbered parameters
+end
+
diff --git a/test/prism/errors/case_without_clauses.txt b/test/prism/errors/case_without_clauses.txt
new file mode 100644
index 0000000000..3bbbfdd97f
--- /dev/null
+++ b/test/prism/errors/case_without_clauses.txt
@@ -0,0 +1,4 @@
+case :a
+^~~~ expected a `when` or `in` clause after `case`
+end
+
diff --git a/test/prism/errors/case_without_when_clauses_errors_on_else_clause.txt b/test/prism/errors/case_without_when_clauses_errors_on_else_clause.txt
new file mode 100644
index 0000000000..c5a1179fb9
--- /dev/null
+++ b/test/prism/errors/case_without_when_clauses_errors_on_else_clause.txt
@@ -0,0 +1,5 @@
+case :a
+^~~~ expected a `when` or `in` clause after `case`
+else
+end
+
diff --git a/test/prism/errors/check_value_expression.txt b/test/prism/errors/check_value_expression.txt
new file mode 100644
index 0000000000..33a472d94c
--- /dev/null
+++ b/test/prism/errors/check_value_expression.txt
@@ -0,0 +1,20 @@
+1 => ^(return)
+ ^~~~~~ unexpected void value expression
+while true
+ 1 => ^(break)
+ ^~~~~ unexpected void value expression
+ 1 => ^(next)
+ ^~~~ unexpected void value expression
+ 1 => ^(redo)
+ ^~~~ unexpected void value expression
+ 1 => ^(retry)
+ ^~~~~ Invalid retry without rescue
+ ^~~~~ unexpected void value expression
+ 1 => ^(2 => a)
+ ^~~~~~ unexpected void value expression
+end
+1 => ^(if 1; (return) else (return) end)
+ ^~~~~~ unexpected void value expression
+1 => ^(unless 1; (return) else (return) end)
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/class_definition_in_method_body.txt b/test/prism/errors/class_definition_in_method_body.txt
new file mode 100644
index 0000000000..fcdc5746ee
--- /dev/null
+++ b/test/prism/errors/class_definition_in_method_body.txt
@@ -0,0 +1,3 @@
+def foo;class A;end;end
+ ^~~~~ unexpected class definition in method body
+
diff --git a/test/prism/errors/class_definition_in_method_defs.txt b/test/prism/errors/class_definition_in_method_defs.txt
new file mode 100644
index 0000000000..23bee0b6fb
--- /dev/null
+++ b/test/prism/errors/class_definition_in_method_defs.txt
@@ -0,0 +1,7 @@
+def foo(bar = class A;end);end
+ ^~~~~ unexpected class definition in method body
+def foo;rescue;class A;end;end
+ ^~~~~ unexpected class definition in method body
+def foo;ensure;class A;end;end
+ ^~~~~ unexpected class definition in method body
+
diff --git a/test/prism/errors/class_name.txt b/test/prism/errors/class_name.txt
new file mode 100644
index 0000000000..8b75896ddb
--- /dev/null
+++ b/test/prism/errors/class_name.txt
@@ -0,0 +1,3 @@
+class 0.X end
+ ^~~ unexpected constant path after `class`; class/module name must be CONSTANT
+
diff --git a/test/prism/errors/command_call_in.txt b/test/prism/errors/command_call_in.txt
new file mode 100644
index 0000000000..2fdcf09738
--- /dev/null
+++ b/test/prism/errors/command_call_in.txt
@@ -0,0 +1,5 @@
+foo 1 in a
+ ^~ unexpected 'in', expecting end-of-input
+ ^~ unexpected 'in', ignoring it
+a = foo 2 in b
+
diff --git a/test/prism/errors/command_calls.txt b/test/prism/errors/command_calls.txt
new file mode 100644
index 0000000000..6601e5fbbc
--- /dev/null
+++ b/test/prism/errors/command_calls.txt
@@ -0,0 +1,10 @@
+[a b]
+ ^ unexpected local variable or method; expected a `,` separator for the array elements
+
+
+[
+ a b do
+ ^ unexpected local variable or method; expected a `,` separator for the array elements
+ end,
+]
+
diff --git a/test/prism/errors/command_calls_10.txt b/test/prism/errors/command_calls_10.txt
new file mode 100644
index 0000000000..f4d9f0fabc
--- /dev/null
+++ b/test/prism/errors/command_calls_10.txt
@@ -0,0 +1,3 @@
++a b
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_11.txt b/test/prism/errors/command_calls_11.txt
new file mode 100644
index 0000000000..868476c0c3
--- /dev/null
+++ b/test/prism/errors/command_calls_11.txt
@@ -0,0 +1,3 @@
+a + b c
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_12.txt b/test/prism/errors/command_calls_12.txt
new file mode 100644
index 0000000000..50c9ae88e3
--- /dev/null
+++ b/test/prism/errors/command_calls_12.txt
@@ -0,0 +1,3 @@
+a && b c
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_13.txt b/test/prism/errors/command_calls_13.txt
new file mode 100644
index 0000000000..50dc4a84a0
--- /dev/null
+++ b/test/prism/errors/command_calls_13.txt
@@ -0,0 +1,3 @@
+a =~ b c
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_14.txt b/test/prism/errors/command_calls_14.txt
new file mode 100644
index 0000000000..1b16fd3245
--- /dev/null
+++ b/test/prism/errors/command_calls_14.txt
@@ -0,0 +1,3 @@
+a = b, c d
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_15.txt b/test/prism/errors/command_calls_15.txt
new file mode 100644
index 0000000000..d2409fd002
--- /dev/null
+++ b/test/prism/errors/command_calls_15.txt
@@ -0,0 +1,3 @@
+a = *b c
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_16.txt b/test/prism/errors/command_calls_16.txt
new file mode 100644
index 0000000000..ceb07dfe30
--- /dev/null
+++ b/test/prism/errors/command_calls_16.txt
@@ -0,0 +1,3 @@
+a, b = c = d f
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_17.txt b/test/prism/errors/command_calls_17.txt
new file mode 100644
index 0000000000..a78ac0985d
--- /dev/null
+++ b/test/prism/errors/command_calls_17.txt
@@ -0,0 +1,5 @@
+a ? b c : d e
+ ^ expected a `:` after the true expression of a ternary operator
+ ^ unexpected ':', expecting end-of-input
+ ^ unexpected ':', ignoring it
+
diff --git a/test/prism/errors/command_calls_18.txt b/test/prism/errors/command_calls_18.txt
new file mode 100644
index 0000000000..393e7e0ae6
--- /dev/null
+++ b/test/prism/errors/command_calls_18.txt
@@ -0,0 +1,3 @@
+defined? a b
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_19.txt b/test/prism/errors/command_calls_19.txt
new file mode 100644
index 0000000000..e045187f1e
--- /dev/null
+++ b/test/prism/errors/command_calls_19.txt
@@ -0,0 +1,3 @@
+! ! a b
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_2.txt b/test/prism/errors/command_calls_2.txt
new file mode 100644
index 0000000000..13e10f7ebf
--- /dev/null
+++ b/test/prism/errors/command_calls_2.txt
@@ -0,0 +1,6 @@
+{a: b c}
+^ expected a `}` to close the hash literal
+ ^ unexpected local variable or method, expecting end-of-input
+ ^ unexpected '}', expecting end-of-input
+ ^ unexpected '}', ignoring it
+
diff --git a/test/prism/errors/command_calls_20.txt b/test/prism/errors/command_calls_20.txt
new file mode 100644
index 0000000000..3058ebce96
--- /dev/null
+++ b/test/prism/errors/command_calls_20.txt
@@ -0,0 +1,3 @@
+def f a = b c; end
+ ^ expected a delimiter to close the parameters
+
diff --git a/test/prism/errors/command_calls_21.txt b/test/prism/errors/command_calls_21.txt
new file mode 100644
index 0000000000..73d8f83539
--- /dev/null
+++ b/test/prism/errors/command_calls_21.txt
@@ -0,0 +1,5 @@
+def f(a = b c); end
+ ^ unexpected local variable or method; expected a `)` to close the parameters
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
diff --git a/test/prism/errors/command_calls_22.txt b/test/prism/errors/command_calls_22.txt
new file mode 100644
index 0000000000..5a234e04e8
--- /dev/null
+++ b/test/prism/errors/command_calls_22.txt
@@ -0,0 +1,3 @@
+a = b rescue c d
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_23.txt b/test/prism/errors/command_calls_23.txt
new file mode 100644
index 0000000000..db85589ffd
--- /dev/null
+++ b/test/prism/errors/command_calls_23.txt
@@ -0,0 +1,3 @@
+def a = b rescue c d
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_24.txt b/test/prism/errors/command_calls_24.txt
new file mode 100644
index 0000000000..27a32ea3bf
--- /dev/null
+++ b/test/prism/errors/command_calls_24.txt
@@ -0,0 +1,5 @@
+->a=b c{}
+ ^ expected a `do` keyword or a `{` to open the lambda block
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~ expected a lambda block beginning with `do` to end with `end`
+
diff --git a/test/prism/errors/command_calls_25.txt b/test/prism/errors/command_calls_25.txt
new file mode 100644
index 0000000000..cf04508f87
--- /dev/null
+++ b/test/prism/errors/command_calls_25.txt
@@ -0,0 +1,8 @@
+->(a=b c){}
+ ^ expected a matching `)`
+ ^ expected a `do` keyword or a `{` to open the lambda block
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~ expected a lambda block beginning with `do` to end with `end`
+
diff --git a/test/prism/errors/command_calls_26.txt b/test/prism/errors/command_calls_26.txt
new file mode 100644
index 0000000000..29ed4cb903
--- /dev/null
+++ b/test/prism/errors/command_calls_26.txt
@@ -0,0 +1,3 @@
+case; when a b; end
+ ^ expected a delimiter after the predicates of a `when` clause
+
diff --git a/test/prism/errors/command_calls_27.txt b/test/prism/errors/command_calls_27.txt
new file mode 100644
index 0000000000..8d1c3ee077
--- /dev/null
+++ b/test/prism/errors/command_calls_27.txt
@@ -0,0 +1,3 @@
+case; in a if a b; end
+^~~~ expected a predicate for a case matching statement
+
diff --git a/test/prism/errors/command_calls_28.txt b/test/prism/errors/command_calls_28.txt
new file mode 100644
index 0000000000..4bfe88d67b
--- /dev/null
+++ b/test/prism/errors/command_calls_28.txt
@@ -0,0 +1,3 @@
+case; in a unless a b; end
+^~~~ expected a predicate for a case matching statement
+
diff --git a/test/prism/errors/command_calls_29.txt b/test/prism/errors/command_calls_29.txt
new file mode 100644
index 0000000000..eae012ab44
--- /dev/null
+++ b/test/prism/errors/command_calls_29.txt
@@ -0,0 +1,3 @@
+begin; rescue a b; end
+ ^ expected a closing delimiter for the `rescue` clause
+
diff --git a/test/prism/errors/command_calls_3.txt b/test/prism/errors/command_calls_3.txt
new file mode 100644
index 0000000000..77af72b904
--- /dev/null
+++ b/test/prism/errors/command_calls_3.txt
@@ -0,0 +1,3 @@
+...a b
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_30.txt b/test/prism/errors/command_calls_30.txt
new file mode 100644
index 0000000000..48e35685cb
--- /dev/null
+++ b/test/prism/errors/command_calls_30.txt
@@ -0,0 +1,3 @@
+begin; rescue a b => c; end
+ ^ expected a closing delimiter for the `rescue` clause
+
diff --git a/test/prism/errors/command_calls_31.txt b/test/prism/errors/command_calls_31.txt
new file mode 100644
index 0000000000..e662b25444
--- /dev/null
+++ b/test/prism/errors/command_calls_31.txt
@@ -0,0 +1,17 @@
+true && not true
+ ^~~~ expected a `(` after `not`
+ ^~~~ unexpected 'true', expecting end-of-input
+
+true || not true
+ ^~~~ expected a `(` after `not`
+ ^~~~ unexpected 'true', expecting end-of-input
+
+true && not (true)
+ ^ expected a `(` immediately after `not`
+ ^ unexpected '(', expecting end-of-input
+
+true && not
+true
+^~~~ expected a `(` after `not`
+^~~~ unexpected 'true', expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_32.txt b/test/prism/errors/command_calls_32.txt
new file mode 100644
index 0000000000..14488ca335
--- /dev/null
+++ b/test/prism/errors/command_calls_32.txt
@@ -0,0 +1,19 @@
+foo && return bar
+ ^~~ unexpected local variable or method, expecting end-of-input
+
+tap { foo && break bar }
+ ^~~ unexpected local variable or method, expecting end-of-input
+
+tap { foo && next bar }
+ ^~~ unexpected local variable or method, expecting end-of-input
+
+foo && return()
+ ^ unexpected '(', expecting end-of-input
+
+foo && return(bar)
+ ^ unexpected '(', expecting end-of-input
+
+foo && return(bar, baz)
+ ^~~~~~~~~~ unexpected write target
+ ^ unexpected '(', expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_33.txt b/test/prism/errors/command_calls_33.txt
new file mode 100644
index 0000000000..13e3b35c9e
--- /dev/null
+++ b/test/prism/errors/command_calls_33.txt
@@ -0,0 +1,6 @@
+1 if foo = bar baz
+ ^~~ unexpected local variable or method, expecting end-of-input
+
+1 and foo = bar baz
+ ^~~ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_34.txt b/test/prism/errors/command_calls_34.txt
new file mode 100644
index 0000000000..ce62bc1492
--- /dev/null
+++ b/test/prism/errors/command_calls_34.txt
@@ -0,0 +1,24 @@
+foo(bar 1 do end, 2)
+ ^ invalid comma
+ ^ unexpected integer; expected a `)` to close the arguments
+ ^ unexpected integer, expecting end-of-input
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
+foo(bar 1 do end,)
+ ^ invalid comma
+
+foo(1, bar 2 do end)
+ ^ unexpected integer; expected a `)` to close the arguments
+ ^ unexpected integer, expecting end-of-input
+ ^~ unexpected 'do', expecting end-of-input
+ ^~ unexpected 'do', ignoring it
+ ^~~ unexpected 'end', ignoring it
+ ^ unexpected ')', ignoring it
+
+foo(1, bar 2)
+ ^ unexpected integer; expected a `)` to close the arguments
+ ^ unexpected integer, expecting end-of-input
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
diff --git a/test/prism/errors/command_calls_35.txt b/test/prism/errors/command_calls_35.txt
new file mode 100644
index 0000000000..45f569b117
--- /dev/null
+++ b/test/prism/errors/command_calls_35.txt
@@ -0,0 +1,46 @@
+p(p a, x: b => value)
+ ^~ unexpected '=>'; expected a `)` to close the arguments
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
+p(p a, x: => value)
+ ^~ unexpected '=>'; expected a `)` to close the arguments
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
+p(p a, &block => value)
+ ^~ unexpected '=>'; expected a `)` to close the arguments
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
+p(p a do end => value)
+ ^~ unexpected '=>'; expected a `)` to close the arguments
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
+p(p a, *args => value)
+ ^~ unexpected '=>'; expected a `)` to close the arguments
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
+p(p a, **kwargs => value)
+ ^~ unexpected '=>'; expected a `)` to close the arguments
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
+p p 1, &block => 2, &block
+ ^~ unexpected '=>', expecting end-of-input
+ ^~ unexpected '=>', ignoring it
+ ^ unexpected ',', expecting end-of-input
+ ^ unexpected ',', ignoring it
+ ^ unexpected '&', ignoring it
+
+p p p 1 => 2 => 3 => 4
+ ^~ unexpected '=>', expecting end-of-input
+ ^~ unexpected '=>', ignoring it
+
+p[p a, x: b => value]
+ ^ expected a matching `]`
+ ^ unexpected ']', expecting end-of-input
+ ^ unexpected ']', ignoring it
+
diff --git a/test/prism/errors/command_calls_4.txt b/test/prism/errors/command_calls_4.txt
new file mode 100644
index 0000000000..4be14e57e4
--- /dev/null
+++ b/test/prism/errors/command_calls_4.txt
@@ -0,0 +1,3 @@
+if ...a b; end
+ ^ expected `then` or `;` or '\n'
+
diff --git a/test/prism/errors/command_calls_5.txt b/test/prism/errors/command_calls_5.txt
new file mode 100644
index 0000000000..799a6c1136
--- /dev/null
+++ b/test/prism/errors/command_calls_5.txt
@@ -0,0 +1,3 @@
+a b, c d
+ ^ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/command_calls_6.txt b/test/prism/errors/command_calls_6.txt
new file mode 100644
index 0000000000..6f09d36e94
--- /dev/null
+++ b/test/prism/errors/command_calls_6.txt
@@ -0,0 +1,6 @@
+a(b, c d)
+ ^ unexpected local variable or method; expected a `)` to close the arguments
+ ^ unexpected local variable or method, expecting end-of-input
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
diff --git a/test/prism/errors/command_calls_7.txt b/test/prism/errors/command_calls_7.txt
new file mode 100644
index 0000000000..b5d74209fa
--- /dev/null
+++ b/test/prism/errors/command_calls_7.txt
@@ -0,0 +1,6 @@
+a(*b c)
+ ^ unexpected local variable or method; expected a `)` to close the arguments
+ ^ unexpected local variable or method, expecting end-of-input
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
diff --git a/test/prism/errors/command_calls_8.txt b/test/prism/errors/command_calls_8.txt
new file mode 100644
index 0000000000..e574063e72
--- /dev/null
+++ b/test/prism/errors/command_calls_8.txt
@@ -0,0 +1,6 @@
+a(**b c)
+ ^ unexpected local variable or method; expected a `)` to close the arguments
+ ^ unexpected local variable or method, expecting end-of-input
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
diff --git a/test/prism/errors/command_calls_9.txt b/test/prism/errors/command_calls_9.txt
new file mode 100644
index 0000000000..69515d959c
--- /dev/null
+++ b/test/prism/errors/command_calls_9.txt
@@ -0,0 +1,6 @@
+a(&b c)
+ ^ unexpected local variable or method; expected a `)` to close the arguments
+ ^ unexpected local variable or method, expecting end-of-input
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
diff --git a/test/prism/errors/conditional_predicate_closed.txt b/test/prism/errors/conditional_predicate_closed.txt
new file mode 100644
index 0000000000..6655fd2b1c
--- /dev/null
+++ b/test/prism/errors/conditional_predicate_closed.txt
@@ -0,0 +1,6 @@
+if 0 0; elsif 0 0; end
+ ^ expected `then` or `;` or '\n'
+ ^ expected `then` or `;` or '\n'
+unless 0 0; end
+ ^ expected `then` or `;` or '\n'
+
diff --git a/test/prism/errors/constant_assignment_in_method.txt b/test/prism/errors/constant_assignment_in_method.txt
new file mode 100644
index 0000000000..1ee49bffe6
--- /dev/null
+++ b/test/prism/errors/constant_assignment_in_method.txt
@@ -0,0 +1,3 @@
+def foo();A=1;end
+ ^~~ dynamic constant assignment
+
diff --git a/test/prism/errors/constant_path_with_invalid_token_after.txt b/test/prism/errors/constant_path_with_invalid_token_after.txt
new file mode 100644
index 0000000000..acb6dba30a
--- /dev/null
+++ b/test/prism/errors/constant_path_with_invalid_token_after.txt
@@ -0,0 +1,4 @@
+A::$b
+ ^ expected a constant after the `::` operator
+ ^~ unexpected global variable, expecting end-of-input
+
diff --git a/test/prism/errors/content_after_unterminated_heredoc.txt b/test/prism/errors/content_after_unterminated_heredoc.txt
new file mode 100644
index 0000000000..c0446a8c39
--- /dev/null
+++ b/test/prism/errors/content_after_unterminated_heredoc.txt
@@ -0,0 +1,4 @@
+<<~FOO.foo
+ ^~~ unterminated heredoc; can't find string "FOO" anywhere before EOF
+ ^~~ unterminated heredoc; can't find string "FOO" anywhere before EOF
+
diff --git a/test/prism/errors/cr_without_lf_in_percent_expression.txt b/test/prism/errors/cr_without_lf_in_percent_expression.txt
new file mode 100644
index 0000000000..903f8b4b4a
--- /dev/null
+++ b/test/prism/errors/cr_without_lf_in_percent_expression.txt
@@ -0,0 +1,3 @@
+%
+ ^ unterminated string meets end of file
+
diff --git a/test/prism/errors/def_ivar.txt b/test/prism/errors/def_ivar.txt
new file mode 100644
index 0000000000..11620885cf
--- /dev/null
+++ b/test/prism/errors/def_ivar.txt
@@ -0,0 +1,3 @@
+def @foo; end
+ ^~~~ unexpected instance variable; expected a method name
+
diff --git a/test/prism/errors/def_with_empty_expression_receiver.txt b/test/prism/errors/def_with_empty_expression_receiver.txt
new file mode 100644
index 0000000000..153fe8a1c6
--- /dev/null
+++ b/test/prism/errors/def_with_empty_expression_receiver.txt
@@ -0,0 +1,3 @@
+def ().a; end
+ ^ expected a receiver for the method definition
+
diff --git a/test/prism/errors/def_with_expression_receiver_and_no_identifier.txt b/test/prism/errors/def_with_expression_receiver_and_no_identifier.txt
new file mode 100644
index 0000000000..1aefc07f1a
--- /dev/null
+++ b/test/prism/errors/def_with_expression_receiver_and_no_identifier.txt
@@ -0,0 +1,4 @@
+def (a); end
+ ^ expected a `.` or `::` after the receiver in a method definition
+ ^ unexpected ';'; expected a method name
+
diff --git a/test/prism/errors/def_with_multiple_statements_receiver.txt b/test/prism/errors/def_with_multiple_statements_receiver.txt
new file mode 100644
index 0000000000..80c9d4c190
--- /dev/null
+++ b/test/prism/errors/def_with_multiple_statements_receiver.txt
@@ -0,0 +1,10 @@
+def (
+a
+b
+^ expected a matching `)`
+^ expected a `.` or `::` after the receiver in a method definition
+ ^ expected a delimiter to close the parameters
+).c; end
+^ unexpected ')', ignoring it
+ ^ unexpected '.', ignoring it
+
diff --git a/test/prism/errors/def_with_optional_splat.txt b/test/prism/errors/def_with_optional_splat.txt
new file mode 100644
index 0000000000..74a833ceec
--- /dev/null
+++ b/test/prism/errors/def_with_optional_splat.txt
@@ -0,0 +1,6 @@
+def foo(*bar = nil); end
+ ^ unexpected '='; expected a `)` to close the parameters
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+ ^~~ unexpected 'end', ignoring it
+
diff --git a/test/prism/errors/defined_empty.txt b/test/prism/errors/defined_empty.txt
new file mode 100644
index 0000000000..4d7ea76413
--- /dev/null
+++ b/test/prism/errors/defined_empty.txt
@@ -0,0 +1,3 @@
+defined?()
+ ^ expected an expression after `defined?`
+
diff --git a/test/prism/errors/defining_numbered_parameter.txt b/test/prism/errors/defining_numbered_parameter.txt
new file mode 100644
index 0000000000..2bf05d9563
--- /dev/null
+++ b/test/prism/errors/defining_numbered_parameter.txt
@@ -0,0 +1,3 @@
+def _1; end
+ ^~ _1 is reserved for numbered parameters
+
diff --git a/test/prism/errors/defining_numbered_parameter_2.txt b/test/prism/errors/defining_numbered_parameter_2.txt
new file mode 100644
index 0000000000..dc4739b126
--- /dev/null
+++ b/test/prism/errors/defining_numbered_parameter_2.txt
@@ -0,0 +1,3 @@
+def self._1; end
+ ^~ _1 is reserved for numbered parameters
+
diff --git a/test/prism/errors/defs_endless_method.txt b/test/prism/errors/defs_endless_method.txt
new file mode 100644
index 0000000000..80db648e62
--- /dev/null
+++ b/test/prism/errors/defs_endless_method.txt
@@ -0,0 +1,12 @@
+def f=(k,v)=1
+ ^~ invalid method name; a setter method cannot be defined in an endless method definition
+
+def obj.f=(k,v)=1
+ ^~ invalid method name; a setter method cannot be defined in an endless method definition
+
+def []=(k,v)=1
+ ^~~ invalid method name; a setter method cannot be defined in an endless method definition
+
+def obj.[]=(k,v)=1
+ ^~~ invalid method name; a setter method cannot be defined in an endless method definition
+
diff --git a/test/prism/errors/destroy_call_operator_write_arguments.txt b/test/prism/errors/destroy_call_operator_write_arguments.txt
new file mode 100644
index 0000000000..c3c72f9226
--- /dev/null
+++ b/test/prism/errors/destroy_call_operator_write_arguments.txt
@@ -0,0 +1,11 @@
+t next&&do end&=
+ ^~ unexpected 'do'; expected an expression after the operator
+ ^~~~ unexpected void value expression
+ ^~~~ unexpected void value expression
+^~~~~~~~~~~~~~ unexpected write target
+ ^~ unexpected operator after a call with arguments
+ ^~ unexpected operator after a call with a block
+''while=
+ ^~~~~ expected a predicate expression for the `while` statement
+ ^ unexpected '='; target cannot be written
+
diff --git a/test/prism/errors/do_not_allow_characters_other_than_0_9_a_f_and_A_F_in_u_Unicode_character_notation.txt b/test/prism/errors/do_not_allow_characters_other_than_0_9_a_f_and_A_F_in_u_Unicode_character_notation.txt
new file mode 100644
index 0000000000..953b9589d1
--- /dev/null
+++ b/test/prism/errors/do_not_allow_characters_other_than_0_9_a_f_and_A_F_in_u_Unicode_character_notation.txt
@@ -0,0 +1,4 @@
+"\u{000z}"
+ ^ invalid Unicode escape sequence
+ ^ unterminated Unicode escape
+
diff --git a/test/prism/errors/do_not_allow_forward_arguments_in_blocks.txt b/test/prism/errors/do_not_allow_forward_arguments_in_blocks.txt
new file mode 100644
index 0000000000..df49557617
--- /dev/null
+++ b/test/prism/errors/do_not_allow_forward_arguments_in_blocks.txt
@@ -0,0 +1,3 @@
+a {|...|}
+ ^~~ unexpected ... when the parent method is not forwarding
+
diff --git a/test/prism/errors/do_not_allow_forward_arguments_in_lambda_literals.txt b/test/prism/errors/do_not_allow_forward_arguments_in_lambda_literals.txt
new file mode 100644
index 0000000000..c2405a5c66
--- /dev/null
+++ b/test/prism/errors/do_not_allow_forward_arguments_in_lambda_literals.txt
@@ -0,0 +1,3 @@
+->(...) {}
+ ^~~ unexpected ... when the parent method is not forwarding
+
diff --git a/test/prism/errors/do_not_allow_more_than_6_hexadecimal_digits_in_u_Unicode_character_notation.txt b/test/prism/errors/do_not_allow_more_than_6_hexadecimal_digits_in_u_Unicode_character_notation.txt
new file mode 100644
index 0000000000..50795c9353
--- /dev/null
+++ b/test/prism/errors/do_not_allow_more_than_6_hexadecimal_digits_in_u_Unicode_character_notation.txt
@@ -0,0 +1,3 @@
+"\u{0000001}"
+ ^~~~~~~ invalid Unicode escape sequence; maximum length is 6 digits
+
diff --git a/test/prism/errors/do_not_allow_multiple_codepoints_in_a_single_character_literal.txt b/test/prism/errors/do_not_allow_multiple_codepoints_in_a_single_character_literal.txt
new file mode 100644
index 0000000000..1a93dc6c69
--- /dev/null
+++ b/test/prism/errors/do_not_allow_multiple_codepoints_in_a_single_character_literal.txt
@@ -0,0 +1,3 @@
+?\u{0001 0002}
+ ^~~ invalid Unicode escape sequence; Multiple codepoints at single character literal are disallowed
+
diff --git a/test/prism/errors/do_not_allow_trailing_commas_in_lambda_parameters.txt b/test/prism/errors/do_not_allow_trailing_commas_in_lambda_parameters.txt
new file mode 100644
index 0000000000..11f23f0345
--- /dev/null
+++ b/test/prism/errors/do_not_allow_trailing_commas_in_lambda_parameters.txt
@@ -0,0 +1,3 @@
+-> (a, b, ) {}
+ ^ unexpected `,` in parameters
+
diff --git a/test/prism/errors/do_not_allow_trailing_commas_in_method_parameters.txt b/test/prism/errors/do_not_allow_trailing_commas_in_method_parameters.txt
new file mode 100644
index 0000000000..c0fec0c704
--- /dev/null
+++ b/test/prism/errors/do_not_allow_trailing_commas_in_method_parameters.txt
@@ -0,0 +1,3 @@
+def foo(a,b,c,);end
+ ^ unexpected `,` in parameters
+
diff --git a/test/prism/errors/dont_allow_return_inside_class_body.txt b/test/prism/errors/dont_allow_return_inside_class_body.txt
new file mode 100644
index 0000000000..286eba2103
--- /dev/null
+++ b/test/prism/errors/dont_allow_return_inside_class_body.txt
@@ -0,0 +1,3 @@
+class A; return; end
+ ^~~~~~ Invalid return in class/module body
+
diff --git a/test/prism/errors/dont_allow_return_inside_module_body.txt b/test/prism/errors/dont_allow_return_inside_module_body.txt
new file mode 100644
index 0000000000..85dd619a93
--- /dev/null
+++ b/test/prism/errors/dont_allow_return_inside_module_body.txt
@@ -0,0 +1,3 @@
+module A; return; end
+ ^~~~~~ Invalid return in class/module body
+
diff --git a/test/prism/errors/dont_allow_setting_to_back_and_nth_reference.txt b/test/prism/errors/dont_allow_setting_to_back_and_nth_reference.txt
new file mode 100644
index 0000000000..71b5b94589
--- /dev/null
+++ b/test/prism/errors/dont_allow_setting_to_back_and_nth_reference.txt
@@ -0,0 +1,7 @@
+begin
+$+ = nil
+^~ Can't set variable $+
+$1466 = nil
+^~~~~ Can't set variable $1466
+end
+
diff --git a/test/prism/errors/double_arguments_forwarding.txt b/test/prism/errors/double_arguments_forwarding.txt
new file mode 100644
index 0000000000..29c78f8c80
--- /dev/null
+++ b/test/prism/errors/double_arguments_forwarding.txt
@@ -0,0 +1,4 @@
+def foo(..., ...)
+ ^~~ unexpected parameter order
+end
+
diff --git a/test/prism/errors/double_scope_numbered_parameters.txt b/test/prism/errors/double_scope_numbered_parameters.txt
new file mode 100644
index 0000000000..0bb9df4ede
--- /dev/null
+++ b/test/prism/errors/double_scope_numbered_parameters.txt
@@ -0,0 +1,3 @@
+-> { _1 + -> { _2 } }
+ ^~ numbered parameter is already used in outer block
+
diff --git a/test/prism/errors/double_scope_repeated_numbered_parameters.txt b/test/prism/errors/double_scope_repeated_numbered_parameters.txt
new file mode 100644
index 0000000000..7b7b85a847
--- /dev/null
+++ b/test/prism/errors/double_scope_repeated_numbered_parameters.txt
@@ -0,0 +1,3 @@
+-> { _1 + -> { _1 } }
+ ^~ numbered parameter is already used in outer block
+
diff --git a/test/prism/errors/double_splat_followed_by_splat_argument.txt b/test/prism/errors/double_splat_followed_by_splat_argument.txt
new file mode 100644
index 0000000000..b2aec1167e
--- /dev/null
+++ b/test/prism/errors/double_splat_followed_by_splat_argument.txt
@@ -0,0 +1,3 @@
+a(**kwargs, *args)
+ ^~~~~ unexpected `*` splat argument after a `**` keyword splat argument
+
diff --git a/test/prism/errors/double_splat_with_double_commas.txt b/test/prism/errors/double_splat_with_double_commas.txt
new file mode 100644
index 0000000000..27873b7fac
--- /dev/null
+++ b/test/prism/errors/double_splat_with_double_commas.txt
@@ -0,0 +1,3 @@
+[**a,,]
+ ^ unexpected ','; expected a `]` to close the array
+
diff --git a/test/prism/errors/duplicate_pattern_capture.txt b/test/prism/errors/duplicate_pattern_capture.txt
new file mode 100644
index 0000000000..4b48fd3118
--- /dev/null
+++ b/test/prism/errors/duplicate_pattern_capture.txt
@@ -0,0 +1,17 @@
+case (); in [a, a]; end
+ ^ duplicated variable name
+case (); in [a, *a]; end
+ ^ duplicated variable name
+case (); in {a: a, b: a}; end
+ ^ duplicated variable name
+case (); in {a: a, **a}; end
+ ^ duplicated variable name
+case (); in [a, {a:}]; end
+ ^ duplicated variable name
+case (); in [a, {a: {a: {a: [a]}}}]; end
+ ^ duplicated variable name
+case (); in a => a; end
+ ^ duplicated variable name
+case (); in [A => a, {a: b => a}]; end
+ ^ duplicated variable name
+
diff --git a/test/prism/errors/duplicate_pattern_hash_key.txt b/test/prism/errors/duplicate_pattern_hash_key.txt
new file mode 100644
index 0000000000..201b51234f
--- /dev/null
+++ b/test/prism/errors/duplicate_pattern_hash_key.txt
@@ -0,0 +1,4 @@
+case (); in {a:, a:}; end
+ ^~ duplicated key name
+ ^ duplicated variable name
+
diff --git a/test/prism/errors/duplicate_pattern_hash_key_2.txt b/test/prism/errors/duplicate_pattern_hash_key_2.txt
new file mode 100644
index 0000000000..66756c454a
--- /dev/null
+++ b/test/prism/errors/duplicate_pattern_hash_key_2.txt
@@ -0,0 +1,3 @@
+case (); in {a:1, a:2}; end
+ ^~ duplicated key name
+
diff --git a/test/prism/errors/duplicated_parameter_names.txt b/test/prism/errors/duplicated_parameter_names.txt
new file mode 100644
index 0000000000..7b82685ca3
--- /dev/null
+++ b/test/prism/errors/duplicated_parameter_names.txt
@@ -0,0 +1,3 @@
+def foo(a,b,a);end
+ ^ duplicated argument name
+
diff --git a/test/prism/errors/duplicated_parameter_names_2.txt b/test/prism/errors/duplicated_parameter_names_2.txt
new file mode 100644
index 0000000000..8396993d56
--- /dev/null
+++ b/test/prism/errors/duplicated_parameter_names_2.txt
@@ -0,0 +1,3 @@
+def foo(a,b,*a);end
+ ^ duplicated argument name
+
diff --git a/test/prism/errors/duplicated_parameter_names_3.txt b/test/prism/errors/duplicated_parameter_names_3.txt
new file mode 100644
index 0000000000..437a6623c3
--- /dev/null
+++ b/test/prism/errors/duplicated_parameter_names_3.txt
@@ -0,0 +1,3 @@
+def foo(a,b,**a);end
+ ^ duplicated argument name
+
diff --git a/test/prism/errors/duplicated_parameter_names_4.txt b/test/prism/errors/duplicated_parameter_names_4.txt
new file mode 100644
index 0000000000..a420dd8a69
--- /dev/null
+++ b/test/prism/errors/duplicated_parameter_names_4.txt
@@ -0,0 +1,3 @@
+def foo(a,b,&a);end
+ ^ duplicated argument name
+
diff --git a/test/prism/errors/duplicated_parameter_names_5.txt b/test/prism/errors/duplicated_parameter_names_5.txt
new file mode 100644
index 0000000000..694d3a668c
--- /dev/null
+++ b/test/prism/errors/duplicated_parameter_names_5.txt
@@ -0,0 +1,3 @@
+def foo(a = 1,b,*c);end
+ ^ unexpected parameter `*`
+
diff --git a/test/prism/errors/dynamic_label_pattern.txt b/test/prism/errors/dynamic_label_pattern.txt
new file mode 100644
index 0000000000..b8d1012e45
--- /dev/null
+++ b/test/prism/errors/dynamic_label_pattern.txt
@@ -0,0 +1,3 @@
+:a => 'a': | 1
+ ^ expected a pattern expression after the key
+
diff --git a/test/prism/errors/ellipsis_in_no_paren_call.txt b/test/prism/errors/ellipsis_in_no_paren_call.txt
new file mode 100644
index 0000000000..87a847d192
--- /dev/null
+++ b/test/prism/errors/ellipsis_in_no_paren_call.txt
@@ -0,0 +1,3 @@
+def foo(...); foo 1, ...; end
+ ^~~ unexpected `...` in an non-parenthesized call
+
diff --git a/test/prism/errors/endless_method_command_call.txt b/test/prism/errors/endless_method_command_call.txt
new file mode 100644
index 0000000000..e6a328c294
--- /dev/null
+++ b/test/prism/errors/endless_method_command_call.txt
@@ -0,0 +1,3 @@
+private :m, def hello = puts "Hello"
+ ^ unexpected string literal, expecting end-of-input
+
diff --git a/test/prism/errors/endless_method_command_call_parameters.txt b/test/prism/errors/endless_method_command_call_parameters.txt
new file mode 100644
index 0000000000..5dc92ce7f9
--- /dev/null
+++ b/test/prism/errors/endless_method_command_call_parameters.txt
@@ -0,0 +1,27 @@
+def f x: = 1
+ ^ could not parse the endless method parameters
+
+def f ... = 1
+ ^ could not parse the endless method parameters
+
+def f * = 1
+ ^ could not parse the endless method parameters
+
+def f ** = 1
+ ^ could not parse the endless method parameters
+
+def f & = 1
+ ^ could not parse the endless method parameters
+
+def f *a = 1
+ ^ could not parse the endless method parameters
+
+def f **a = 1
+ ^ could not parse the endless method parameters
+
+def f &a = 1
+ ^ could not parse the endless method parameters
+
+def f a, (b) = 1
+ ^ could not parse the endless method parameters
+
diff --git a/test/prism/errors/escape_unicode_curly_whitespace.txt b/test/prism/errors/escape_unicode_curly_whitespace.txt
new file mode 100644
index 0000000000..324d8a2ae5
--- /dev/null
+++ b/test/prism/errors/escape_unicode_curly_whitespace.txt
@@ -0,0 +1,5 @@
+"\u{
+ ^ invalid Unicode escape sequence
+ ^ unterminated Unicode escape
+61}"
+
diff --git a/test/prism/errors/for_loop_delimiter.txt b/test/prism/errors/for_loop_delimiter.txt
new file mode 100644
index 0000000000..07002d9d06
--- /dev/null
+++ b/test/prism/errors/for_loop_delimiter.txt
@@ -0,0 +1,3 @@
+for a in b end
+ ^~~ unexpected 'end'; expected a 'do', newline, or ';' after the 'for' loop collection
+
diff --git a/test/prism/errors/for_loops_index_missing.txt b/test/prism/errors/for_loops_index_missing.txt
new file mode 100644
index 0000000000..a57c22b044
--- /dev/null
+++ b/test/prism/errors/for_loops_index_missing.txt
@@ -0,0 +1,5 @@
+for in 1..10
+^~~ expected an index after `for`
+i
+end
+
diff --git a/test/prism/errors/for_loops_only_end.txt b/test/prism/errors/for_loops_only_end.txt
new file mode 100644
index 0000000000..a8eaf0b8ab
--- /dev/null
+++ b/test/prism/errors/for_loops_only_end.txt
@@ -0,0 +1,6 @@
+for end
+^~~ expected an index after `for`
+ ^ expected an `in` after the index in a `for` statement
+ ^ expected a collection after the `in` in a `for` statement
+ ^~~ unexpected 'end'; expected a 'do', newline, or ';' after the 'for' loop collection
+
diff --git a/test/prism/errors/forwarding_arg_after_keyword_rest.txt b/test/prism/errors/forwarding_arg_after_keyword_rest.txt
new file mode 100644
index 0000000000..86fe4aad93
--- /dev/null
+++ b/test/prism/errors/forwarding_arg_after_keyword_rest.txt
@@ -0,0 +1,3 @@
+def f(**,...);end
+ ^~~ unexpected parameter order
+
diff --git a/test/prism/errors/forwarding_arg_and_block.txt b/test/prism/errors/forwarding_arg_and_block.txt
new file mode 100644
index 0000000000..65c75a5d7c
--- /dev/null
+++ b/test/prism/errors/forwarding_arg_and_block.txt
@@ -0,0 +1,3 @@
+def foo(...) = foo(...) { }
+ ^~~ both block arg and actual block given; only one block is allowed
+
diff --git a/test/prism/errors/heredoc_percent_q_newline_delimiter.txt b/test/prism/errors/heredoc_percent_q_newline_delimiter.txt
new file mode 100644
index 0000000000..73664c071f
--- /dev/null
+++ b/test/prism/errors/heredoc_percent_q_newline_delimiter.txt
@@ -0,0 +1,11 @@
+%q
+#{<<B}
+B
+^ unexpected constant, expecting end-of-input
+
+<<A; %q
+A
+#{<<B}
+B
+^ unexpected constant, expecting end-of-input
+
diff --git a/test/prism/errors/heredoc_unterminated.txt b/test/prism/errors/heredoc_unterminated.txt
new file mode 100644
index 0000000000..56bd162998
--- /dev/null
+++ b/test/prism/errors/heredoc_unterminated.txt
@@ -0,0 +1,9 @@
+a=>{<<b
+ ^ unterminated heredoc; can't find string "b" anywhere before EOF
+ ^~~ unexpected heredoc beginning; expected a key in the hash pattern
+ ^ unterminated heredoc; can't find string "b" anywhere before EOF
+ ^~~ expected a label as the key in the hash pattern
+ ^ expected a `}` to close the pattern expression
+ ^ unexpected heredoc ending, expecting end-of-input
+ ^ unexpected heredoc ending, ignoring it
+
diff --git a/test/prism/errors/incomplete_instance_var_string.txt b/test/prism/errors/incomplete_instance_var_string.txt
new file mode 100644
index 0000000000..b28947fc0e
--- /dev/null
+++ b/test/prism/errors/incomplete_instance_var_string.txt
@@ -0,0 +1,4 @@
+%@#@@#
+ ^ '@' without identifiers is not allowed as an instance variable name
+ ^ unexpected instance variable, expecting end-of-input
+
diff --git a/test/prism/errors/index_call_with_block_and_write.txt b/test/prism/errors/index_call_with_block_and_write.txt
new file mode 100644
index 0000000000..3d92fbfea7
--- /dev/null
+++ b/test/prism/errors/index_call_with_block_and_write.txt
@@ -0,0 +1,5 @@
+foo[1] {} &&= 1
+^~~~~~~~~ unexpected write target
+ ^~~ unexpected operator after a call with arguments
+ ^~~ unexpected operator after a call with a block
+
diff --git a/test/prism/errors/index_call_with_block_operator_write.txt b/test/prism/errors/index_call_with_block_operator_write.txt
new file mode 100644
index 0000000000..96c413cd39
--- /dev/null
+++ b/test/prism/errors/index_call_with_block_operator_write.txt
@@ -0,0 +1,5 @@
+foo[1] {} += 1
+^~~~~~~~~ unexpected write target
+ ^~ unexpected operator after a call with arguments
+ ^~ unexpected operator after a call with a block
+
diff --git a/test/prism/errors/index_call_with_block_or_write.txt b/test/prism/errors/index_call_with_block_or_write.txt
new file mode 100644
index 0000000000..2d250fba06
--- /dev/null
+++ b/test/prism/errors/index_call_with_block_or_write.txt
@@ -0,0 +1,5 @@
+foo[1] {} ||= 1
+^~~~~~~~~ unexpected write target
+ ^~~ unexpected operator after a call with arguments
+ ^~~ unexpected operator after a call with a block
+
diff --git a/test/prism/errors/infix_after_label.txt b/test/prism/errors/infix_after_label.txt
new file mode 100644
index 0000000000..f02a29470f
--- /dev/null
+++ b/test/prism/errors/infix_after_label.txt
@@ -0,0 +1,6 @@
+{ 'a':.upcase => 1 }
+ ^ unexpected '.'; expected a value in the hash literal
+^ expected a `}` to close the hash literal
+ ^ unexpected '}', expecting end-of-input
+ ^ unexpected '}', ignoring it
+
diff --git a/test/prism/errors/interpolated_regular_expression_with_unknown_regexp_options.txt b/test/prism/errors/interpolated_regular_expression_with_unknown_regexp_options.txt
new file mode 100644
index 0000000000..8e78753b1c
--- /dev/null
+++ b/test/prism/errors/interpolated_regular_expression_with_unknown_regexp_options.txt
@@ -0,0 +1,3 @@
+/#{foo}/AZaz
+ ^~~~~ unknown regexp options - AZaz
+
diff --git a/test/prism/errors/invalid_global_variable_write.txt b/test/prism/errors/invalid_global_variable_write.txt
new file mode 100644
index 0000000000..9d9018bcf1
--- /dev/null
+++ b/test/prism/errors/invalid_global_variable_write.txt
@@ -0,0 +1,4 @@
+$',
+^~ Can't set variable $'
+^~ unexpected write target
+
diff --git a/test/prism/errors/invalid_hex_escape.txt b/test/prism/errors/invalid_hex_escape.txt
new file mode 100644
index 0000000000..4fb847f6d2
--- /dev/null
+++ b/test/prism/errors/invalid_hex_escape.txt
@@ -0,0 +1,3 @@
+"\xx"
+ ^~ invalid hex escape sequence
+
diff --git a/test/prism/errors/invalid_multi_target.txt b/test/prism/errors/invalid_multi_target.txt
new file mode 100644
index 0000000000..9756278b0c
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target.txt
@@ -0,0 +1,3 @@
+foo,
+^~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_10.txt b/test/prism/errors/invalid_multi_target_10.txt
new file mode 100644
index 0000000000..0e87b67d36
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_10.txt
@@ -0,0 +1,3 @@
+Foo,
+^~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_11.txt b/test/prism/errors/invalid_multi_target_11.txt
new file mode 100644
index 0000000000..8185cde79e
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_11.txt
@@ -0,0 +1,3 @@
+::Foo,
+^~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_12.txt b/test/prism/errors/invalid_multi_target_12.txt
new file mode 100644
index 0000000000..f511a8a76f
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_12.txt
@@ -0,0 +1,3 @@
+Foo::Foo,
+^~~~~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_13.txt b/test/prism/errors/invalid_multi_target_13.txt
new file mode 100644
index 0000000000..7c9a3fb4e1
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_13.txt
@@ -0,0 +1,3 @@
+Foo::foo,
+^~~~~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_14.txt b/test/prism/errors/invalid_multi_target_14.txt
new file mode 100644
index 0000000000..88dc08de92
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_14.txt
@@ -0,0 +1,3 @@
+foo[foo],
+^~~~~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_15.txt b/test/prism/errors/invalid_multi_target_15.txt
new file mode 100644
index 0000000000..c140833467
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_15.txt
@@ -0,0 +1,3 @@
+(foo, bar)
+^~~~~~~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_16.txt b/test/prism/errors/invalid_multi_target_16.txt
new file mode 100644
index 0000000000..20ea56331f
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_16.txt
@@ -0,0 +1,3 @@
+foo((foo, bar))
+ ^~~~~~~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_17.txt b/test/prism/errors/invalid_multi_target_17.txt
new file mode 100644
index 0000000000..da1ced0c59
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_17.txt
@@ -0,0 +1,3 @@
+foo((*))
+ ^~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_18.txt b/test/prism/errors/invalid_multi_target_18.txt
new file mode 100644
index 0000000000..2beed193b4
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_18.txt
@@ -0,0 +1,3 @@
+foo(((foo, bar), *))
+ ^~~~~~~~~~~~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_19.txt b/test/prism/errors/invalid_multi_target_19.txt
new file mode 100644
index 0000000000..b5e3e6999a
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_19.txt
@@ -0,0 +1,3 @@
+(foo, bar) + 1
+^~~~~~~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_2.txt b/test/prism/errors/invalid_multi_target_2.txt
new file mode 100644
index 0000000000..68a7bbc305
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_2.txt
@@ -0,0 +1,3 @@
+foo = 1; foo,
+ ^~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_20.txt b/test/prism/errors/invalid_multi_target_20.txt
new file mode 100644
index 0000000000..e800bcf204
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_20.txt
@@ -0,0 +1,3 @@
+(foo, bar) in baz
+^~~~~~~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_3.txt b/test/prism/errors/invalid_multi_target_3.txt
new file mode 100644
index 0000000000..51e6207603
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_3.txt
@@ -0,0 +1,3 @@
+foo.bar,
+^~~~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_4.txt b/test/prism/errors/invalid_multi_target_4.txt
new file mode 100644
index 0000000000..f4c3599ffe
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_4.txt
@@ -0,0 +1,3 @@
+*foo,
+^~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_5.txt b/test/prism/errors/invalid_multi_target_5.txt
new file mode 100644
index 0000000000..5d143a3f5d
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_5.txt
@@ -0,0 +1,3 @@
+@foo,
+^~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_6.txt b/test/prism/errors/invalid_multi_target_6.txt
new file mode 100644
index 0000000000..6d15893f57
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_6.txt
@@ -0,0 +1,3 @@
+@@foo,
+^~~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_7.txt b/test/prism/errors/invalid_multi_target_7.txt
new file mode 100644
index 0000000000..451f9f0a00
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_7.txt
@@ -0,0 +1,3 @@
+$foo,
+^~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_8.txt b/test/prism/errors/invalid_multi_target_8.txt
new file mode 100644
index 0000000000..fdbe272f9a
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_8.txt
@@ -0,0 +1,4 @@
+$1,
+^~ Can't set variable $1
+^~ unexpected write target
+
diff --git a/test/prism/errors/invalid_multi_target_9.txt b/test/prism/errors/invalid_multi_target_9.txt
new file mode 100644
index 0000000000..038f355c5d
--- /dev/null
+++ b/test/prism/errors/invalid_multi_target_9.txt
@@ -0,0 +1,4 @@
+$+,
+^~ Can't set variable $+
+^~ unexpected write target
+
diff --git a/test/prism/errors/invalid_number_underscores.txt b/test/prism/errors/invalid_number_underscores.txt
new file mode 100644
index 0000000000..8fc79ed7a2
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores.txt
@@ -0,0 +1,3 @@
+1__1
+ ^ invalid underscore placement in number
+
diff --git a/test/prism/errors/invalid_number_underscores_10.txt b/test/prism/errors/invalid_number_underscores_10.txt
new file mode 100644
index 0000000000..53b0cc0719
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_10.txt
@@ -0,0 +1,3 @@
+01_1_
+ ^ trailing '_' in number
+
diff --git a/test/prism/errors/invalid_number_underscores_11.txt b/test/prism/errors/invalid_number_underscores_11.txt
new file mode 100644
index 0000000000..469110f86f
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_11.txt
@@ -0,0 +1,3 @@
+0d1_1_
+ ^ trailing '_' in number
+
diff --git a/test/prism/errors/invalid_number_underscores_12.txt b/test/prism/errors/invalid_number_underscores_12.txt
new file mode 100644
index 0000000000..a9b63a4b6c
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_12.txt
@@ -0,0 +1,3 @@
+0x1_1_
+ ^ trailing '_' in number
+
diff --git a/test/prism/errors/invalid_number_underscores_2.txt b/test/prism/errors/invalid_number_underscores_2.txt
new file mode 100644
index 0000000000..2762e08790
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_2.txt
@@ -0,0 +1,3 @@
+0b1__1
+ ^ invalid underscore placement in number
+
diff --git a/test/prism/errors/invalid_number_underscores_3.txt b/test/prism/errors/invalid_number_underscores_3.txt
new file mode 100644
index 0000000000..23f1e0b10b
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_3.txt
@@ -0,0 +1,3 @@
+0o1__1
+ ^ invalid underscore placement in number
+
diff --git a/test/prism/errors/invalid_number_underscores_4.txt b/test/prism/errors/invalid_number_underscores_4.txt
new file mode 100644
index 0000000000..ced149752f
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_4.txt
@@ -0,0 +1,3 @@
+01__1
+ ^ invalid underscore placement in number
+
diff --git a/test/prism/errors/invalid_number_underscores_5.txt b/test/prism/errors/invalid_number_underscores_5.txt
new file mode 100644
index 0000000000..5e3f2bf682
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_5.txt
@@ -0,0 +1,3 @@
+0d1__1
+ ^ invalid underscore placement in number
+
diff --git a/test/prism/errors/invalid_number_underscores_6.txt b/test/prism/errors/invalid_number_underscores_6.txt
new file mode 100644
index 0000000000..225b654248
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_6.txt
@@ -0,0 +1,3 @@
+0x1__1
+ ^ invalid underscore placement in number
+
diff --git a/test/prism/errors/invalid_number_underscores_7.txt b/test/prism/errors/invalid_number_underscores_7.txt
new file mode 100644
index 0000000000..d953b4cbc4
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_7.txt
@@ -0,0 +1,3 @@
+1_1_
+ ^ trailing '_' in number
+
diff --git a/test/prism/errors/invalid_number_underscores_8.txt b/test/prism/errors/invalid_number_underscores_8.txt
new file mode 100644
index 0000000000..cbdcd95d8f
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_8.txt
@@ -0,0 +1,3 @@
+0b1_1_
+ ^ trailing '_' in number
+
diff --git a/test/prism/errors/invalid_number_underscores_9.txt b/test/prism/errors/invalid_number_underscores_9.txt
new file mode 100644
index 0000000000..173282ffb2
--- /dev/null
+++ b/test/prism/errors/invalid_number_underscores_9.txt
@@ -0,0 +1,3 @@
+0o1_1_
+ ^ trailing '_' in number
+
diff --git a/test/prism/errors/invalid_operator_write_dot.txt b/test/prism/errors/invalid_operator_write_dot.txt
new file mode 100644
index 0000000000..666817e60f
--- /dev/null
+++ b/test/prism/errors/invalid_operator_write_dot.txt
@@ -0,0 +1,3 @@
+foo.+= 1
+ ^ unexpected write target
+
diff --git a/test/prism/errors/invalid_operator_write_fcall.txt b/test/prism/errors/invalid_operator_write_fcall.txt
new file mode 100644
index 0000000000..2748bf3291
--- /dev/null
+++ b/test/prism/errors/invalid_operator_write_fcall.txt
@@ -0,0 +1,3 @@
+foo! += 1
+^~~~ unexpected write target
+
diff --git a/test/prism/errors/invalid_splat.txt b/test/prism/errors/invalid_splat.txt
new file mode 100644
index 0000000000..cffd0f9879
--- /dev/null
+++ b/test/prism/errors/invalid_splat.txt
@@ -0,0 +1,4 @@
+(1
+*a)
+^~ unexpected write target
+
diff --git a/test/prism/errors/keywords_parameters_before_required_parameters.txt b/test/prism/errors/keywords_parameters_before_required_parameters.txt
new file mode 100644
index 0000000000..42d036e950
--- /dev/null
+++ b/test/prism/errors/keywords_parameters_before_required_parameters.txt
@@ -0,0 +1,4 @@
+def foo(b:, a)
+ ^ unexpected parameter order
+end
+
diff --git a/test/prism/errors/label_in_interpolated_string.txt b/test/prism/errors/label_in_interpolated_string.txt
new file mode 100644
index 0000000000..29af5310a1
--- /dev/null
+++ b/test/prism/errors/label_in_interpolated_string.txt
@@ -0,0 +1,14 @@
+case in el""Q
+^~~~ expected a predicate for a case matching statement
+ ^ expected a delimiter after the patterns of an `in` clause
+ ^ unexpected constant, expecting end-of-input
+^~~~ expected an `end` to close the `case` statement
+ !"""#{in el"":Q
+ ^~ unexpected 'in', assuming it is closing the parent 'in' clause
+ ^ expected a `}` to close the embedded expression
+ ^~ cannot parse the string part
+ ^~ cannot parse the string part
+ ^ cannot parse the string part
+ ^~~~~~~~~~~ unexpected label
+ ^~~~~~~~~~~ expected a string for concatenation
+
diff --git a/test/prism/errors/label_in_parentheses.txt b/test/prism/errors/label_in_parentheses.txt
new file mode 100644
index 0000000000..4f6e3e9e36
--- /dev/null
+++ b/test/prism/errors/label_in_parentheses.txt
@@ -0,0 +1,3 @@
+("a":)
+ ^~~~ unexpected label
+
diff --git a/test/prism/errors/loop_conditional_is_closed.txt b/test/prism/errors/loop_conditional_is_closed.txt
new file mode 100644
index 0000000000..2be1353319
--- /dev/null
+++ b/test/prism/errors/loop_conditional_is_closed.txt
@@ -0,0 +1,4 @@
+while 0 0; foo; end; until 0 0; foo; end
+ ^ expected a predicate expression for the `while` statement
+ ^ expected a predicate expression for the `until` statement
+
diff --git a/test/prism/errors/match_plus.txt b/test/prism/errors/match_plus.txt
new file mode 100644
index 0000000000..5e349a96ad
--- /dev/null
+++ b/test/prism/errors/match_plus.txt
@@ -0,0 +1,7 @@
+a in b + c
+ ^ unexpected '+', expecting end-of-input
+ ^ unexpected '+', ignoring it
+a => b + c
+ ^ unexpected '+', expecting end-of-input
+ ^ unexpected '+', ignoring it
+
diff --git a/test/prism/errors/match_predicate_after_and_with_dot_method_call.txt b/test/prism/errors/match_predicate_after_and_with_dot_method_call.txt
new file mode 100644
index 0000000000..32b77d127c
--- /dev/null
+++ b/test/prism/errors/match_predicate_after_and_with_dot_method_call.txt
@@ -0,0 +1,3 @@
+1 and 2 in 3.inspect
+ ^ unexpected '.', expecting end-of-input
+
diff --git a/test/prism/errors/match_predicate_after_and_with_opreator.txt b/test/prism/errors/match_predicate_after_and_with_opreator.txt
new file mode 100644
index 0000000000..5a0c5925ea
--- /dev/null
+++ b/test/prism/errors/match_predicate_after_and_with_opreator.txt
@@ -0,0 +1,3 @@
+1 and 2 in 3 % 4
+ ^ unexpected '%', expecting end-of-input
+
diff --git a/test/prism/errors/match_predicate_after_or_with_dot_method_call.txt b/test/prism/errors/match_predicate_after_or_with_dot_method_call.txt
new file mode 100644
index 0000000000..0a940166dc
--- /dev/null
+++ b/test/prism/errors/match_predicate_after_or_with_dot_method_call.txt
@@ -0,0 +1,3 @@
+'a' or 1 in 1.upcase
+ ^ unexpected '.', expecting end-of-input
+
diff --git a/test/prism/errors/match_predicate_after_or_with_opreator.txt b/test/prism/errors/match_predicate_after_or_with_opreator.txt
new file mode 100644
index 0000000000..8ea69e4787
--- /dev/null
+++ b/test/prism/errors/match_predicate_after_or_with_opreator.txt
@@ -0,0 +1,3 @@
+1 or 2 in 3 + 4
+ ^ unexpected '+', expecting end-of-input
+
diff --git a/test/prism/errors/match_predicate_after_rescue_with_dot_method_call.txt b/test/prism/errors/match_predicate_after_rescue_with_dot_method_call.txt
new file mode 100644
index 0000000000..fead8aaf23
--- /dev/null
+++ b/test/prism/errors/match_predicate_after_rescue_with_dot_method_call.txt
@@ -0,0 +1,3 @@
+'a' rescue 2 in 3.upcase
+ ^ unexpected '.', expecting end-of-input
+
diff --git a/test/prism/errors/match_predicate_after_rescue_with_opreator.txt b/test/prism/errors/match_predicate_after_rescue_with_opreator.txt
new file mode 100644
index 0000000000..b2363a544d
--- /dev/null
+++ b/test/prism/errors/match_predicate_after_rescue_with_opreator.txt
@@ -0,0 +1,3 @@
+1 rescue 2 in 3 << 4
+ ^~ unexpected <<, expecting end-of-input
+
diff --git a/test/prism/errors/match_required_after_and_with_dot_method_call.txt b/test/prism/errors/match_required_after_and_with_dot_method_call.txt
new file mode 100644
index 0000000000..0ecf86bae1
--- /dev/null
+++ b/test/prism/errors/match_required_after_and_with_dot_method_call.txt
@@ -0,0 +1,3 @@
+1 and 2 => 3.inspect
+ ^ unexpected '.', expecting end-of-input
+
diff --git a/test/prism/errors/match_required_after_and_with_opreator.txt b/test/prism/errors/match_required_after_and_with_opreator.txt
new file mode 100644
index 0000000000..eafbc1f12a
--- /dev/null
+++ b/test/prism/errors/match_required_after_and_with_opreator.txt
@@ -0,0 +1,3 @@
+1 and 2 => 3 - 4
+ ^ unexpected '-', expecting end-of-input
+
diff --git a/test/prism/errors/match_required_after_or_with_dot_method_call.txt b/test/prism/errors/match_required_after_or_with_dot_method_call.txt
new file mode 100644
index 0000000000..479413250d
--- /dev/null
+++ b/test/prism/errors/match_required_after_or_with_dot_method_call.txt
@@ -0,0 +1,3 @@
+1 or 2 => 3.inspect
+ ^ unexpected '.', expecting end-of-input
+
diff --git a/test/prism/errors/match_required_after_or_with_opreator.txt b/test/prism/errors/match_required_after_or_with_opreator.txt
new file mode 100644
index 0000000000..c35f3b66e4
--- /dev/null
+++ b/test/prism/errors/match_required_after_or_with_opreator.txt
@@ -0,0 +1,3 @@
+1 or 2 => 3 ^ 4
+ ^ unexpected '^', expecting end-of-input
+
diff --git a/test/prism/errors/match_required_after_rescue_with_dot_method_call.txt b/test/prism/errors/match_required_after_rescue_with_dot_method_call.txt
new file mode 100644
index 0000000000..d72d72ce60
--- /dev/null
+++ b/test/prism/errors/match_required_after_rescue_with_dot_method_call.txt
@@ -0,0 +1,3 @@
+1 rescue 2 => 3.inspect
+ ^ unexpected '.', expecting end-of-input
+
diff --git a/test/prism/errors/match_required_after_rescue_with_opreator.txt b/test/prism/errors/match_required_after_rescue_with_opreator.txt
new file mode 100644
index 0000000000..903e2ccc8e
--- /dev/null
+++ b/test/prism/errors/match_required_after_rescue_with_opreator.txt
@@ -0,0 +1,3 @@
+1 rescue 2 => 3 ** 4
+ ^~ unexpected '**', expecting end-of-input
+
diff --git a/test/prism/errors/method_parameters_after_arguments_forwarding.txt b/test/prism/errors/method_parameters_after_arguments_forwarding.txt
new file mode 100644
index 0000000000..ec2aefda1d
--- /dev/null
+++ b/test/prism/errors/method_parameters_after_arguments_forwarding.txt
@@ -0,0 +1,4 @@
+def foo(..., a)
+ ^ unexpected parameter order
+end
+
diff --git a/test/prism/errors/method_parameters_after_block.txt b/test/prism/errors/method_parameters_after_block.txt
new file mode 100644
index 0000000000..6e2091d5d1
--- /dev/null
+++ b/test/prism/errors/method_parameters_after_block.txt
@@ -0,0 +1,4 @@
+def foo(&block, a)
+ ^ unexpected parameter order
+end
+
diff --git a/test/prism/errors/method_with_arguments_after_anonymous_block.txt b/test/prism/errors/method_with_arguments_after_anonymous_block.txt
new file mode 100644
index 0000000000..0d986b3c01
--- /dev/null
+++ b/test/prism/errors/method_with_arguments_after_anonymous_block.txt
@@ -0,0 +1,4 @@
+def foo(&, a)
+ ^ unexpected parameter order
+end
+
diff --git a/test/prism/errors/missing_terminator_in_parentheses.txt b/test/prism/errors/missing_terminator_in_parentheses.txt
new file mode 100644
index 0000000000..af4b698f0c
--- /dev/null
+++ b/test/prism/errors/missing_terminator_in_parentheses.txt
@@ -0,0 +1,3 @@
+(0 0)
+ ^ unexpected integer, expecting end-of-input
+
diff --git a/test/prism/errors/module_definition_in_method_body.txt b/test/prism/errors/module_definition_in_method_body.txt
new file mode 100644
index 0000000000..59900c96dd
--- /dev/null
+++ b/test/prism/errors/module_definition_in_method_body.txt
@@ -0,0 +1,3 @@
+def foo;module A;end;end
+ ^~~~~~ unexpected module definition in method body
+
diff --git a/test/prism/errors/module_definition_in_method_body_within_block.txt b/test/prism/errors/module_definition_in_method_body_within_block.txt
new file mode 100644
index 0000000000..204be35607
--- /dev/null
+++ b/test/prism/errors/module_definition_in_method_body_within_block.txt
@@ -0,0 +1,7 @@
+def foo
+ bar do
+ module Foo;end
+ ^~~~~~ unexpected module definition in method body
+ end
+end
+
diff --git a/test/prism/errors/module_definition_in_method_defs.txt b/test/prism/errors/module_definition_in_method_defs.txt
new file mode 100644
index 0000000000..c5a6a8a2e8
--- /dev/null
+++ b/test/prism/errors/module_definition_in_method_defs.txt
@@ -0,0 +1,7 @@
+def foo(bar = module A;end);end
+ ^~~~~~ unexpected module definition in method body
+def foo;rescue;module A;end;end
+ ^~~~~~ unexpected module definition in method body
+def foo;ensure;module A;end;end
+ ^~~~~~ unexpected module definition in method body
+
diff --git a/test/prism/errors/module_name_recoverable.txt b/test/prism/errors/module_name_recoverable.txt
new file mode 100644
index 0000000000..58a28a60c5
--- /dev/null
+++ b/test/prism/errors/module_name_recoverable.txt
@@ -0,0 +1,4 @@
+module Parent module end
+ ^~~~~~ unexpected constant path after `module`; class/module name must be CONSTANT
+ ^~~ unexpected 'end', assuming it is closing the parent module definition
+
diff --git a/test/prism/errors/multi_target_parens.txt b/test/prism/errors/multi_target_parens.txt
new file mode 100644
index 0000000000..fe1b9a4b18
--- /dev/null
+++ b/test/prism/errors/multi_target_parens.txt
@@ -0,0 +1,19 @@
+( + ( * ) )
+ ^~~~~ unexpected write target
+( a ( * ) )
+ ^~~~~ unexpected write target
+( 1 + ( * ) )
+ ^~~~~ unexpected write target
+( .. ( * ) )
+ ^~~~~ unexpected write target
+( a = ( * ) )
+ ^~~~~ unexpected write target
+( * = ( * ) )
+ ^~~~~ unexpected write target
+( a if ( * ) )
+ ^~~~~ unexpected write target
+( 1; ( * ) )
+ ^~~~~ unexpected write target
+( def f() = ( * ) )
+ ^~~~~ unexpected write target
+
diff --git a/test/prism/errors/multi_target_star.txt b/test/prism/errors/multi_target_star.txt
new file mode 100644
index 0000000000..3d6d7f4286
--- /dev/null
+++ b/test/prism/errors/multi_target_star.txt
@@ -0,0 +1,17 @@
+[(*),]
+ ^~~ unexpected write target
+[1,(a,*b,(c,d)),1]
+ ^~~~~~~~~~~~ unexpected write target
+{a:(*),}
+ ^~~ unexpected write target
+[1+(*),]
+ ^~~ unexpected write target
+x=(*),1
+ ^~~ unexpected write target
+p((*),)
+ ^~~ unexpected write target
+p (*),1
+ ^~~ unexpected write target
+x = def f = (*),1
+ ^~~ unexpected write target
+
diff --git a/test/prism/errors/multiple_error_in_parameters_order.txt b/test/prism/errors/multiple_error_in_parameters_order.txt
new file mode 100644
index 0000000000..5dae0a105a
--- /dev/null
+++ b/test/prism/errors/multiple_error_in_parameters_order.txt
@@ -0,0 +1,5 @@
+def foo(**args, a, b:)
+ ^ unexpected parameter order
+ ^~ unexpected parameter order
+end
+
diff --git a/test/prism/errors/next_1.txt b/test/prism/errors/next_1.txt
new file mode 100644
index 0000000000..83ce038ebb
--- /dev/null
+++ b/test/prism/errors/next_1.txt
@@ -0,0 +1,4 @@
+next 1,;
+ ^ unexpected ';'; expected an argument
+^~~~~~~ Invalid next
+
diff --git a/test/prism/errors/next_1_2_3.txt b/test/prism/errors/next_1_2_3.txt
new file mode 100644
index 0000000000..7abe577ab3
--- /dev/null
+++ b/test/prism/errors/next_1_2_3.txt
@@ -0,0 +1,8 @@
+next(1, 2, 3)
+ ^ unexpected ',', expecting end-of-input
+ ^ unexpected ',', ignoring it
+ ^ expected a matching `)`
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+^~~~~~~~~~~~ Invalid next
+
diff --git a/test/prism/errors/non_assoc_equality.txt b/test/prism/errors/non_assoc_equality.txt
new file mode 100644
index 0000000000..9b3f137549
--- /dev/null
+++ b/test/prism/errors/non_assoc_equality.txt
@@ -0,0 +1,25 @@
+1 == 2 == 3
+ ^~ unexpected '=='; '==' is a non-associative operator
+ ^~ unexpected '==', expecting end-of-input
+ ^~ unexpected '==', ignoring it
+1 != 2 != 3
+ ^~ unexpected '!='; '!=' is a non-associative operator
+ ^~ unexpected '!=', expecting end-of-input
+ ^~ unexpected '!=', ignoring it
+1 === 2 === 3
+ ^~~ unexpected '==='; '===' is a non-associative operator
+ ^~~ unexpected '===', expecting end-of-input
+ ^~~ unexpected '===', ignoring it
+1 =~ 2 =~ 3
+ ^~ unexpected '=~'; '=~' is a non-associative operator
+ ^~ unexpected '=~', expecting end-of-input
+ ^~ unexpected '=~', ignoring it
+1 !~ 2 !~ 3
+ ^~ unexpected '!~'; '!~' is a non-associative operator
+ ^~ unexpected '!~', expecting end-of-input
+ ^~ unexpected '!~', ignoring it
+1 <=> 2 <=> 3
+ ^~~ unexpected '<=>'; '<=>' is a non-associative operator
+ ^~~ unexpected '<=>', expecting end-of-input
+ ^~~ unexpected '<=>', ignoring it
+
diff --git a/test/prism/errors/non_assoc_range.txt b/test/prism/errors/non_assoc_range.txt
new file mode 100644
index 0000000000..12eec10594
--- /dev/null
+++ b/test/prism/errors/non_assoc_range.txt
@@ -0,0 +1,5 @@
+1....2
+ ^ unexpected '.'; ... is a non-associative operator
+ ^ unexpected '.', expecting end-of-input
+ ^ unexpected '.', ignoring it
+
diff --git a/test/prism/errors/numbered_and_write.txt b/test/prism/errors/numbered_and_write.txt
new file mode 100644
index 0000000000..f80b97b2d5
--- /dev/null
+++ b/test/prism/errors/numbered_and_write.txt
@@ -0,0 +1,3 @@
+tap { _1 &&= 1 }
+ ^~ _1 is reserved for numbered parameters
+
diff --git a/test/prism/errors/numbered_operator_write.txt b/test/prism/errors/numbered_operator_write.txt
new file mode 100644
index 0000000000..70cd58c811
--- /dev/null
+++ b/test/prism/errors/numbered_operator_write.txt
@@ -0,0 +1,3 @@
+tap { _1 += 1 }
+ ^~ _1 is reserved for numbered parameters
+
diff --git a/test/prism/errors/numbered_or_write.txt b/test/prism/errors/numbered_or_write.txt
new file mode 100644
index 0000000000..b27495498d
--- /dev/null
+++ b/test/prism/errors/numbered_or_write.txt
@@ -0,0 +1,3 @@
+tap { _1 ||= 1 }
+ ^~ _1 is reserved for numbered parameters
+
diff --git a/test/prism/errors/numbered_parameters_in_block_arguments.txt b/test/prism/errors/numbered_parameters_in_block_arguments.txt
new file mode 100644
index 0000000000..d01999c53e
--- /dev/null
+++ b/test/prism/errors/numbered_parameters_in_block_arguments.txt
@@ -0,0 +1,3 @@
+foo { |_1| }
+ ^~ _1 is reserved for numbered parameters
+
diff --git a/test/prism/errors/optional_block_parameters_with_unary_operator.txt b/test/prism/errors/optional_block_parameters_with_unary_operator.txt
new file mode 100644
index 0000000000..fd45f12648
--- /dev/null
+++ b/test/prism/errors/optional_block_parameters_with_unary_operator.txt
@@ -0,0 +1,3 @@
+foo { |a = +b| }
+ ^ unexpected '+'; unary calls are not allowed in this context
+
diff --git a/test/prism/errors/optional_block_parameters_with_unary_operator_2.txt b/test/prism/errors/optional_block_parameters_with_unary_operator_2.txt
new file mode 100644
index 0000000000..ba98f36f84
--- /dev/null
+++ b/test/prism/errors/optional_block_parameters_with_unary_operator_2.txt
@@ -0,0 +1,3 @@
+foo { |a = -b| }
+ ^ unexpected '-'; unary calls are not allowed in this context
+
diff --git a/test/prism/errors/optional_block_parameters_with_unary_operator_3.txt b/test/prism/errors/optional_block_parameters_with_unary_operator_3.txt
new file mode 100644
index 0000000000..9770059891
--- /dev/null
+++ b/test/prism/errors/optional_block_parameters_with_unary_operator_3.txt
@@ -0,0 +1,3 @@
+foo { |a = !b| }
+ ^ unexpected '!'; unary calls are not allowed in this context
+
diff --git a/test/prism/errors/optional_block_parameters_with_unary_operator_4.txt b/test/prism/errors/optional_block_parameters_with_unary_operator_4.txt
new file mode 100644
index 0000000000..9bec68d7b3
--- /dev/null
+++ b/test/prism/errors/optional_block_parameters_with_unary_operator_4.txt
@@ -0,0 +1,3 @@
+foo { |a = ~b| }
+ ^ unexpected '~'; unary calls are not allowed in this context
+
diff --git a/test/prism/errors/parameter_name_ending_with_bang_or_question_mark.txt b/test/prism/errors/parameter_name_ending_with_bang_or_question_mark.txt
new file mode 100644
index 0000000000..db4fd6928a
--- /dev/null
+++ b/test/prism/errors/parameter_name_ending_with_bang_or_question_mark.txt
@@ -0,0 +1,4 @@
+def foo(x!,y?); end
+ ^~ unexpected name for a parameter
+ ^~ unexpected name for a parameter
+
diff --git a/test/prism/errors/parameters_invalid_comma.txt b/test/prism/errors/parameters_invalid_comma.txt
new file mode 100644
index 0000000000..2d22f7ca76
--- /dev/null
+++ b/test/prism/errors/parameters_invalid_comma.txt
@@ -0,0 +1,4 @@
+def f(a
+,b);end
+^ invalid comma
+
diff --git a/test/prism/errors/pattern-capture-in-alt-array.txt b/test/prism/errors/pattern-capture-in-alt-array.txt
new file mode 100644
index 0000000000..5cb59fa328
--- /dev/null
+++ b/test/prism/errors/pattern-capture-in-alt-array.txt
@@ -0,0 +1,4 @@
+1 => [a, b] | 2
+ ^ variable capture in alternative pattern
+ ^ variable capture in alternative pattern
+
diff --git a/test/prism/errors/pattern-capture-in-alt-hash.txt b/test/prism/errors/pattern-capture-in-alt-hash.txt
new file mode 100644
index 0000000000..150b3baecc
--- /dev/null
+++ b/test/prism/errors/pattern-capture-in-alt-hash.txt
@@ -0,0 +1,3 @@
+1 => { a: b } | 2
+ ^ variable capture in alternative pattern
+
diff --git a/test/prism/errors/pattern-capture-in-alt-name.txt b/test/prism/errors/pattern-capture-in-alt-name.txt
new file mode 100644
index 0000000000..cbf2bae85f
--- /dev/null
+++ b/test/prism/errors/pattern-capture-in-alt-name.txt
@@ -0,0 +1,3 @@
+1 => (2 => b) | 2
+ ^ variable capture in alternative pattern
+
diff --git a/test/prism/errors/pattern-capture-in-alt-top.txt b/test/prism/errors/pattern-capture-in-alt-top.txt
new file mode 100644
index 0000000000..bdf3a7f637
--- /dev/null
+++ b/test/prism/errors/pattern-capture-in-alt-top.txt
@@ -0,0 +1,4 @@
+1 => a | b
+ ^ variable capture in alternative pattern
+ ^ variable capture in alternative pattern
+
diff --git a/test/prism/errors/pattern_arithmetic_expressions.txt b/test/prism/errors/pattern_arithmetic_expressions.txt
new file mode 100644
index 0000000000..cfb3650531
--- /dev/null
+++ b/test/prism/errors/pattern_arithmetic_expressions.txt
@@ -0,0 +1,3 @@
+case 1; in -1**2; end
+ ^~~~~ expected a pattern expression after the `in` keyword
+
diff --git a/test/prism/errors/pattern_match_implicit_rest.txt b/test/prism/errors/pattern_match_implicit_rest.txt
new file mode 100644
index 0000000000..8602c0add0
--- /dev/null
+++ b/test/prism/errors/pattern_match_implicit_rest.txt
@@ -0,0 +1,3 @@
+a=>b, *,
+ ^ expected a pattern expression after `,`
+
diff --git a/test/prism/errors/pattern_string_key.txt b/test/prism/errors/pattern_string_key.txt
new file mode 100644
index 0000000000..41bc1fa57b
--- /dev/null
+++ b/test/prism/errors/pattern_string_key.txt
@@ -0,0 +1,8 @@
+case:a
+^~~~ expected an `end` to close the `case` statement
+in b:"","#{}"
+ ^~~~~ expected a label after the `,` in the hash pattern
+ ^ expected a pattern expression after the key
+ ^ expected a delimiter after the patterns of an `in` clause
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+
diff --git a/test/prism/errors/pre_execution_context.txt b/test/prism/errors/pre_execution_context.txt
new file mode 100644
index 0000000000..18b11bae97
--- /dev/null
+++ b/test/prism/errors/pre_execution_context.txt
@@ -0,0 +1,4 @@
+BEGIN { 1 + }
+ ^ unexpected '}'; expected an expression after the operator
+ ^ unexpected '}', assuming it is closing the parent 'BEGIN' block
+
diff --git a/test/prism/errors/pre_execution_missing_brace.txt b/test/prism/errors/pre_execution_missing_brace.txt
new file mode 100644
index 0000000000..e51cd0732e
--- /dev/null
+++ b/test/prism/errors/pre_execution_missing_brace.txt
@@ -0,0 +1,3 @@
+BEGIN 1 }
+ ^ expected a `{` after `BEGIN`
+
diff --git a/test/prism/errors/range_and_bin_op.txt b/test/prism/errors/range_and_bin_op.txt
new file mode 100644
index 0000000000..55928c409b
--- /dev/null
+++ b/test/prism/errors/range_and_bin_op.txt
@@ -0,0 +1,5 @@
+1..2..3
+ ^~ unexpected ..; .. is a non-associative operator
+ ^~ unexpected .., expecting end-of-input
+ ^~ unexpected .., ignoring it
+
diff --git a/test/prism/errors/range_and_bin_op_2.txt b/test/prism/errors/range_and_bin_op_2.txt
new file mode 100644
index 0000000000..6ca91a26eb
--- /dev/null
+++ b/test/prism/errors/range_and_bin_op_2.txt
@@ -0,0 +1,5 @@
+1..2..
+ ^~ unexpected ..; .. is a non-associative operator
+ ^~ unexpected .., expecting end-of-input
+ ^~ unexpected .., ignoring it
+
diff --git a/test/prism/errors/range_and_bin_op_3.txt b/test/prism/errors/range_and_bin_op_3.txt
new file mode 100644
index 0000000000..34390d0776
--- /dev/null
+++ b/test/prism/errors/range_and_bin_op_3.txt
@@ -0,0 +1,3 @@
+1.. || 2
+ ^ unexpected '|'; expected an expression after the operator
+
diff --git a/test/prism/errors/range_and_bin_op_4.txt b/test/prism/errors/range_and_bin_op_4.txt
new file mode 100644
index 0000000000..ce6e79e5ff
--- /dev/null
+++ b/test/prism/errors/range_and_bin_op_4.txt
@@ -0,0 +1,5 @@
+1.. & 2
+ ^ unexpected '&'; .. is a non-associative operator
+ ^ unexpected '&', expecting end-of-input
+ ^ unexpected '&', ignoring it
+
diff --git a/test/prism/errors/range_and_bin_op_5.txt b/test/prism/errors/range_and_bin_op_5.txt
new file mode 100644
index 0000000000..4ed91e1052
--- /dev/null
+++ b/test/prism/errors/range_and_bin_op_5.txt
@@ -0,0 +1,6 @@
+1.. * 2
+ ^ unexpected *; .. is a non-associative operator
+ ^ unexpected *, expecting end-of-input
+ ^ unexpected write target
+ ^~~ unexpected write target
+
diff --git a/test/prism/errors/range_and_bin_op_6.txt b/test/prism/errors/range_and_bin_op_6.txt
new file mode 100644
index 0000000000..5cdd7a4f44
--- /dev/null
+++ b/test/prism/errors/range_and_bin_op_6.txt
@@ -0,0 +1,3 @@
+1.. / 2
+ ^ unterminated regexp meets end of file; expected a closing delimiter
+
diff --git a/test/prism/errors/range_and_bin_op_7.txt b/test/prism/errors/range_and_bin_op_7.txt
new file mode 100644
index 0000000000..3f91b5e97f
--- /dev/null
+++ b/test/prism/errors/range_and_bin_op_7.txt
@@ -0,0 +1,3 @@
+1.. % 2
+ ^ unterminated string meets end of file
+
diff --git a/test/prism/errors/range_and_bin_op_8.txt b/test/prism/errors/range_and_bin_op_8.txt
new file mode 100644
index 0000000000..afbf3719d5
--- /dev/null
+++ b/test/prism/errors/range_and_bin_op_8.txt
@@ -0,0 +1,4 @@
+1.. ** 2
+ ^~ unexpected **, expecting end-of-input
+ ^~ unexpected **, ignoring it
+
diff --git a/test/prism/errors/range_doubled.txt b/test/prism/errors/range_doubled.txt
new file mode 100644
index 0000000000..ef63d1bede
--- /dev/null
+++ b/test/prism/errors/range_doubled.txt
@@ -0,0 +1,3 @@
+p(...1...)
+ ^~~ unexpected range operator; .. and ... are non-associative and cannot be chained
+
diff --git a/test/prism/errors/rational_number_with_exponential_portion.txt b/test/prism/errors/rational_number_with_exponential_portion.txt
new file mode 100644
index 0000000000..01a03d538f
--- /dev/null
+++ b/test/prism/errors/rational_number_with_exponential_portion.txt
@@ -0,0 +1,4 @@
+1e1r; 1e1ri
+ ^ unexpected local variable or method, expecting end-of-input
+ ^~ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/regexp_unicode_too_short.txt b/test/prism/errors/regexp_unicode_too_short.txt
new file mode 100644
index 0000000000..b6504ec9f9
--- /dev/null
+++ b/test/prism/errors/regexp_unicode_too_short.txt
@@ -0,0 +1,4 @@
+/\u
+ ^~ too short escape sequence: \u
+^ unterminated regexp meets end of file; expected a closing delimiter
+
diff --git a/test/prism/errors/regular_expression_with_unknown_regexp_options.txt b/test/prism/errors/regular_expression_with_unknown_regexp_options.txt
new file mode 100644
index 0000000000..c37291ca40
--- /dev/null
+++ b/test/prism/errors/regular_expression_with_unknown_regexp_options.txt
@@ -0,0 +1,3 @@
+/foo/AZaz
+ ^~~~~ unknown regexp options - AZaz
+
diff --git a/test/prism/errors/repeated_parameter_name_in_destructured_params.txt b/test/prism/errors/repeated_parameter_name_in_destructured_params.txt
new file mode 100644
index 0000000000..766c235325
--- /dev/null
+++ b/test/prism/errors/repeated_parameter_name_in_destructured_params.txt
@@ -0,0 +1,3 @@
+def f(a, (b, (a))); end
+ ^ duplicated argument name
+
diff --git a/test/prism/errors/rest_keywords_parameters_before_required_parameters.txt b/test/prism/errors/rest_keywords_parameters_before_required_parameters.txt
new file mode 100644
index 0000000000..406f326712
--- /dev/null
+++ b/test/prism/errors/rest_keywords_parameters_before_required_parameters.txt
@@ -0,0 +1,4 @@
+def foo(**rest, b:)
+ ^~ unexpected parameter order
+end
+
diff --git a/test/prism/errors/return_1.txt b/test/prism/errors/return_1.txt
new file mode 100644
index 0000000000..ca3c3494d2
--- /dev/null
+++ b/test/prism/errors/return_1.txt
@@ -0,0 +1,3 @@
+return 1,;
+ ^ unexpected ';'; expected an argument
+
diff --git a/test/prism/errors/return_1_2_3.txt b/test/prism/errors/return_1_2_3.txt
new file mode 100644
index 0000000000..8f6dbaf194
--- /dev/null
+++ b/test/prism/errors/return_1_2_3.txt
@@ -0,0 +1,7 @@
+return(1, 2, 3)
+ ^ unexpected ',', expecting end-of-input
+ ^ unexpected ',', ignoring it
+ ^ expected a matching `)`
+ ^ unexpected ')', expecting end-of-input
+ ^ unexpected ')', ignoring it
+
diff --git a/test/prism/errors/returning_to_optional_parameters_multiple_times.txt b/test/prism/errors/returning_to_optional_parameters_multiple_times.txt
new file mode 100644
index 0000000000..83ca731850
--- /dev/null
+++ b/test/prism/errors/returning_to_optional_parameters_multiple_times.txt
@@ -0,0 +1,4 @@
+def foo(a, b = 1, c, d = 2, e)
+ ^ unexpected parameter order
+end
+
diff --git a/test/prism/errors/semicolon_after_inheritance_operator.txt b/test/prism/errors/semicolon_after_inheritance_operator.txt
new file mode 100644
index 0000000000..6b67e6048a
--- /dev/null
+++ b/test/prism/errors/semicolon_after_inheritance_operator.txt
@@ -0,0 +1,3 @@
+class Foo < Bar end
+ ^ unexpected `end`, expecting ';' or '\n'
+
diff --git a/test/prism/errors/setter_method_cannot_be_defined_in_an_endless_method_definition.txt b/test/prism/errors/setter_method_cannot_be_defined_in_an_endless_method_definition.txt
new file mode 100644
index 0000000000..7927664f3c
--- /dev/null
+++ b/test/prism/errors/setter_method_cannot_be_defined_in_an_endless_method_definition.txt
@@ -0,0 +1,6 @@
+def a=() = 42
+ ^~ invalid method name; a setter method cannot be defined in an endless method definition
+
+def []=() = 42
+ ^~~ invalid method name; a setter method cannot be defined in an endless method definition
+
diff --git a/test/prism/errors/shadow_args_in_block.txt b/test/prism/errors/shadow_args_in_block.txt
new file mode 100644
index 0000000000..1e7d5f9cd4
--- /dev/null
+++ b/test/prism/errors/shadow_args_in_block.txt
@@ -0,0 +1,3 @@
+tap{|a;a|}
+ ^ duplicated argument name
+
diff --git a/test/prism/errors/shadow_args_in_lambda.txt b/test/prism/errors/shadow_args_in_lambda.txt
new file mode 100644
index 0000000000..7fc78d7d8f
--- /dev/null
+++ b/test/prism/errors/shadow_args_in_lambda.txt
@@ -0,0 +1,5 @@
+->a;b{}
+ ^ expected a `do` keyword or a `{` to open the lambda block
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~ expected a lambda block beginning with `do` to end with `end`
+
diff --git a/test/prism/errors/singleton_class_delimiter.txt b/test/prism/errors/singleton_class_delimiter.txt
new file mode 100644
index 0000000000..6a0232cb40
--- /dev/null
+++ b/test/prism/errors/singleton_class_delimiter.txt
@@ -0,0 +1,3 @@
+class <<self rand end
+ ^~~~ unexpected local variable or method; expected a newline or a ';' after the singleton class
+
diff --git a/test/prism/errors/singleton_method_for_literals.txt b/test/prism/errors/singleton_method_for_literals.txt
new file mode 100644
index 0000000000..6247b4f025
--- /dev/null
+++ b/test/prism/errors/singleton_method_for_literals.txt
@@ -0,0 +1,39 @@
+def (1).g; end
+ ^ cannot define singleton method for literals
+def ((a; 1)).foo; end
+ ^ cannot define singleton method for literals
+def ((return; 1)).bar; end
+ ^ cannot define singleton method for literals
+def (((1))).foo; end
+ ^ cannot define singleton method for literals
+def (__FILE__).foo; end
+ ^~~~~~~~ cannot define singleton method for literals
+def (__ENCODING__).foo; end
+ ^~~~~~~~~~~~ cannot define singleton method for literals
+def (__LINE__).foo; end
+ ^~~~~~~~ cannot define singleton method for literals
+def ("foo").foo; end
+ ^~~~~ cannot define singleton method for literals
+def (3.14).foo; end
+ ^~~~ cannot define singleton method for literals
+def (3.14i).foo; end
+ ^~~~~ cannot define singleton method for literals
+def (:foo).foo; end
+ ^~~~ cannot define singleton method for literals
+def (:'foo').foo; end
+ ^~~~~~ cannot define singleton method for literals
+def (:'f{o}').foo; end
+ ^~~~~~~ cannot define singleton method for literals
+def ('foo').foo; end
+ ^~~~~ cannot define singleton method for literals
+def ("foo").foo; end
+ ^~~~~ cannot define singleton method for literals
+def ("#{fo}o").foo; end
+ ^~~~~~~~ cannot define singleton method for literals
+def (/foo/).foo; end
+ ^~~~~ cannot define singleton method for literals
+def (/f#{oo}/).foo; end
+ ^~~~~~~~ cannot define singleton method for literals
+def ([1]).foo; end
+ ^~~ cannot define singleton method for literals
+
diff --git a/test/prism/errors/splat_argument_after_keyword_argument.txt b/test/prism/errors/splat_argument_after_keyword_argument.txt
new file mode 100644
index 0000000000..fd2dbd0003
--- /dev/null
+++ b/test/prism/errors/splat_argument_after_keyword_argument.txt
@@ -0,0 +1,3 @@
+a(foo: bar, *args)
+ ^~~~~ unexpected `*` splat argument after a `**` keyword splat argument
+
diff --git a/test/prism/errors/statement_at_non_statement.txt b/test/prism/errors/statement_at_non_statement.txt
new file mode 100644
index 0000000000..40fe7d862e
--- /dev/null
+++ b/test/prism/errors/statement_at_non_statement.txt
@@ -0,0 +1,9 @@
+foo(alias x y)
+ ^~~~~ unexpected an `alias` at a non-statement position
+foo(BEGIN { bar })
+ ^~~~~ unexpected a `BEGIN` at a non-statement position
+foo(END { bar })
+ ^~~ unexpected an `END` at a non-statement position
+foo(undef x)
+ ^~~~~ unexpected an `undef` at a non-statement position
+
diff --git a/test/prism/errors/statement_operators.txt b/test/prism/errors/statement_operators.txt
new file mode 100644
index 0000000000..04b7c57477
--- /dev/null
+++ b/test/prism/errors/statement_operators.txt
@@ -0,0 +1,25 @@
+alias x y + 1
+ ^ unexpected '+', expecting end-of-input
+ ^ unexpected '+', ignoring it
+alias x y.z
+ ^ unexpected '.', expecting end-of-input
+ ^ unexpected '.', ignoring it
+BEGIN { bar } + 1
+ ^ unexpected '+', expecting end-of-input
+ ^ unexpected '+', ignoring it
+BEGIN { bar }.z
+ ^ unexpected '.', expecting end-of-input
+ ^ unexpected '.', ignoring it
+END { bar } + 1
+ ^ unexpected '+', expecting end-of-input
+ ^ unexpected '+', ignoring it
+END { bar }.z
+ ^ unexpected '.', expecting end-of-input
+ ^ unexpected '.', ignoring it
+undef x + 1
+ ^ unexpected '+', expecting end-of-input
+ ^ unexpected '+', ignoring it
+undef x.z
+ ^ unexpected '.', expecting end-of-input
+ ^ unexpected '.', ignoring it
+
diff --git a/test/prism/errors/switching_to_named_arguments_twice.txt b/test/prism/errors/switching_to_named_arguments_twice.txt
new file mode 100644
index 0000000000..5dae0a105a
--- /dev/null
+++ b/test/prism/errors/switching_to_named_arguments_twice.txt
@@ -0,0 +1,5 @@
+def foo(**args, a, b:)
+ ^ unexpected parameter order
+ ^~ unexpected parameter order
+end
+
diff --git a/test/prism/errors/switching_to_optional_arguments_twice.txt b/test/prism/errors/switching_to_optional_arguments_twice.txt
new file mode 100644
index 0000000000..5dae0a105a
--- /dev/null
+++ b/test/prism/errors/switching_to_optional_arguments_twice.txt
@@ -0,0 +1,5 @@
+def foo(**args, a, b:)
+ ^ unexpected parameter order
+ ^~ unexpected parameter order
+end
+
diff --git a/test/prism/errors/symbol_in_hash.txt b/test/prism/errors/symbol_in_hash.txt
new file mode 100644
index 0000000000..9e687583e5
--- /dev/null
+++ b/test/prism/errors/symbol_in_hash.txt
@@ -0,0 +1,3 @@
+{x:'y':}
+ ^~~~ unexpected label
+
diff --git a/test/prism/errors/symbol_in_keyword_parameter.txt b/test/prism/errors/symbol_in_keyword_parameter.txt
new file mode 100644
index 0000000000..9df43d8c5a
--- /dev/null
+++ b/test/prism/errors/symbol_in_keyword_parameter.txt
@@ -0,0 +1,3 @@
+def foo(x:'y':); end
+ ^~~~ unexpected label
+
diff --git a/test/prism/errors/targeting_numbered_parameter.txt b/test/prism/errors/targeting_numbered_parameter.txt
new file mode 100644
index 0000000000..39c40ad7b9
--- /dev/null
+++ b/test/prism/errors/targeting_numbered_parameter.txt
@@ -0,0 +1,3 @@
+-> { _1, = 0 }
+ ^~ _1 is reserved for numbered parameters
+
diff --git a/test/prism/errors/top_level_constant_starting_with_downcased_identifier.txt b/test/prism/errors/top_level_constant_starting_with_downcased_identifier.txt
new file mode 100644
index 0000000000..b7b54dd74e
--- /dev/null
+++ b/test/prism/errors/top_level_constant_starting_with_downcased_identifier.txt
@@ -0,0 +1,4 @@
+::foo::A
+ ^ expected a constant after the `::` operator
+ ^~~ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/top_level_constant_with_downcased_identifier.txt b/test/prism/errors/top_level_constant_with_downcased_identifier.txt
new file mode 100644
index 0000000000..032bcfaebb
--- /dev/null
+++ b/test/prism/errors/top_level_constant_with_downcased_identifier.txt
@@ -0,0 +1,4 @@
+::foo
+ ^ expected a constant after the `::` operator
+ ^~~ unexpected local variable or method, expecting end-of-input
+
diff --git a/test/prism/errors/trailing_comma_after_block.txt b/test/prism/errors/trailing_comma_after_block.txt
new file mode 100644
index 0000000000..d25db0efbe
--- /dev/null
+++ b/test/prism/errors/trailing_comma_after_block.txt
@@ -0,0 +1,3 @@
+p{|&,|}
+ ^ unexpected `,` in parameters
+
diff --git a/test/prism/errors/trailing_comma_in_calls.txt b/test/prism/errors/trailing_comma_in_calls.txt
new file mode 100644
index 0000000000..966d911087
--- /dev/null
+++ b/test/prism/errors/trailing_comma_in_calls.txt
@@ -0,0 +1,3 @@
+foo 1,
+ ^ unexpected end-of-input; expected an argument
+
diff --git a/test/prism/errors/unexpected_block.txt b/test/prism/errors/unexpected_block.txt
new file mode 100644
index 0000000000..2c0741cd30
--- /dev/null
+++ b/test/prism/errors/unexpected_block.txt
@@ -0,0 +1,3 @@
+def foo = yield(&:+)
+ ^~~ block argument should not be given
+
diff --git a/test/prism/errors/unterminated_W_list.txt b/test/prism/errors/unterminated_W_list.txt
new file mode 100644
index 0000000000..89cab68abb
--- /dev/null
+++ b/test/prism/errors/unterminated_W_list.txt
@@ -0,0 +1,3 @@
+%w[
+^~~ unterminated list; expected a closing delimiter for the `%w`
+
diff --git a/test/prism/errors/unterminated_argument_expression.txt b/test/prism/errors/unterminated_argument_expression.txt
new file mode 100644
index 0000000000..c250a94bec
--- /dev/null
+++ b/test/prism/errors/unterminated_argument_expression.txt
@@ -0,0 +1,5 @@
+a %
+ ^ unterminated quoted string meets end of file
+ ^ unexpected end-of-input; expected an expression after the operator
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+
diff --git a/test/prism/errors/unterminated_begin.txt b/test/prism/errors/unterminated_begin.txt
new file mode 100644
index 0000000000..2733f830c9
--- /dev/null
+++ b/test/prism/errors/unterminated_begin.txt
@@ -0,0 +1,4 @@
+begin
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~~~~ expected an `end` to close the `begin` statement
+
diff --git a/test/prism/errors/unterminated_begin_upcase.txt b/test/prism/errors/unterminated_begin_upcase.txt
new file mode 100644
index 0000000000..5512f2089e
--- /dev/null
+++ b/test/prism/errors/unterminated_begin_upcase.txt
@@ -0,0 +1,4 @@
+BEGIN {
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+ ^ expected a `}` to close the `BEGIN` statement
+
diff --git a/test/prism/errors/unterminated_block.txt b/test/prism/errors/unterminated_block.txt
new file mode 100644
index 0000000000..db6a4aa56c
--- /dev/null
+++ b/test/prism/errors/unterminated_block.txt
@@ -0,0 +1,4 @@
+foo {
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+ ^ expected a block beginning with `{` to end with `}`
+
diff --git a/test/prism/errors/unterminated_block_do_end.txt b/test/prism/errors/unterminated_block_do_end.txt
new file mode 100644
index 0000000000..0b7c64965f
--- /dev/null
+++ b/test/prism/errors/unterminated_block_do_end.txt
@@ -0,0 +1,4 @@
+foo do
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+ ^~ expected a block beginning with `do` to end with `end`
+
diff --git a/test/prism/errors/unterminated_class.txt b/test/prism/errors/unterminated_class.txt
new file mode 100644
index 0000000000..f47a3aa7df
--- /dev/null
+++ b/test/prism/errors/unterminated_class.txt
@@ -0,0 +1,4 @@
+class Foo
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~~~~ expected an `end` to close the `class` statement
+
diff --git a/test/prism/errors/unterminated_def.txt b/test/prism/errors/unterminated_def.txt
new file mode 100644
index 0000000000..a6212e3a21
--- /dev/null
+++ b/test/prism/errors/unterminated_def.txt
@@ -0,0 +1,5 @@
+def foo
+ ^ expected a delimiter to close the parameters
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~~ expected an `end` to close the `def` statement
+
diff --git a/test/prism/errors/unterminated_embdoc.txt b/test/prism/errors/unterminated_embdoc.txt
new file mode 100644
index 0000000000..1dd9ea3ac4
--- /dev/null
+++ b/test/prism/errors/unterminated_embdoc.txt
@@ -0,0 +1,3 @@
+=begin
+^~~~~~ embedded document meets end of file
+
diff --git a/test/prism/errors/unterminated_embdoc_2.txt b/test/prism/errors/unterminated_embdoc_2.txt
new file mode 100644
index 0000000000..1dd9ea3ac4
--- /dev/null
+++ b/test/prism/errors/unterminated_embdoc_2.txt
@@ -0,0 +1,3 @@
+=begin
+^~~~~~ embedded document meets end of file
+
diff --git a/test/prism/errors/unterminated_empty_string.txt b/test/prism/errors/unterminated_empty_string.txt
new file mode 100644
index 0000000000..597102f7ee
--- /dev/null
+++ b/test/prism/errors/unterminated_empty_string.txt
@@ -0,0 +1,3 @@
+"
+ ^ unterminated string meets end of file
+
diff --git a/test/prism/errors/unterminated_end_upcase.txt b/test/prism/errors/unterminated_end_upcase.txt
new file mode 100644
index 0000000000..ef01caa0ca
--- /dev/null
+++ b/test/prism/errors/unterminated_end_upcase.txt
@@ -0,0 +1,4 @@
+END {
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+ ^ expected a `}` to close the `END` statement
+
diff --git a/test/prism/errors/unterminated_for.txt b/test/prism/errors/unterminated_for.txt
new file mode 100644
index 0000000000..75978a7cae
--- /dev/null
+++ b/test/prism/errors/unterminated_for.txt
@@ -0,0 +1,5 @@
+for x in y
+ ^ unexpected end-of-input; expected a 'do', newline, or ';' after the 'for' loop collection
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~~ expected an `end` to close the `for` loop
+
diff --git a/test/prism/errors/unterminated_global_variable.txt b/test/prism/errors/unterminated_global_variable.txt
new file mode 100644
index 0000000000..ce3e960b2e
--- /dev/null
+++ b/test/prism/errors/unterminated_global_variable.txt
@@ -0,0 +1,3 @@
+$
+^ '$' without identifiers is not allowed as a global variable name
+
diff --git a/test/prism/errors/unterminated_global_variable_2.txt b/test/prism/errors/unterminated_global_variable_2.txt
new file mode 100644
index 0000000000..302293b538
--- /dev/null
+++ b/test/prism/errors/unterminated_global_variable_2.txt
@@ -0,0 +1,3 @@
+$
+^ '$' without identifiers is not allowed as a global variable name
+
diff --git a/test/prism/errors/unterminated_i_list.txt b/test/prism/errors/unterminated_i_list.txt
new file mode 100644
index 0000000000..c48be9971d
--- /dev/null
+++ b/test/prism/errors/unterminated_i_list.txt
@@ -0,0 +1,3 @@
+%i[
+^~~ unterminated list; expected a closing delimiter for the `%i`
+
diff --git a/test/prism/errors/unterminated_if.txt b/test/prism/errors/unterminated_if.txt
new file mode 100644
index 0000000000..1697931773
--- /dev/null
+++ b/test/prism/errors/unterminated_if.txt
@@ -0,0 +1,5 @@
+if true
+ ^ expected `then` or `;` or '\n'
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~ expected an `end` to close the conditional clause
+
diff --git a/test/prism/errors/unterminated_if_else.txt b/test/prism/errors/unterminated_if_else.txt
new file mode 100644
index 0000000000..db7828cce8
--- /dev/null
+++ b/test/prism/errors/unterminated_if_else.txt
@@ -0,0 +1,5 @@
+if true
+^~ expected an `end` to close the `else` clause
+else
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+
diff --git a/test/prism/errors/unterminated_interpolated_string.txt b/test/prism/errors/unterminated_interpolated_string.txt
new file mode 100644
index 0000000000..e74a4c9e20
--- /dev/null
+++ b/test/prism/errors/unterminated_interpolated_string.txt
@@ -0,0 +1,3 @@
+"hello
+ ^ unterminated string meets end of file
+
diff --git a/test/prism/errors/unterminated_interpolated_symbol.txt b/test/prism/errors/unterminated_interpolated_symbol.txt
new file mode 100644
index 0000000000..faa7597280
--- /dev/null
+++ b/test/prism/errors/unterminated_interpolated_symbol.txt
@@ -0,0 +1,3 @@
+:"#
+ ^ unterminated symbol; expected a closing delimiter for the interpolated symbol
+
diff --git a/test/prism/errors/unterminated_lambda_brace.txt b/test/prism/errors/unterminated_lambda_brace.txt
new file mode 100644
index 0000000000..75474c7534
--- /dev/null
+++ b/test/prism/errors/unterminated_lambda_brace.txt
@@ -0,0 +1,4 @@
+-> {
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+ ^ expected a lambda block beginning with `{` to end with `}`
+
diff --git a/test/prism/errors/unterminated_method_parameters.txt b/test/prism/errors/unterminated_method_parameters.txt
new file mode 100644
index 0000000000..e71371ba16
--- /dev/null
+++ b/test/prism/errors/unterminated_method_parameters.txt
@@ -0,0 +1,3 @@
+foo(
+ ^ unexpected end-of-input; expected a `)` to close the arguments
+
diff --git a/test/prism/errors/unterminated_module.txt b/test/prism/errors/unterminated_module.txt
new file mode 100644
index 0000000000..4c50ba5f63
--- /dev/null
+++ b/test/prism/errors/unterminated_module.txt
@@ -0,0 +1,4 @@
+module Foo
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~~~~~ expected an `end` to close the `module` statement
+
diff --git a/test/prism/errors/unterminated_parenthesized_expression.txt b/test/prism/errors/unterminated_parenthesized_expression.txt
new file mode 100644
index 0000000000..9025eec453
--- /dev/null
+++ b/test/prism/errors/unterminated_parenthesized_expression.txt
@@ -0,0 +1,4 @@
+(1 + 2
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+ ^ expected a matching `)`
+
diff --git a/test/prism/errors/unterminated_pattern_bracket.txt b/test/prism/errors/unterminated_pattern_bracket.txt
new file mode 100644
index 0000000000..4f35cd84af
--- /dev/null
+++ b/test/prism/errors/unterminated_pattern_bracket.txt
@@ -0,0 +1,7 @@
+case x
+^~~~ expected an `end` to close the `case` statement
+in [1
+ ^ expected a `]` to close the pattern expression
+ ^ expected a delimiter after the patterns of an `in` clause
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+
diff --git a/test/prism/errors/unterminated_pattern_paren.txt b/test/prism/errors/unterminated_pattern_paren.txt
new file mode 100644
index 0000000000..426d614e61
--- /dev/null
+++ b/test/prism/errors/unterminated_pattern_paren.txt
@@ -0,0 +1,7 @@
+case x
+^~~~ expected an `end` to close the `case` statement
+in (1
+ ^ expected a `)` to close the pattern expression
+ ^ expected a delimiter after the patterns of an `in` clause
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+
diff --git a/test/prism/errors/unterminated_regular_expression.txt b/test/prism/errors/unterminated_regular_expression.txt
new file mode 100644
index 0000000000..48f3a30810
--- /dev/null
+++ b/test/prism/errors/unterminated_regular_expression.txt
@@ -0,0 +1,3 @@
+/hello
+^ unterminated regexp meets end of file; expected a closing delimiter
+
diff --git a/test/prism/errors/unterminated_regular_expression_with_heredoc.txt b/test/prism/errors/unterminated_regular_expression_with_heredoc.txt
new file mode 100644
index 0000000000..d4688d6c9e
--- /dev/null
+++ b/test/prism/errors/unterminated_regular_expression_with_heredoc.txt
@@ -0,0 +1,4 @@
+<<-END + /b
+ ^ unterminated regexp meets end of file; expected a closing delimiter
+END
+
diff --git a/test/prism/errors/unterminated_s_symbol.txt b/test/prism/errors/unterminated_s_symbol.txt
new file mode 100644
index 0000000000..0f4be932b3
--- /dev/null
+++ b/test/prism/errors/unterminated_s_symbol.txt
@@ -0,0 +1,3 @@
+%s[abc
+^~~ unterminated quoted string; expected a closing delimiter for the dynamic symbol
+
diff --git a/test/prism/errors/unterminated_string.txt b/test/prism/errors/unterminated_string.txt
new file mode 100644
index 0000000000..89c0a08b3e
--- /dev/null
+++ b/test/prism/errors/unterminated_string.txt
@@ -0,0 +1,3 @@
+'hello
+^ unterminated string meets end of file
+
diff --git a/test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt b/test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt
new file mode 100644
index 0000000000..f3ac9f29ab
--- /dev/null
+++ b/test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt
@@ -0,0 +1,3 @@
+?\u{3
+ ^~~~ invalid Unicode list: \u{3
+
diff --git a/test/prism/errors/unterminated_until.txt b/test/prism/errors/unterminated_until.txt
new file mode 100644
index 0000000000..42a0545200
--- /dev/null
+++ b/test/prism/errors/unterminated_until.txt
@@ -0,0 +1,5 @@
+until true
+ ^ expected a predicate expression for the `until` statement
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~~~~ expected an `end` to close the `until` statement
+
diff --git a/test/prism/errors/unterminated_xstring.txt b/test/prism/errors/unterminated_xstring.txt
new file mode 100644
index 0000000000..ccd529774c
--- /dev/null
+++ b/test/prism/errors/unterminated_xstring.txt
@@ -0,0 +1,3 @@
+`hello
+^ expected a closing delimiter for the `%x` or backtick string
+
diff --git a/test/prism/errors/void_value_expression_in_arguments.txt b/test/prism/errors/void_value_expression_in_arguments.txt
new file mode 100644
index 0000000000..f57aee1454
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_arguments.txt
@@ -0,0 +1,17 @@
+foo(return)
+ ^~~~~~ unexpected void value expression
+foo(1, return)
+ ^~~~~~ unexpected void value expression
+foo(*return)
+ ^~~~~~ unexpected void value expression
+foo(**return)
+ ^~~~~~ unexpected void value expression
+foo(&return)
+ ^~~~~~ unexpected void value expression
+foo(return => 1)
+ ^~~~~~ unexpected void value expression
+foo(:a => return)
+ ^~~~~~ unexpected void value expression
+foo(a: return)
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/void_value_expression_in_array.txt b/test/prism/errors/void_value_expression_in_array.txt
new file mode 100644
index 0000000000..a0e86fb135
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_array.txt
@@ -0,0 +1,15 @@
+[return]
+ ^~~~~~ unexpected void value expression
+[1, return]
+ ^~~~~~ unexpected void value expression
+[ return => 1 ]
+ ^~~~~~ unexpected void value expression
+[ 1 => return ]
+ ^~~~~~ unexpected void value expression
+[ a: return ]
+ ^~~~~~ unexpected void value expression
+[ *return ]
+ ^~~~~~ unexpected void value expression
+[ **return ]
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/void_value_expression_in_assignment.txt b/test/prism/errors/void_value_expression_in_assignment.txt
new file mode 100644
index 0000000000..c651d7f39e
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_assignment.txt
@@ -0,0 +1,9 @@
+a = return
+ ^~~~~~ unexpected void value expression
+a = 1, return
+ ^~~~~~ unexpected void value expression
+a, b = return, 1
+ ^~~~~~ unexpected void value expression
+a, b = 1, *return
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/void_value_expression_in_begin_statement.txt b/test/prism/errors/void_value_expression_in_begin_statement.txt
new file mode 100644
index 0000000000..aa8f1ded96
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_begin_statement.txt
@@ -0,0 +1,21 @@
+x = return 1
+ ^~~~~~~~ unexpected void value expression
+x = return, 1
+ ^~~~~~ unexpected void value expression
+x = 1, return
+ ^~~~~~ unexpected void value expression
+x, y = return
+ ^~~~~~ unexpected void value expression
+x = begin return ensure end
+ ^~~~~~ unexpected void value expression
+x = begin ensure return end
+ ^~~~~~ unexpected void value expression
+x = begin return ensure return end
+ ^~~~~~ unexpected void value expression
+x = begin return; rescue; return end
+ ^~~~~~ unexpected void value expression
+x = begin return; rescue; return; else return end
+ ^~~~~~ unexpected void value expression
+x = begin; return; rescue; retry; end
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/void_value_expression_in_binary_call.txt b/test/prism/errors/void_value_expression_in_binary_call.txt
new file mode 100644
index 0000000000..096b42be4d
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_binary_call.txt
@@ -0,0 +1,11 @@
+1 + (return)
+ ^~~~~~ unexpected void value expression
+(return) + 1
+ ^~~~~~ unexpected void value expression
+1 and (return)
+(return) and 1
+ ^~~~~~ unexpected void value expression
+1 or (return)
+(return) or 1
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/void_value_expression_in_call.txt b/test/prism/errors/void_value_expression_in_call.txt
new file mode 100644
index 0000000000..90e6481c4c
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_call.txt
@@ -0,0 +1,11 @@
+(return).foo
+ ^~~~~~ unexpected void value expression
+(return).(1)
+ ^~~~~~ unexpected void value expression
+(return)[1]
+ ^~~~~~ unexpected void value expression
+(return)[1] = 2
+ ^~~~~~ unexpected void value expression
+(return)::foo
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/void_value_expression_in_constant_path.txt b/test/prism/errors/void_value_expression_in_constant_path.txt
new file mode 100644
index 0000000000..1dab6902a2
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_constant_path.txt
@@ -0,0 +1,5 @@
+(return)::A
+ ^~~~~~ unexpected void value expression
+class (return)::A; end
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/void_value_expression_in_def.txt b/test/prism/errors/void_value_expression_in_def.txt
new file mode 100644
index 0000000000..fed52a6677
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_def.txt
@@ -0,0 +1,10 @@
+def (return).x
+ ^~~~~~ unexpected void value expression
+end
+def x(a = return)
+ ^~~~~~ unexpected void value expression
+end
+def x(a: return)
+ ^~~~~~ unexpected void value expression
+end
+
diff --git a/test/prism/errors/void_value_expression_in_expression.txt b/test/prism/errors/void_value_expression_in_expression.txt
new file mode 100644
index 0000000000..f6165a7ba6
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_expression.txt
@@ -0,0 +1,19 @@
+(return) ? 1 : 1
+ ^~~~~~ unexpected void value expression
+(return)..1
+ ^~~~~~ unexpected void value expression
+1..(return)
+ ^~~~~~ unexpected void value expression
+(return)...1
+ ^~~~~~ unexpected void value expression
+1...(return)
+ ^~~~~~ unexpected void value expression
+(..(return))
+ ^~~~~~ unexpected void value expression
+(...(return))
+ ^~~~~~ unexpected void value expression
+((return)..)
+ ^~~~~~ unexpected void value expression
+((return)...)
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/void_value_expression_in_hash.txt b/test/prism/errors/void_value_expression_in_hash.txt
new file mode 100644
index 0000000000..7795511443
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_hash.txt
@@ -0,0 +1,9 @@
+{ return => 1 }
+ ^~~~~~ unexpected void value expression
+{ 1 => return }
+ ^~~~~~ unexpected void value expression
+{ a: return }
+ ^~~~~~ unexpected void value expression
+{ **return }
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/void_value_expression_in_modifier.txt b/test/prism/errors/void_value_expression_in_modifier.txt
new file mode 100644
index 0000000000..7d7b444e33
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_modifier.txt
@@ -0,0 +1,13 @@
+1 if (return)
+ ^~~~~~ unexpected void value expression
+1 unless (return)
+ ^~~~~~ unexpected void value expression
+1 while (return)
+ ^~~~~~ unexpected void value expression
+1 until (return)
+ ^~~~~~ unexpected void value expression
+(return) => a
+ ^~~~~~ unexpected void value expression
+(return) in a
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/void_value_expression_in_statement.txt b/test/prism/errors/void_value_expression_in_statement.txt
new file mode 100644
index 0000000000..87dbfa5cc9
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_statement.txt
@@ -0,0 +1,26 @@
+if (return)
+ ^~~~~~ unexpected void value expression
+end
+unless (return)
+ ^~~~~~ unexpected void value expression
+end
+while (return)
+ ^~~~~~ unexpected void value expression
+end
+until (return)
+ ^~~~~~ unexpected void value expression
+end
+case (return)
+ ^~~~~~ unexpected void value expression
+when 1
+end
+class A < (return)
+ ^~~~~~ unexpected void value expression
+end
+class << (return)
+ ^~~~~~ unexpected void value expression
+end
+for x in (return)
+ ^~~~~~ unexpected void value expression
+end
+
diff --git a/test/prism/errors/void_value_expression_in_unary_call.txt b/test/prism/errors/void_value_expression_in_unary_call.txt
new file mode 100644
index 0000000000..61e849255c
--- /dev/null
+++ b/test/prism/errors/void_value_expression_in_unary_call.txt
@@ -0,0 +1,5 @@
++(return)
+ ^~~~~~ unexpected void value expression
+not return
+ ^~~~~~ unexpected void value expression
+
diff --git a/test/prism/errors/while_endless_method.txt b/test/prism/errors/while_endless_method.txt
new file mode 100644
index 0000000000..cdd7ba9aba
--- /dev/null
+++ b/test/prism/errors/while_endless_method.txt
@@ -0,0 +1,5 @@
+while def f = g do end
+ ^ expected a predicate expression for the `while` statement
+ ^ unexpected end-of-input, assuming it is closing the parent top level context
+^~~~~ expected an `end` to close the `while` statement
+
diff --git a/test/prism/errors/writing_numbered_parameter.txt b/test/prism/errors/writing_numbered_parameter.txt
new file mode 100644
index 0000000000..17dcc6e8f0
--- /dev/null
+++ b/test/prism/errors/writing_numbered_parameter.txt
@@ -0,0 +1,3 @@
+-> { _1 = 0 }
+ ^~ _1 is reserved for numbered parameters
+
diff --git a/test/prism/errors/xstring_concat.txt b/test/prism/errors/xstring_concat.txt
new file mode 100644
index 0000000000..f4d453d68d
--- /dev/null
+++ b/test/prism/errors/xstring_concat.txt
@@ -0,0 +1,5 @@
+<<`EOC` "bar"
+^~~~~~~ expected a string for concatenation
+echo foo
+EOC
+