зеркало из https://github.com/github/ruby.git
[ruby/prism] Support passing version 3.3.1
https://github.com/ruby/prism/commit/445a0f0d22
This commit is contained in:
Родитель
5cd0abdfb5
Коммит
8e1647c3aa
|
@ -149,17 +149,17 @@ module Prism
|
|||
Diagnostic.new(:error, :endless_setter, {}, diagnostic_location, [])
|
||||
when :embdoc_term
|
||||
Diagnostic.new(:error, :embedded_document, {}, diagnostic_location, [])
|
||||
when :incomplete_variable_class, :incomplete_variable_class_3_3_0
|
||||
when :incomplete_variable_class, :incomplete_variable_class_3_3
|
||||
location = location.copy(length: location.length + 1)
|
||||
diagnostic_location = build_range(location, offset_cache)
|
||||
|
||||
Diagnostic.new(:error, :cvar_name, { name: location.slice }, diagnostic_location, [])
|
||||
when :incomplete_variable_instance, :incomplete_variable_instance_3_3_0
|
||||
when :incomplete_variable_instance, :incomplete_variable_instance_3_3
|
||||
location = location.copy(length: location.length + 1)
|
||||
diagnostic_location = build_range(location, offset_cache)
|
||||
|
||||
Diagnostic.new(:error, :ivar_name, { name: location.slice }, diagnostic_location, [])
|
||||
when :invalid_variable_global, :invalid_variable_global_3_3_0
|
||||
when :invalid_variable_global, :invalid_variable_global_3_3
|
||||
Diagnostic.new(:error, :gvar_name, { name: location.slice }, diagnostic_location, [])
|
||||
when :module_in_method
|
||||
Diagnostic.new(:error, :module_in_def, {}, diagnostic_location, [])
|
||||
|
|
|
@ -126,9 +126,9 @@ errors:
|
|||
- HEREDOC_TERM
|
||||
- INCOMPLETE_QUESTION_MARK
|
||||
- INCOMPLETE_VARIABLE_CLASS
|
||||
- INCOMPLETE_VARIABLE_CLASS_3_3_0
|
||||
- INCOMPLETE_VARIABLE_CLASS_3_3
|
||||
- INCOMPLETE_VARIABLE_INSTANCE
|
||||
- INCOMPLETE_VARIABLE_INSTANCE_3_3_0
|
||||
- INCOMPLETE_VARIABLE_INSTANCE_3_3
|
||||
- INSTANCE_VARIABLE_BARE
|
||||
- INVALID_BLOCK_EXIT
|
||||
- INVALID_CHARACTER
|
||||
|
@ -152,7 +152,7 @@ errors:
|
|||
- INVALID_RETRY_WITHOUT_RESCUE
|
||||
- INVALID_SYMBOL
|
||||
- INVALID_VARIABLE_GLOBAL
|
||||
- INVALID_VARIABLE_GLOBAL_3_3_0
|
||||
- INVALID_VARIABLE_GLOBAL_3_3
|
||||
- INVALID_YIELD
|
||||
- IT_NOT_ALLOWED_NUMBERED
|
||||
- IT_NOT_ALLOWED_ORDINARY
|
||||
|
@ -268,7 +268,7 @@ warnings:
|
|||
- COMPARISON_AFTER_COMPARISON
|
||||
- DOT_DOT_DOT_EOL
|
||||
- EQUAL_IN_CONDITIONAL
|
||||
- EQUAL_IN_CONDITIONAL_3_3_0
|
||||
- EQUAL_IN_CONDITIONAL_3_3
|
||||
- END_IN_METHOD
|
||||
- DUPLICATED_HASH_KEY
|
||||
- DUPLICATED_WHEN_CLAUSE
|
||||
|
|
|
@ -58,8 +58,8 @@ pm_options_version_set(pm_options_t *options, const char *version, size_t length
|
|||
case 5:
|
||||
assert(version != NULL);
|
||||
|
||||
if (strncmp(version, "3.3.0", length) == 0) {
|
||||
options->version = PM_OPTIONS_VERSION_CRUBY_3_3_0;
|
||||
if ((strncmp(version, "3.3.0", length) == 0) || (strncmp(version, "3.3.1", length) == 0)) {
|
||||
options->version = PM_OPTIONS_VERSION_CRUBY_3_3;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,8 +49,8 @@ typedef enum {
|
|||
/** The current version of prism. */
|
||||
PM_OPTIONS_VERSION_LATEST = 0,
|
||||
|
||||
/** The vendored version of prism in CRuby 3.3.0. */
|
||||
PM_OPTIONS_VERSION_CRUBY_3_3_0 = 1
|
||||
/** The vendored version of prism in CRuby 3.3.x. */
|
||||
PM_OPTIONS_VERSION_CRUBY_3_3 = 1
|
||||
} pm_options_version_t;
|
||||
|
||||
/**
|
||||
|
|
|
@ -1405,7 +1405,7 @@ pm_conditional_predicate_warn_write_literal_p(const pm_node_t *node) {
|
|||
static inline void
|
||||
pm_conditional_predicate_warn_write_literal(pm_parser_t *parser, const pm_node_t *node) {
|
||||
if (pm_conditional_predicate_warn_write_literal_p(node)) {
|
||||
pm_parser_warn_node(parser, node, parser->version == PM_OPTIONS_VERSION_CRUBY_3_3_0 ? PM_WARN_EQUAL_IN_CONDITIONAL_3_3_0 : PM_WARN_EQUAL_IN_CONDITIONAL);
|
||||
pm_parser_warn_node(parser, node, parser->version == PM_OPTIONS_VERSION_CRUBY_3_3 ? PM_WARN_EQUAL_IN_CONDITIONAL_3_3 : PM_WARN_EQUAL_IN_CONDITIONAL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7834,7 +7834,7 @@ pm_local_variable_read_node_create_it(pm_parser_t *parser, const pm_token_t *nam
|
|||
static pm_node_t *
|
||||
pm_node_check_it(pm_parser_t *parser, pm_node_t *node) {
|
||||
if (
|
||||
(parser->version != PM_OPTIONS_VERSION_CRUBY_3_3_0) &&
|
||||
(parser->version != PM_OPTIONS_VERSION_CRUBY_3_3) &&
|
||||
!parser->current_scope->closed &&
|
||||
(parser->current_scope->numbered_parameters != PM_SCOPE_NUMBERED_PARAMETERS_DISALLOWED) &&
|
||||
pm_node_is_it(parser, node)
|
||||
|
@ -8832,7 +8832,7 @@ lex_global_variable(pm_parser_t *parser) {
|
|||
} while (parser->current.end < parser->end && (width = char_is_identifier(parser, parser->current.end)) > 0);
|
||||
|
||||
// $0 isn't allowed to be followed by anything.
|
||||
pm_diagnostic_id_t diag_id = parser->version == PM_OPTIONS_VERSION_CRUBY_3_3_0 ? PM_ERR_INVALID_VARIABLE_GLOBAL_3_3_0 : PM_ERR_INVALID_VARIABLE_GLOBAL;
|
||||
pm_diagnostic_id_t diag_id = parser->version == PM_OPTIONS_VERSION_CRUBY_3_3 ? PM_ERR_INVALID_VARIABLE_GLOBAL_3_3 : PM_ERR_INVALID_VARIABLE_GLOBAL;
|
||||
PM_PARSER_ERR_TOKEN_FORMAT_CONTENT(parser, parser->current, diag_id);
|
||||
}
|
||||
|
||||
|
@ -8868,7 +8868,7 @@ lex_global_variable(pm_parser_t *parser) {
|
|||
} else {
|
||||
// If we get here, then we have a $ followed by something that
|
||||
// isn't recognized as a global variable.
|
||||
pm_diagnostic_id_t diag_id = parser->version == PM_OPTIONS_VERSION_CRUBY_3_3_0 ? PM_ERR_INVALID_VARIABLE_GLOBAL_3_3_0 : PM_ERR_INVALID_VARIABLE_GLOBAL;
|
||||
pm_diagnostic_id_t diag_id = parser->version == PM_OPTIONS_VERSION_CRUBY_3_3 ? PM_ERR_INVALID_VARIABLE_GLOBAL_3_3 : PM_ERR_INVALID_VARIABLE_GLOBAL;
|
||||
size_t width = parser->encoding->char_width(parser->current.end, parser->end - parser->current.end);
|
||||
PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, diag_id, (int) ((parser->current.end + width) - parser->current.start), (const char *) parser->current.start);
|
||||
}
|
||||
|
@ -9825,8 +9825,8 @@ lex_at_variable(pm_parser_t *parser) {
|
|||
}
|
||||
} else if (parser->current.end < parser->end && pm_char_is_decimal_digit(*parser->current.end)) {
|
||||
pm_diagnostic_id_t diag_id = (type == PM_TOKEN_CLASS_VARIABLE) ? PM_ERR_INCOMPLETE_VARIABLE_CLASS : PM_ERR_INCOMPLETE_VARIABLE_INSTANCE;
|
||||
if (parser->version == PM_OPTIONS_VERSION_CRUBY_3_3_0) {
|
||||
diag_id = (type == PM_TOKEN_CLASS_VARIABLE) ? PM_ERR_INCOMPLETE_VARIABLE_CLASS_3_3_0 : PM_ERR_INCOMPLETE_VARIABLE_INSTANCE_3_3_0;
|
||||
if (parser->version == PM_OPTIONS_VERSION_CRUBY_3_3) {
|
||||
diag_id = (type == PM_TOKEN_CLASS_VARIABLE) ? PM_ERR_INCOMPLETE_VARIABLE_CLASS_3_3 : PM_ERR_INCOMPLETE_VARIABLE_INSTANCE_3_3;
|
||||
}
|
||||
|
||||
size_t width = parser->encoding->char_width(parser->current.end, parser->end - parser->current.end);
|
||||
|
@ -16254,7 +16254,7 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm
|
|||
|
||||
if (variable == NULL) {
|
||||
if (
|
||||
(parser->version != PM_OPTIONS_VERSION_CRUBY_3_3_0) &&
|
||||
(parser->version != PM_OPTIONS_VERSION_CRUBY_3_3) &&
|
||||
!parser->current_scope->closed &&
|
||||
(parser->current_scope->numbered_parameters != PM_SCOPE_NUMBERED_PARAMETERS_DISALLOWED) &&
|
||||
pm_token_is_it(parser->previous.start, parser->previous.end)
|
||||
|
|
|
@ -209,9 +209,9 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = {
|
|||
[PM_ERR_HASH_VALUE] = { "expected a value in the hash literal", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_HEREDOC_TERM] = { "could not find a terminator for the heredoc", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INCOMPLETE_QUESTION_MARK] = { "incomplete expression at `?`", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INCOMPLETE_VARIABLE_CLASS_3_3_0] = { "`%.*s' is not allowed as a class variable name", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INCOMPLETE_VARIABLE_CLASS_3_3] = { "`%.*s' is not allowed as a class variable name", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INCOMPLETE_VARIABLE_CLASS] = { "'%.*s' is not allowed as a class variable name", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INCOMPLETE_VARIABLE_INSTANCE_3_3_0] = { "`%.*s' is not allowed as an instance variable name", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INCOMPLETE_VARIABLE_INSTANCE_3_3] = { "`%.*s' is not allowed as an instance variable name", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INCOMPLETE_VARIABLE_INSTANCE] = { "'%.*s' is not allowed as an instance variable name", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INSTANCE_VARIABLE_BARE] = { "'@' without identifiers is not allowed as an instance variable name", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INVALID_BLOCK_EXIT] = { "Invalid %s", PM_ERROR_LEVEL_SYNTAX },
|
||||
|
@ -234,7 +234,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = {
|
|||
[PM_ERR_INVALID_RETRY_AFTER_ENSURE] = { "Invalid retry after ensure", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INVALID_RETRY_WITHOUT_RESCUE] = { "Invalid retry without rescue", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INVALID_SYMBOL] = { "invalid symbol", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INVALID_VARIABLE_GLOBAL_3_3_0] = { "`%.*s' is not allowed as a global variable name", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INVALID_VARIABLE_GLOBAL_3_3] = { "`%.*s' is not allowed as a global variable name", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INVALID_VARIABLE_GLOBAL] = { "'%.*s' is not allowed as a global variable name", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_INVALID_YIELD] = { "Invalid yield", PM_ERROR_LEVEL_SYNTAX },
|
||||
[PM_ERR_IT_NOT_ALLOWED_NUMBERED] = { "`it` is not allowed when an numbered parameter is defined", PM_ERROR_LEVEL_SYNTAX },
|
||||
|
@ -352,7 +352,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = {
|
|||
[PM_WARN_DOT_DOT_DOT_EOL] = { "... at EOL, should be parenthesized?", PM_WARNING_LEVEL_DEFAULT },
|
||||
[PM_WARN_DUPLICATED_HASH_KEY] = { "key %.*s is duplicated and overwritten on line %" PRIi32, PM_WARNING_LEVEL_DEFAULT },
|
||||
[PM_WARN_DUPLICATED_WHEN_CLAUSE] = { "duplicated 'when' clause with line %" PRIi32 " is ignored", PM_WARNING_LEVEL_VERBOSE },
|
||||
[PM_WARN_EQUAL_IN_CONDITIONAL_3_3_0] = { "found `= literal' in conditional, should be ==", PM_WARNING_LEVEL_DEFAULT },
|
||||
[PM_WARN_EQUAL_IN_CONDITIONAL_3_3] = { "found `= literal' in conditional, should be ==", PM_WARNING_LEVEL_DEFAULT },
|
||||
[PM_WARN_EQUAL_IN_CONDITIONAL] = { "found '= literal' in conditional, should be ==", PM_WARNING_LEVEL_DEFAULT },
|
||||
[PM_WARN_END_IN_METHOD] = { "END in method; use at_exit", PM_WARNING_LEVEL_DEFAULT },
|
||||
[PM_WARN_FLOAT_OUT_OF_RANGE] = { "Float %.*s%s out of range", PM_WARNING_LEVEL_VERBOSE },
|
||||
|
|
|
@ -4,7 +4,7 @@ require_relative "test_helper"
|
|||
|
||||
module Prism
|
||||
class IndexWriteTest < TestCase
|
||||
def test_keywords_3_3_0
|
||||
def test_keywords_3_3
|
||||
assert_parse_success(<<~RUBY, "3.3.0")
|
||||
foo[bar: 1] = 1
|
||||
foo[bar: 1] &&= 1
|
||||
|
@ -22,7 +22,7 @@ module Prism
|
|||
RUBY
|
||||
end
|
||||
|
||||
def test_block_3_3_0
|
||||
def test_block_3_3
|
||||
assert_parse_success(<<~RUBY, "3.3.0")
|
||||
foo[&bar] = 1
|
||||
foo[&bar] &&= 1
|
||||
|
|
Загрузка…
Ссылка в новой задаче